2

この問題は、以前の質問hereの続きであり、解決されたように見えますが、別の問題として here につながります。

Cloudera QuickstartVM CHD-5.4.0 で Spark 1.4.0 を使用しています。PySpark スクリプトを Oozie で SparkAction として実行すると、Oozie ジョブ/コンテナー ログで次のエラーが発生します。

KeyError: 'SPARK_HOME'

それから、私はまだ試しましたが、実際にはSpark 1.3.0用のこのソリューションこれに出くわしました。ドキュメントによると、この問題は Spark バージョン 1.3.2 および 1.4.0 で既に修正されているようです (ただし、ここで同じ問題が発生しています)。

リンクで提案された解決策は、実際を指していないパスであっても(つまり、これらを実際の SPARK_HOME に設定しましたが) spark.yarn.appMasterEnv.SPARK_HOME、何にでも設定する必要があるというものでした。spark.executorEnv.SPARK_HOMESPARK_HOME/bogus

後の私のワークフローは次のとおりです。

    <spark xmlns="uri:oozie:spark-action:0.1">
        <job-tracker>${resourceManager}</job-tracker>
        <name-node>${nameNode}</name-node>
        <master>local[2]</master>
        <mode>client</mode>
        <name>${name}</name>
        <jar>${workflowRootLocal}/lib/my_pyspark_job.py</jar>
        <spark-opts>--conf spark.yarn.appMasterEnv.SPARK_HOME=/usr/lib/spark spark.executorEnv.SPARK_HOME=/usr/lib/spark</spark-opts>
    </spark>

上記の元の問題を解決するようです。ただし、Oozie コンテナー ログの stderr を検査しようとすると、別のエラーが発生します。

Error: Cannot load main class from JAR file:/var/lib/hadoop-yarn/cache/yarn/nm-local-dir/usercache/cloudera/appcache/application_1437103727449_0011/container_1437103727449_0011_01_000001/spark.executorEnv.SPARK_HOME=/usr/lib/spark

私がPythonを使用している場合、main class権利を期待すべきではありませんか? 以前の関連記事で、Java で記述された SparkAction を備えた Cloudera QuickstartVM CDH-5.4.0 に同梱されている Oozie ジョブ サンプルが私のテストで動作していたことに注意してください。問題は Python だけにあるようです。

助けてくれる人に感謝します。

4

1 に答える 1

1

spark.yarn.appMasterEnv.SPARK_HOME および spark.executorEnv.SPARK_HOME 変数を設定するのではなく、SparkConf() を設定する前に、次のコード行を Python スクリプトに追加してみてください。

os.environ["SPARK_HOME"] = "/path/to/spark/installed/location"

ここで参照を見つけました

これはあなたが直面しているエラーを解決するのに役立ちましたが、その後次のエラーに直面しました

Traceback (most recent call last):
  File "/usr/hdp/current/spark-client/AnalyticsJar/boxplot_outlier.py", line 129, in <module>
    main()
  File "/usr/hdp/current/spark-client/AnalyticsJar/boxplot_outlier.py", line 60, in main
    sc = SparkContext(conf=conf)
  File "/hadoop/yarn/local/filecache/1314/spark-core_2.10-1.1.0.jar/pyspark/context.py", line 107, in __init__
  File "/hadoop/yarn/local/filecache/1314/spark-core_2.10-1.1.0.jar/pyspark/context.py", line 155, in _do_init
  File "/hadoop/yarn/local/filecache/1314/spark-core_2.10-1.1.0.jar/pyspark/context.py", line 201, in _initialize_context
  File "/hadoop/yarn/local/filecache/1314/spark-core_2.10-1.1.0.jar/py4j/java_gateway.py", line 701, in __call__
  File "/hadoop/yarn/local/filecache/1314/spark-core_2.10-1.1.0.jar/py4j/protocol.py", line 300, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext.
: java.lang.SecurityException: class "javax.servlet.FilterRegistration"'s signer information does not match signer information of other classes in the same package
于 2015-09-18T07:22:37.433 に答える