我正在尝试在EMR集群上运行mapreduce作业。 EMR上的Hadoop版本是2.7.3。 该代码用于读取驻留在S3存储桶上的HFile。但是每次运行它都会失败并出现以下错误。
2018-02-22 20:02:11,641 FATAL [main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Error starting MRAppMaster
java.lang.NoSuchMethodError: org.apache.hadoop.mapred.TaskLog.createLogSyncer()Ljava/util/concurrent/ScheduledExecutorService;
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.<init>(MRAppMaster.java:250)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.<init>(MRAppMaster.java:233)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.main(MRAppMaster.java:1472)
2018-02-22 20:02:12,188 INFO [main] org.apache.hadoop.util.ExitUtil: Exiting with status 1
End of LogType:syslog
实际代码旨在从HDFS读取文件,这些文件在基于CDH的群集中表现良好,其中hadoop版本为2.6.0。但是,需要在AWS中从基于EMR的群集上的S3存储桶中读取HFile。我在代码中做了一些更改,这将允许它读取任何文件系统。以下是变更的片段
...
Path JSONOutputjob2 = new Path( args[1] );
FileSystem.get(JSONOutputjob2.toUri(), conf2).delete(JSONOutputjob2, true);
...
我将路径作为参数传递,这是我尝试使用文件路径的选项。
s3n://emr-ip/path/to/the/file
s3a://emr-ip/path/to/the/file
s3://emr-ip/path/to/the/file
这个错误真的让我抓狂。我已更新我的pom.xml文件以使用群集的可用Hadoop版本并构建项目。构建也很成功。但是不起作用。任何建议或帮助都非常感谢。
编辑: 我更新了我的pom以获得aws hadoop版本,即2.7.3,但没有解决问题。