即使尝试上传文件,Amazon EMR中也不存在文件

时间:2015-09-01 08:22:44

标签: hadoop amazon-web-services yarn emr 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中。) / p>

我使用的命令是:

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级别的消息,但没有成功。

谢谢, 盎司

1 个答案:

答案 0 :(得分:1)

因此,在与亚马逊支持人员交谈之后,万一有人遇到过类似问题:

我的具体问题是我的逻辑jar(不是由Amazon提供的spark-assembly-1.4.1-hadoop2.6.0-amzn-0.jar)是用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)

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

  • 访问亚马逊的EMR网页。
  • 单击您的群集以打开“群集详细信息”屏幕
  • 靠近" Log URI"应该有一个文件夹图标,单击它以打开日志
  • 转到"容器"并继续沿着与你的任务匹配的那个
  • 检查stderr.gz和stdout.gz是否存在问题

HTH, 盎司