2016-07-14 14 views
1

Ich benutze aws .net SDK, um einen s3distcp-Job zu EMR zu führen, um alle Dateien in einem Ordner mit --groupBy arg zu verketten. Aber was auch immer "groupBy" arg Ich habe versucht, es fehlgeschlagen die ganze Zeit oder einfach kopieren Sie die Dateien ohne Verkettung wie wenn keine --groupBy in der Arg-Liste angegeben.Wie EMR S3DistCp groupBy richtig?

Die Dateien im Ordner ist Funken saveAsTextFiles wie unten genannt:

Teil 0000
Teil 0001
Teil 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" 

       } 
      }; 

Antwort

5

Nach all den kämpft mit diesem ganzen Tag, in der und ich bekomme es mit der GroupKey arg unten:

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

Aber auch wenn ich --targetSize=1024 zu args hinzufügen s3distcp 2,5MB - 3MB Dateien. Hat jemand eine Ahnung davon?

** * UPDATE * **

Hier wird die groupBy Klausel, die alle Dateien in eine Datei verketten, in einem eigenen Ordner:

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

Die letzte "/" ist so wichtig, hier --source = "s3: // foo/Funken/result /"

Es gibt einige Ordner im "Ergebnis" Ordner:

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

und in jedem Ordner oben gibt es hundres von Dateien wie:

part-0000 
part-0001 
part-0002 

.*/(\\w+)/.* diese Gruppe durch Klausel Gruppe so jede Datei in jedem Ordner am Ende wird man mit dem Ordnernamen für jeden Ordner eine Datei bekam

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 

Also, das ist der letzte Arbeitsbefehl für mich:

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

Danke.

+0

Ich habe ein sehr ähnliches Problem zu dem, was Sie hatten, aber mein Ordner ist ein bisschen mehr verschachtelt..Können Sie sich bitte https://stackoverflow.com/questions/46833387/using-groupby-while-copying- von-hdfs-zu-s3-zu-merge-files-in-a-folder – Amistad