2

这个问题是我之前的问题here的延续,它看似已解决,但导致here成为另一个问题。

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

KeyError: 'SPARK_HOME'

然后我遇到了这个解决方案实际上是针对 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 中。

非常感谢任何可以提供帮助的人。

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 回答