我正在尝试使用 s3DistCp 将 1 个 S3 文件夹中的一些小文件合并到另一个 S3 文件夹中。脚本类似于以下内容:
elastic-mapreduce --jobflow j-33EDUGSQCN0PZ --jar \
/home/hadoop/lib/emr-s3distcp-1.0.jar \
--args '--src,s3://li-test/data, \
--dest,s3://li-test/result, \
--groupBy,[0-9]*,\
--targetSize,128'
但我收到如下 java.lang.RuntimeException 错误。需要帮助。谢谢!
线程“main”中的异常 java.lang.RuntimeException:参数\
--dest 不匹配。
在 emr.hbase.options.Options.parseArguments(Options.java:75)
在 emr.hbase.options.Options.parseArguments(Options.java:57)
在 com.amazon.elasticmapreduce.s3distcp.S3DistCp$S3DistCpOptions.
(S3DistCp.java:124)
在 com.amazon.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:545)
在 org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
在 org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
在 com.amazon.elasticmapreduce.s3distcp.Main.main(Main.java:13)
在 sun.reflect.NativeMethodAccessorImpl.invoke0( native 方法)
在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:606)
在 org.apache.hadoop.util.RunJar.main(RunJar.java:187)
最佳答案
反编译存储在emr集群的/home/hadoop/lib文件夹中的emr-s3distcp-1.0.jar后,我发现java代码正在寻找这样的参数:
--src=s3://BUCKET-NAME/139kb-input --dest=s3://BUCKET-NAME/139kb-output
此行与文档之间的具体区别是在参数和参数值之间使用“=”而不是“,”。
这是 java 正在使用的 if 语句:
如果 (argument.length() >= this.arg.length() + 1 && argument.substring(0, this.arg.length() + 1).equals(this.arg + "="))
这里 this.arg 是“--src”,参数是“--src=s3://BUCKET-NAME/139kb-input”
注意事项:通过 Web 界面将步骤创建为自定义 jar 时就是这种情况。如文档所述,从命令行创建步骤时使用“,”而不是“=”。
关于java - S3DistCp 作业失败 : -- dest doesn't match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19486928/