此问题是我之前提出的问题here的延续,该问题似乎已得到解决,但在此处引发了另一个问题。
我在Cloudera QuickstartVM CHD-5.4.0上使用Spark 1.4.0。 当我在Oozie中将我的PySpark脚本作为SparkAction运行时,我在Oozie作业/容器日志中遇到此错误:
KeyError: 'SPARK_HOME'
然后我遇到了this solution和this,它们实际上是Spark 1.3.0,尽管我仍然尝试过。文档似乎说这个问题已经针对Spark版本1.3.2和1.4.0修复(但我在这里遇到了同样的问题)。
链接中建议的解决方案是我需要将spark.yarn.appMasterEnv.SPARK_HOME
和spark.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中。
非常感谢能够提供帮助的任何人。
答案 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