sparkストリーミングアプリケーションをリモートサーバーの糸クラスターで実行したい。デフォルトのJavaバージョンは1.7だが、アプリケーションに1.8を使用したいこれはサーバーにもありますが、デフォルトではありません。spark-submitでJava 1.8の場所を指定して、major.minorエラーが発生しないようにする方法はありますか?
私たちの場合、Java_HOMEは十分ではなく、ドライバはJava 8で実行されていましたが、Spark YARNのワーカーがJava 7(hadoopノードには両方のJavaバージョンがインストールされています)。
spark.executorEnv.Java_HOME=/usr/Java/<version available in workers>
にspark-defaults.conf
を追加する必要がありました。コマンドラインで--conf
を指定できることに注意してください。
http://spark.Apache.org/docs/latest/configuration.html#runtime-environment を参照してください
特定のJavaバージョン(export Java_HOME=/path/to/jre/ && spark-submit ...
)、ワーカーはコードを実行しますJavaワーカーユーザーのPATHからのユーザーのマシンのバージョンからのバージョン)。
あなたができることは、各Sparkインスタンスを特定のJava_HOME
を編集してspark-env.sh
ファイル( ドキュメント )。
Javaの環境をsparkの糸に設定する場合は、spark-submitの前に設定できます。
--conf spark.yarn.appMasterEnv.Java_HOME=/usr/Java/jdk1.8.0_121 \
必要なJava_HOMEをspark-env.shに追加します(Sudo find -name spark-env.sh ... ej。:/etc/spark2/conf.cloudera.spark2_on_yarn/spark-env.sh)
Javaバージョンは、Spark App MasterとSparkで起動される実行プログラムの両方に設定する必要があります。 YARN。したがって、spark-submitコマンドには、2つのJava_HOME設定を含める必要があります:spark.executorEnv.Java_HOMEおよびspark.yarn.appMasterEnv.Java_HOME
spark-submit --class com.example.DataFrameExample --conf "spark.executorEnv.Java_HOME=/jdk/jdk1.8.0_162" --conf "spark.yarn.appMasterEnv.Java_HOME=/jdk/jdk1.8.0_162" --master yarn --deploy-mode client /spark/programs/DataFrameExample/target/scala-2.12/dfexample_2.12-1.0.jar