2016-07-15 2 views
0

Wie verwenden Sie getmerge auf Dataproc für Teildateien, die in den Google Storage Bucket ausgegeben werden. Wenn ich das versuchen hadoop fs -getmerge gs://my-bucket/temp/part-* gs://my-bucket/temp_merged Ich erhalte einen Fehler getmerge: /temp_merged (Permission denied)Wie führen Sie hadoop fs -getmerge auf dataproc von Google-Speicher

Es ist für hadoop fs -getmerge gs://my-bucket/temp/part-* temp_merged gut funktioniert, aber das natürlich schreibt die zusammengefügte Datei auf der Cluster-Maschine und nicht in GS.

Antwort

2

Nach den fsshell documentation, der getmerge Befehl grundsätzlich behandelt den Zielpfad als „local“ Pfad (so in gs://my-bucket/temp_merged es das „Schema“ und „Autorität“ Komponenten zu ignorieren und versuchen, direkt auf Ihren lokalen Dateisystem-Pfad zu schreiben /temp_meged; Dies ist nicht spezifisch für den GCS-Anschluss, Sie werden das gleiche sehen, wenn Sie versuchen, hadoop fs -getmerge gs://my-bucket/temp/part-* hdfs:///temp_merged, und noch schlimmer, wenn Sie etwas wie hadoop fs -getmerge gs://my-bucket/temp/part-* hdfs:///tmp/temp_merged versuchen, können Sie denken, es gelungen, wenn in der Tat die Datei nicht innerhalb hdfs:///tmp/temp_merged erscheinen würde, aber stattdessen erschien unter Ihrem lokalen Dateisystem, file:///tmp/temp_merged.

Sie können Verwenden Sie stattdessen die Pipe stdout/stdin, um dies zu ermöglichen. leider -getmerge spielt nicht gut mit /dev/stdout aufgrund von Berechtigungen und die Verwendung von .crc Dateien, aber Sie können den gleichen Effekt mit der Funktion in hadoop fs -put erreichen, die das Lesen von stdin unterstützt:

hadoop fs -cat gs://my-bucket/temp/part-* | \ 
    hadoop fs -put - gs://my-bucket/temp_merged 
Verwandte Themen