2017-02-20 13 views
7

内部で認識されていない私はFLINK-conf.yamlに次の行を追加しました/ PROPS/FILE」のApache FLINKカスタムJavaオプションジョブ

jobmanager(jobmanager.sh開始クラスタ)を起動するとき、私はJVMオプションが実際に

2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager    - JVM Options: 
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager    -  -Xms256m 
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager    -  -Xmx256m 
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager    -  -XX:MaxPermSize=256m 
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager    -  -Ddy.props.path=/srv/dy/stream-aggregators/aggregators.conf 
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager    -  -Dlog.file=/srv/flink-1.2.0/log/flink-flink-jobmanager-0-flinkvm-master.log 
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager    -  -Dlog4j.configuration=file:/srv/flink-1.2.0/conf/log4j.properties 
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager    -  -Dlogback.configurationFile=file:/srv/flink-1.2.0/conf/logback.xml 

を認めたが、私はFLINKジョブを実行するとき(FLINKの実行がPROGを-dされるログで見ます.JAR)、System.getProperty( "dy.props.path")はnullを返します(システムのプロパティを表示すると、実際には存在しません。)

質問は本当にです - 私はどのようにして、フリンクジョブのコードの中で利用できるシステムプロパティを設定しますか?

答えて

1

質問はFlink [1]のランタイムアーキテクチャと非常に関連しています。

あなたの仕事はスタンドアロンクラスタで実行されていると思います。 JobManagerTaskManagerは別々のjvmインスタンスで実行されることに注意してください。それぞれのコードがどこで実行されるのかを考慮する必要があります。

たとえば、mapまたはfilterのような変換のコードは、TaskManagerで実行されます。 mainのコードは、コマンドラインツールflinkで実行されますが、ジョブ投入のためだけに一時的な(-d)jvmを生成するため、システムプロパティは設定されていません。

WebUIでジョブを送信した場合は、mainメソッドのコードがJobManagerで実行されるため、プロパティが設定されます。

しかし基本的にシステムのプロパティを使ってプログラムの引数を渡すことは、むしろ落胆すると言います。

あなた下記

は、簡単な例があります。

私が開始しました:私の仕事のenv.java.opts:"-Ddy.props.path=taskmanager"

env.java.opts:"-Ddy.props.path=jobmanager"

  • TaskManager

    • JobManagerをコードとしてあります以下:

      object Main { 
          def main(args: Array[String]): Unit = { 
          val env = StreamExecutionEnvironment.getExecutionEnvironment 
          val stream = env.fromCollection(1 to 4) 
      
          val prop = System.getProperty("dy.props.path") 
          stream.map(_ => System.getProperty("dy.props.path") + " mainArg: " + prop).print() 
      
          env.execute("stream") 
          } 
      } 
      

      私はflinkツールを使用してコードを送信すると、次のように出力されている:

      taskmanager mainArg: null 
      taskmanager mainArg: null 
      taskmanager mainArg: null 
      taskmanager mainArg: null 
      

      WebUIを通じて提出私が手:

      taskmanager mainArg: jobmanager 
      taskmanager mainArg: jobmanager 
      taskmanager mainArg: jobmanager 
      taskmanager mainArg: jobmanager 
      
  • 関連する問題