Ich versuche, Daten von HDFS mit distcp
nach S3 zu verschieben. Der distcp
Job scheint erfolgreich zu sein, aber in S3 werden die Dateien nicht korrekt erstellt. Es gibt zwei Probleme:
block_<some number>
im Stammverzeichnis des Buckets. Ich konnte keine Dokumentation / Beispiele dafür finden. Was vermisse ich? Wie kann ich debuggen?
Hier sind einige weitere Details:
%Vor%Sie sollten s3n anstelle von s3 verwenden.
s3n ist die native Dateisystemimplementierung (dh - reguläre Dateien), wobei s3 die hdfs-Blockstruktur auf den Dateien anwendet, so dass Sie sie nicht wirklich lesen können, ohne hdfs-Bibliotheken durchzugehen.
Also:
%Vor%Amazon hat eine Version von distcp erstellt, die für die Übertragung zwischen hdfs und s3 optimiert ist, die sie entsprechend s3distcp aufrufen. Vielleicht möchten Sie das auch überprüfen. Es ist für die Verwendung mit Amazon EMR vorgesehen, aber das Jar ist in s3 verfügbar, sodass Sie es möglicherweise außerhalb eines EMR-Auftragsflusses verwenden können.
Falls Ihre Dateien in HDFS größer als 5 GB sind, werden in Ihrem distcp-Job Fehler angezeigt, die wie folgt aussehen:
%Vor% Um dies zu beheben, verwenden Sie entweder das s3n
Dateisystem als @ matthew-rathbone vorgeschlagen, aber mit -Dfs.s3n.multipart.uploads.enabled=true
like:
ODER
Verwenden Sie das s3-Dateisystem der nächsten Generation, s3a
like:
Optionen und Dokumentation für diese leben hier: Ссылка
Aktualisieren Sie dies für Apache Hadoop 2.7+ und ignorieren Sie Amazon EMR, da sie die Dinge dort geändert haben.
Die Verbesserung der Zuverlässigkeit und Leistung im Bereich des Arbeitens mit Objektlagern ist immer noch eine fortlaufende Arbeit ... Beiträge sind wie immer willkommen.
Tags und Links hadoop amazon-s3 amazon-web-services