" KeyError:' SPARK_HOME' ","无法从JAR"加载主类在运行PySpark作为Oozie工作流程作业

时间:2015-07-17 09:34:49

标签: apache-spark oozie pyspark cloudera-quickstart-vm

此问题是我之前提出的问题here的延续,该问题似乎已得到解决,但在此处引发了另一个问题。

我在Cloudera QuickstartVM CHD-5.4.0上使用Spark 1.4.0。 当我在Oozie中将我的PySpark脚本作为SparkAction运行时,我在Oozie作业/容器日志中遇到此错误:

KeyError: 'SPARK_HOME'

然后我遇到了this solutionthis,它们实际上是Spark 1.3.0,尽管我仍然尝试过。文档似乎说这个问题已经针对Spark版本1.3.2和1.4.0修复(但我在这里遇到了同样的问题)。

链接中建议的解决方案是我需要将spark.yarn.appMasterEnv.SPARK_HOMEspark.executorEnv.SPARK_HOME设置为任何内容,即使它只是指向未指向实际SPARK_HOME的任何路径(即/bogus,虽然我确实将它们设置为实际的SPARK_HOME)。

以下是我的工作流程:

    <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对吗?请注意我之前的相关帖子中,Cloudera QuickstartVM CDH-5.4.0附带的Oozie作业示例,其中包含用Java编写的SparkAction,我的测试正在进行中。似乎问题只出现在Python中。

非常感谢能够提供帮助的任何人。

1 个答案:

答案 0 :(得分:1)

在设置SparkConf()

之前,尝试将以下代码行添加到python脚本中,而不是设置spark.yarn.appMasterEnv.SPARK_HOME和spark.executorEnv.SPARK_HOME变量。
os.environ["SPARK_HOME"] = "/path/to/spark/installed/location"

找到参考here

这有助于我解决您所面临的错误,但之后我遇到了以下错误

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