Running Custom JAR on Amazon EMR giving error ( Filesystem Error ) using Amazon S3 Bucket input and output
我正在尝试使用自定义 JAR 的输入和输出参数作为 S3 存储桶 (
在 Amazon EMR 集群上运行自定义 JAR
当集群运行这个自定义 JAR 时,会出现以下异常。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 存储桶作为文件系统?
另外,我认为将默认文件系统更改为 s3 存储桶会很好,但我不知道该怎么做。
我建议检查您的 jar 是否使用与此处所示相同的处理参数的方法:http://java.dzone.com/articles/running-elastic-mapreduce-job
具体来说,
1 2 | FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); |
或者,我已经成功添加了自定义脚本运行器步骤,以将文件从 s3 复制到 hadoop,反之亦然。特别是如果您连续执行几个流式传输步骤,则将内容保存在 hdfs 上会很有帮助。您应该能够使用
之类的东西制作一个简单的 bash 脚本
1 | hadoop fs -cp s3://s3_bucket_name/ldas/in hdfs:///ldas/in |
和
1 | hadoop fs -cp hdfs:///ldas/out s3://s3_bucket_name/ldas/out |
然后在 hdfs:///ldas/in 和 hdfs:///ldas/out 之间设置流式传输步骤