文件在Amazon EMR中不存在,即使它试图上传它



我使用Amazon EMR创建了一个emr-4.0.0 cluster:

然而,每当我尝试在它上提交一个spark应用程序时,它就会失败并给出以下错误:

File does not exist: hdfs://ip-xx-xx-xxx-xx.ec2.internal:8020/user/hadoop/.sparkStaging/application_1441035668468_0001/spark-assembly-1.4.1-hadoop2.6.0-amzn-0.jar

尽管在日志的前面,它上传了这个完全相同的文件而没有发出任何错误消息:

2015-08-31 15:43:29,070 INFO [main] yarn.Client (Logging.scala:logInfo(59)) - Uploading resource file:/usr/lib/spark/lib/spark-assembly-1.4.1-hadoop2.6.0-amzn-0.jar -> hdfs://ip-xx-xx-xxx-xx.ec2.internal:8020/user/hadoop/.sparkStaging/application_1441035668468_0001/spark-assembly-1.4.1-hadoop2.6.0-amzn-0.jar

(我已经验证了源文件确实存在于主机上的/usr/lib/spark/lib/spark-assembly-1.4.1-hadoop2.6.0-amzn-0.jar中)。

我使用的命令是:
spark-submit --deploy-mode cluster --master yarn-cluster --class com.sundaysky.ads.spark.cluster.TrackingLogsAnalysis /tmp/oz/AdsTests-1.0-SNAPSHOT.jar

顺便说一句,我注意到这使用了Java 1.7(即使它是亚马逊最新的EMR版本),但我认为这无关紧要。

你有什么想法可能是问题,或者,如何调试这个问题?我尝试了许多方法向spark-submit命令添加参数,以从yarn-client获取TRACE级别的消息,但都没有成功。

谢谢,Oz

因此,在与亚马逊支持人员交谈后,如果有人遇到类似的问题:

在我的例子中,具体的问题是我的逻辑jar(不是spark-assembly-1.4.1-hadoop2.6.0-amzn-0.jar,由Amazon提供)是用Java 8编译的,而机器只支持Java 7。

这个不是在步骤的错误日志中反映的,而是在步骤的容器的stderr日志中显示的,其中出现了以下消息:

15/08/31 15:43:41 INFO yarn.ApplicationMaster: Starting the user application in a separate Thread Exception in thread "main" java.lang.UnsupportedClassVersionError:     com/xxxxxx/xxxx/xxxxx/xxxxx/MyClass : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)

如果您遇到类似的问题,并且该步骤的日志文件没有提供答案,您还应该查看容器的日志:

  • 进入亚马逊电子病历网页
  • 点击你的集群打开集群细节界面
  • 在"日志URI"附近应该有一个文件夹图标,点击它打开日志
  • 进入"容器",继续向下寻找与任务匹配的容器
  • 检查stderr.gz和stdout.gz是否有问题

HTH,Oz

相关内容

  • 没有找到相关文章

最新更新