我正在尝试使用s3distcp将一个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。
(第3部分)。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(本机方法)sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl。java:57)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:43)在java.lang.reflect.method.invoke(方法。java:606)在org.apache.hadoop.util.runjar.main(runjar。java:187)
3条答案
按热度按时间ovfsdjhp1#
这似乎是个愚蠢的错误。它将以下内容作为s3distcp命令行选项:
\ --dest
因此,与其尝试将命令分成几行,不如给出如下命令:bwitn5fc2#
错误信息显示
\ --dest
不匹配,所以它认为\
是论点的一部分。试试这个:vzgqcmou3#
在反编译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”警告:当通过web界面创建一个自定义jar的步骤时就是这样。从命令行创建步骤需要使用“,”而不是“=”。