2013-10-21 31 views
1

我正在嘗試使用s3DistCp將1個S3文件夾中的一些小文件合併到另一個S3文件夾。腳本是這樣的: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' 

但是我得到java.lang.RuntimeException錯誤如下。需要幫助。謝謝!

線程「main」中的異常java.lang.RuntimeException:參數\ --dest不匹配。在emr.hbase.options.Options.parseArguments(Options.java:75) at emr.hbase.options.Options.parseArguments(Options.java:57) at 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) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79) at com.amazon.elasticmapreduce.s3distcp.Main.main(Main.java:13) at 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) at org.apache.hadoop.util.RunJar.main(RunJar.java:187)

回答

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' 
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' 
1

反編譯後的存儲在EMR集羣的/ home/Hadoop的/ lib文件夾EMR-s3distcp-1.0.jar我發現Java代碼正在尋找的參數是這種風格的:

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

在該行與文檔之間的特定區別是使用的「=」,而不是一個「」該參數和參數的值之間。

這是if語句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-輸入「

CAVEAT:在通過Web界面創建步驟作爲自定義jar時,就是這種情況。如果從命令行創建步驟,則可以使用','作爲文檔說明而不是'='。