使用AWS Datapipeline失败的AWS EMR spark-scala作业:线程“main”中的异常org.apache.spark.SparkException

时间:2018-01-27 17:16:47

标签: scala apache-spark amazon-emr amazon-data-pipeline

我正在尝试使用Amazon Data-Pipeline在Amazon EMR集群上运行spark scala应用程序。该步骤在EMRActivity中添加如下:

command-runner.jar,spark-submit,--deploy-mode,cluster,--class,com.demo.GettingStarted,s3://myBucket/sampleApps/HelloWorld.jar

查看EMR日志后,作业将跟随堆栈跟踪一致失败:

线程“main”中的异常org.apache.spark.SparkException:Application

application_1517065923932_0001 finished with failed status
    at org.apache.spark.deploy.yarn.Client.run(Client.scala:1034)
    at org.apache.spark.deploy.yarn.Client$.main(Client.scala:1081)
    at org.apache.spark.deploy.yarn.Client.main(Client.scala)

可能导致此错误的原因是什么?

这是一个将Hello World打印到控制台的示例应用程序。

相同的工作适用于AWS EMR。

2 个答案:

答案 0 :(得分:0)

请查看资源管理器中的应用程序日志。如果在EMR中启用Hue服务,则可以从UI查看日志。在顺化,转到工作流程 - > DashBoard - >工作流并查看作业和容器日志。我怀疑Oozie可能无法解析spark-defaults.conf参数。

当我在spark-defaults.conf中配置以下属性时,如果oozie版本4.3.0中包含空格,则Oozie无法解析配置。

spark.driver.extraJavaOptions -XX:+ UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction = 70 -XX:MaxHeapFreeRatio = 70 -XX:+ CMSClassUnloadingEnabled -XX:OnOutOfMemoryError ='kill -9%p' spark.dynamicAllocation.enabled是的 spark.executor.extraJavaOptions -verbose:gc -XX:+ PrintGCDetails -XX:+ PrintGCDateStamps -XX:+ UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction = 70 -XX:MaxHeapFreeRatio = 70 -XX:+ CMSClassUnloadingEnabled -XX:OnOutOfMemoryError ='kill -9 %p'

答案 1 :(得分:0)

我认为其中一个原因是你应该将jar的路径指定为{input.directoryPath}/HelloWorld.jar,其中input.directoryPath来自于使用S3DataNode。

如果能找到确切的日志会更好。

要查看驱动程序/执行程序生成的日志,请转至:p ipelineLogUri->EmrClusterId->{latest_run}->containers->application->containe r。最后一步,即容器,对于驱动程序日志选择具有id:-1的容器,其余的日志(2,3,4 ...)将是通过执行程序实例生成的日志。