我正在尝试使用Custom JAR的输入和输出参数作为S3存储桶(-input s3n://s3_bucket_name/ldas/in -output s3n://s3_bucket_name/ldas/out
)在Amazon EMR集群上运行自定义JAR
当群集运行此自定义JAR时,会发生以下异常。
Exception in thread "main" java.lang.IllegalArgumentException: **Wrong FS: s3n://s3_bucket_name/ldas/out, expected: hdfs://10.214.245.187:9000**
at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:644)
at org.apache.hadoop.hdfs.DistributedFileSystem.getPathName(DistributedFileSystem.java:181)
at org.apache.hadoop.hdfs.DistributedFileSystem.access$000(DistributedFileSystem.java:92)
at org.apache.hadoop.hdfs.DistributedFileSystem$11.doCall(DistributedFileSystem.java:585)
at org.apache.hadoop.hdfs.DistributedFileSystem$11.doCall(DistributedFileSystem.java:581)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.delete(DistributedFileSystem.java:581)
at cc.mrlda.ParseCorpus.run(ParseCorpus.java:101)
at cc.mrlda.ParseCorpus.run(ParseCorpus.java:77)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at cc.mrlda.ParseCorpus.main(ParseCorpus.java:727)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
如何更正此错误?如何在Amazon EMR中使用s3n bucket作为文件系统? 另外,我认为将默认文件系统更改为s3存储桶会很好,但我不知道该怎么做。
答案 0 :(得分:1)
我建议检查你的jar是否使用相同的处理参数的方法,如下所示:http://java.dzone.com/articles/running-elastic-mapreduce-job
具体地,
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
或者,我已成功添加自定义脚本运行程序步骤,将文件从s3复制到hadoop,反之亦然。特别是如果您连续执行一些流式处理步骤,那么将内容保存在hdfs上会很有帮助。您应该可以使用类似
的简单bash脚本hadoop fs -cp s3://s3_bucket_name/ldas/in hdfs:///ldas/in
和
hadoop fs -cp hdfs:///ldas/out s3://s3_bucket_name/ldas/out
然后在两者之间设置您的流媒体步骤,以便在hdfs:/// ldas / in和hdfs:/// ldas / out
之间运行