2016-07-14 52 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