我正在尝试使用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)
答案 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'