2016-07-14 62 views
1

我正在使用aws .net sdk運行s3distcp作業到EMR,以使用--groupBy arg連接文件夾中的所有文件。但無論我嘗試過的「groupBy」arg如何,它始終失敗,或者只是複製文件而不進行連接,如果沒有在arg列表中指定--groupBy。如何EMR S3DistCp組正確?

該文件夾中的文件是火花saveAsTextFiles命名象下面這樣:

部分0000
部分0001
部分-0002
...
...

step.HadoopJarStep = new HadoopJarStepConfig 
      { 
       Jar = "/usr/share/aws/emr/s3-dist-cp/lib/s3-dist-cp.jar", 
       Args = new List<string> 
       { 
        "--s3Endpoint=s3-eu-west-1.amazonaws.com", 
        "--src=s3://foo/spark/result/bar" , 
        "--dest=s3://foo/spark/result-merged/bar", 
        "--groupBy=(part.*)", 
        "--targetSize=256" 

       } 
      }; 

回答

5

經過這一整天的苦苦掙扎後,我開始使用下面的groupKey參數:

--groupBy=.*part.*(\w+) 

但即使我將--targetSize=1024添加到args s3distcp產生2,5MB - 3MB文件。 有沒有人有任何想法呢?

** * UPDATE * **

這裏是GROUPBY子句這是所有的文件拼接成一個文件,在自己的文件夾:

.*/(\\w+)/.* 

最後一個 「/」 是所以這裏重要的 --source = 「S3://富/火花/結果/」

在有 「結果」 文件夾中的某些文件夾:

s3://foo/spark/result/foo 
s3://foo/spark/result/bar 
s3://foo/spark/result/lorem 
s3://foo/spark/result/ipsum 

和每個文件夾中上面有文件的hundres像:

part-0000 
part-0001 
part-0002 

.*/(\\w+)/.*這組group by子句的每個文件夾中的每個文件所以最後你有一個文件與文件夾名稱

每個文件夾
s3://foo/spark/result-merged/foo/foo -> File 
s3://foo/spark/result-merged/bar/bar -> File 
s3://foo/spark/result-merged/lorem/lorem -> File 
s3://foo/spark/result-merged/ipsum/ipsum -> File 

所以,這是我最後的工作命令:

s3-dist-cp --src s3://foo/spark/result/ --dest s3://foo/spark/results-merged --groupBy '.*/(\\w+)/.*' --targetSize 1024 

謝謝。

+0

我有一個非常類似的問題,你有什麼,但我的文件夾是多一點嵌套..可以請你看看https://stackoverflow.com/questions/46833387/using-groupby-while-copying-從-HDFS到S3到合併-文件中之文件夾 – Amistad