Java S3DistCp作业失败:--dest不';不匹配
我正在尝试使用s3DistCp将一个S3文件夹中的一些小文件合并到另一个S3文件夹中。脚本如下所示:Java S3DistCp作业失败:--dest不';不匹配,java,hadoop,amazon-web-services,amazon-s3,amazon-ec2,Java,Hadoop,Amazon Web Services,Amazon S3,Amazon Ec2,我正在尝试使用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' 但我得到
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(本机方法)处 在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)上,这似乎是一个愚蠢的错误。它将以下内容解读为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'
这似乎是一个愚蠢的错误。它将以下内容解读为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'
错误消息说
\--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'
错误消息说
\--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'
在反编译存储在emr集群的/home/hadoop/lib文件夹中的emr-s3distcp-1.0.jar后,我发现java代码正在寻找这种样式的参数:
--src=s3://BUCKET-NAME/139kb输入——dest=s3://BUCKET-NAME/139kb输出
此行与文档之间的具体区别在于参数和参数值之间使用了“=”而不是“,”
这是java使用的if语句:
如果(argument.length()>=this.arg.length()+1&&argument.substring(0,this.arg.length()+1).等于(this.arg+“=”)
其中this.arg是“-src”,参数是“-src=s3://BUCKET-NAME/139kb input”
警告:在通过web界面创建步骤作为自定义jar时就是这种情况。从命令行创建步骤需要使用“,”而不是“=”。在反编译存储在emr集群的/home/hadoop/lib文件夹中的emr-s3distcp-1.0.jar后,我发现java代码正在寻找这种样式的参数:
--src=s3://BUCKET-NAME/139kb输入——dest=s3://BUCKET-NAME/139kb输出
此行与文档之间的具体区别在于参数和参数值之间使用了“=”而不是“,”
这是java使用的if语句:
如果(argument.length()>=this.arg.length()+1&&argument.substring(0,this.arg.length()+1).等于(this.arg+“=”)
其中this.arg是“-src”,参数是“-src=s3://BUCKET-NAME/139kb input”
警告:在通过web界面创建步骤作为自定义jar时就是这种情况。从命令行创建步骤需要使用“,”而不是文档中所说的“=”