S3DistCp作业失败: - dest不匹配

时间:2013-10-21 05:35:43

标签: java hadoop amazon-web-services amazon-s3 amazon-ec2

我正在尝试使用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:Argument \ - 最不匹配。 在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) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) 在org.apache.hadoop.util.RunJar.main(RunJar.java:187)

3 个答案:

答案 0 :(得分:1)

在反编译存储在emr集群的/ home / hadoop / lib文件夹中的emr-s3distcp-1.0.jar之后,我发现java代码正在寻找这种风格的参数:

--src=s3://BUCKET-NAME/139kb-input --dest=s3://BUCKET-NAME/139kb-output

这一行和文档之间的具体区别是在参数和参数值之间使用'='而不是','。

这是java正在使用的if语句:

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”

CAVEAT:在通过Web界面创建步骤作为自定义jar时就是这种情况。从命令行创建步骤使用',',因为文档说而不是'='。

答案 1 :(得分:0)

这似乎是一个愚蠢的错误。它正在阅读以下作为S3DistCp命令行选项:

\ --dest

因此,为什么不给出如下命令,而不是试图将命令分成几行:

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'

答案 2 :(得分:0)

错误消息\ --dest不匹配,这意味着它认为\是参数的一部分。试试这个:

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'