View a markdown version of this page

S3DistCp (s3-dist-cp) - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

S3DistCp (s3-dist-cp)

Apache DistCp ist ein Open-Source-Tool, mit dem Sie große Datenmengen kopieren können. S3DistCpist ähnlich DistCp, aber für die Arbeit mit AWS Amazon S3 optimiert. Der Befehl für S3DistCp in Amazon EMR Version 4.0 und höher lautets3-dist-cp, den Sie als Schritt in einem Cluster oder an der Befehlszeile hinzufügen. Mit dieser S3DistCp Funktion können Sie große Datenmengen effizient von Amazon S3 nach HDFS kopieren, wo sie in nachfolgenden Schritten in Ihrem Amazon EMR-Cluster verarbeitet werden können. Sie können es auch verwenden S3DistCp , um Daten zwischen Amazon S3-Buckets oder von HDFS nach Amazon S3 zu kopieren. S3DistCp ist skalierbarer und effizienter für das parallele Kopieren einer großen Anzahl von Objekten über Buckets und Konten hinweg. AWS

Spezifische Befehle, die die Flexibilität von S3DistCp in realen Szenarien demonstrieren, finden Sie im Big Data-Blog unter Sieben Tipps S3DistCp zur Verwendung. AWS

Wird wie S3DistCp verwendet DistCp, um auf MapReduce verteilte Weise zu kopieren. Kopier-, Fehlerbehandlungs-, Wiederherstellungs- und Berichterstellungsaufgaben werden auf mehrere Server verteilt. Weitere Informationen zum Apache DistCp Open-Source-Projekt finden Sie in der DistCp Anleitung in der Apache Hadoop-Dokumentation.

Wenn S3DistCp einige oder alle der angegebenen Dateien nicht kopiert werden können, schlägt der Cluster-Schritt fehl und gibt einen Fehlercode ungleich Null zurück. In diesem Fall werden teilweise kopierte Dateien S3DistCp nicht bereinigt.

Wichtig

S3DistCp unterstützt keine Amazon S3-Bucket-Namen, die den Unterstrich enthalten.

S3DistCp unterstützt keine Verkettung für Parquet-Dateien. Verwenden Sie stattdessen. PySpark Weitere Informationen finden Sie unter Parquet-Dateien verketten in Amazon EMR.

Um Kopierfehler zu vermeiden, wenn Sie S3DistCP verwenden, um eine einzelne Datei (anstelle eines Verzeichnisses) von S3 nach HDFS zu kopieren, verwenden Sie Amazon-EMR-Version 5.33.0 oder höher oder Amazon-EMR-Version 6.3.0 oder höher.

S3DistCp Optionen

Obwohl es ähnlich ist DistCp, S3DistCp unterstützt es einen anderen Satz von Optionen, um zu ändern, wie Daten kopiert und komprimiert werden.

Wenn Sie anrufen S3DistCp, können Sie die in der folgenden Tabelle beschriebenen Optionen angeben. Die Optionen werden dem Schritt mithilfe der Liste der Argumente hinzugefügt. Beispiele für die S3DistCp Argumente sind in der folgenden Tabelle aufgeführt.

Option Description Erforderlich
--src=LOCATION

Der Speicherort der zu kopierenden Daten. Hierbei kann es sich entweder um einen HDFS- oder Amazon-S3-Speicherort handeln.

Beispiel: --src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node

Wichtig

S3DistCp unterstützt keine Amazon S3-Bucket-Namen, die den Unterstrich enthalten.

Ja
--dest=LOCATION

Das Ziel für die Daten. Hierbei kann es sich entweder um einen HDFS- oder Amazon-S3-Speicherort handeln.

Beispiel: --dest=hdfs:///output

Wichtig

S3DistCp unterstützt keine Amazon S3-Bucket-Namen, die den Unterstrich enthalten.

Ja
--srcPattern=PATTERN

Ein regulärer Ausdruck, der die Kopieroperation auf eine Teilmenge der Daten unter --src filtert. Wenn weder --srcPattern noch --groupBy angegeben ist, werden alle Daten unter --src in --dest kopiert.

Wenn das Argument des regulären Ausdrucks Sonderzeichen wie Sternchen (*) enthält, muss entweder der reguläre Ausdruck oder die gesamte --args-Zeichenfolge in einfache Anführungszeichen (') gesetzt werden.

Beispiel: --srcPattern=.*daemons.*-hadoop-.*

Nein
--groupBy=PATTERN

Ein regulärer Ausdruck, der S3DistCp dazu führt, dass Dateien verkettet werden, die dem Ausdruck entsprechen. Sie können mit dieser Option beispielsweise alle Protokolldateien kombinieren, die innerhalb einer Stunde in einer einzigen Datei geschrieben wurden. Der verkettete Dateiname ist der Wert, der dem regulären Ausdruck für die Gruppe entspricht.

Klammern geben an, wie Dateien gruppiert werden soll, wobei alle Elemente, die der eingeklammerten Anweisung entsprechen, zu einer einzigen Ausgabedatei kombiniert werden. Wenn der reguläre Ausdruck keine Anweisung in Klammern enthält, schlägt der Cluster bei diesem Schritt fehl und gibt einen Fehler zurück. S3DistCp

Wenn das Argument des regulären Ausdrucks Sonderzeichen wie Sternchen (*) enthält, muss entweder der reguläre Ausdruck oder die gesamte --args-Zeichenfolge in einfache Anführungszeichen (') gesetzt werden.

Wenn --groupBy angegeben ist, werden nur Dateien kopiert, die dem angegebenen Muster entsprechen. Sie müssen --groupBy und --srcPattern nicht gleichzeitig angeben.

Beispiel: --groupBy=.*subnetid.*([0-9]+-[0-9]+-[0-9]+-[0-9]+).*

Nein
--targetSize=SIZE

Die Größe (in Mebibyte (MiB)) der Dateien, die basierend auf der --groupBy-Option erstellt werden sollen. Dieser Wert muss eine Ganzzahl sein. Wenn gesetzt --targetSize ist, wird S3DistCp versucht, dieser Größe zu entsprechen; die tatsächliche Größe der kopierten Dateien kann größer oder kleiner als dieser Wert sein. Aufträge werden basierend auf der Größe der Datendatei aggregiert. Deshalb ist es möglich, dass die Zieldateigröße der Quelldateigröße entspricht.

Wenn die durch --groupBy verketteten Dateien größer als der Wert --targetSize sind, werden sie in Teildateien aufgelöst und sequenziell mit einem an das Ende angefügten numerischen Wert benannt. Eine Datei, die beispielsweise zu myfile.gz verkettet ist, wird wie folgt in mehrere Teile unterteilt: myfile0.gz, myfile1.gz usw.

Beispiel: --targetSize=2

Nein
--appendToLastFile

Gibt das Verhalten S3DistCp beim Kopieren von Dateien von Amazon S3 nach HDFS an, die bereits vorhanden sind. Es werden neue Dateidaten an vorhandene Dateien angefügt. Wenn Sie --appendToLastFile mit --groupBy verwenden, werden neue Daten an Dateien angefügt, die denselben Gruppen entsprechen. Diese Option respektiert auch das --targetSize-Verhalten, wenn sie mit --groupBy. verwendet wird.

Nein
--outputCodec=CODEC

Gibt den Komprimierungs-Codec für die kopierten Dateien an. Mögliche Werte sind: gzip, gz, lzo, snappy oder none. Sie können diese Option beispielsweise verwenden, um Eingabedateien, die mit Gzip komprimiert sind, in Ausgabedateien mit LZO-Komprimierung zu konvertieren oder um die Dateien im Rahmen der Kopieroperation zu dekomprimieren. Wenn Sie einen Ausgabe-Codec auswählen, wird dem Dateinamen die entsprechende Erweiterung angefügt (z. B. für gz und gzip die Erweiterung .gz). Wenn Sie keinen Wert für --outputCodec angeben, werden die Dateien ohne Änderung der Komprimierung kopiert.

Beispiel: --outputCodec=lzo

Nein
--s3ServerSideEncryption

Stellt sicher, dass die Zieldaten mithilfe von SSL übertragen und in Amazon S3 automatisch mithilfe eines AWS serviceseitigen Schlüssels verschlüsselt werden. Beim Abrufen von Daten mit werden S3DistCp die Objekte automatisch unverschlüsselt. Wenn Sie versuchen, ein entschlüsseltes Objekt in einen Amazon-S3-Bucket zu kopieren, für den eine Verschlüsselung erforderlich ist, schlägt die Operation fehl. Weitere Informationen finden Sie unter Verwenden der Datenverschlüsselung.

Beispiel: --s3ServerSideEncryption

Nein
--deleteOnSuccess

Wenn der Kopiervorgang erfolgreich ist, werden mit dieser Option S3DistCp die kopierten Dateien vom Quellspeicherort gelöscht. Dies ist nützlich, wenn Sie Ausgabedateien, wie Protokolldateien, von einem Speicherort an einen anderen als geplante Aufgabe kopieren und dieselben Dateien nicht zweimal kopiert werden sollen.

Beispiel: --deleteOnSuccess

Nein
--disableMultipartUpload

Deaktiviert die Verwendung des mehrteiligen Uploads.

Beispiel: --disableMultipartUpload

Nein
--multipartUploadChunkSize=SIZE

Die Größe jedes Teils in einem mehrteiligen Amazon S3-Upload in MiB. S3DistCp verwendet den mehrteiligen Upload, wenn Daten kopiert werden, die größer als der sind. multipartUploadChunkSize Um die Arbeitsleistung zu verbessern, können Sie die Größe der einzelnen Teile erhöhen. Die Standardgröße beträgt 128 MiB.

Beispiel: --multipartUploadChunkSize=1000

Nein
--numberFiles

Stellt Ausgabedateien sequenzielle Nummern voran. Die Zählung beginnt bei 0, es sei denn, von --startingIndex wird ein anderer Wert angegeben.

Beispiel: --numberFiles

Nein
--startingIndex=INDEX

Wird mit --numberFiles verwendet, um die erste Nummer in der Sequenz anzugeben.

Beispiel: --startingIndex=1

Nein
--outputManifest=FILENAME

Erzeugt eine mit Gzip komprimierte Textdatei, die eine Liste aller kopierten Dateien enthält. S3DistCp

Beispiel: --outputManifest=manifest-1.gz

Nein
--previousManifest=PATH

Liest eine Manifestdatei, die während eines früheren Aufrufs zur S3DistCp Verwendung des --outputManifest Flags erstellt wurde. Wenn das --previousManifest Flag gesetzt ist, werden die im Manifest aufgeführten Dateien vom Kopiervorgang S3DistCp ausgeschlossen. Wenn --outputManifest zusammen mit --previousManifest angegeben ist, erscheinen die im vorherigen Manifest aufgeführten Dateien auch in der neuen Manifestdatei, obwohl die Dateien nicht kopiert werden.

Beispiel: --previousManifest=/usr/bin/manifest-1.gz

Nein
--requirePreviousManifest

Erfordert ein vorheriges Manifest, das während eines vorherigen Aufrufs von erstellt wurde. S3DistCp Wenn dieser Wert auf "false" festgelegt ist, wird kein Fehler generiert, wenn kein vorheriges Manifest angegeben ist. Der Standardwert ist true.

Nein
--copyFromManifest

Kehrt das Verhalten --previousManifest um, wenn veranlasst wird S3DistCp , die angegebene Manifestdatei als Liste von Dateien zu verwenden, die kopiert werden sollen, und nicht als Liste von Dateien, die vom Kopieren ausgeschlossen werden sollen.

Beispiel: --copyFromManifest --previousManifest=/usr/bin/manifest-1.gz

Nein
--s3Endpoint=ENDPOINT

Gibt den Amazon-S3-Endpunkt an, der beim Hochladen einer Datei verwendet werden soll. Mit dieser Option wird der Endpunkt sowohl für die Quelle als auch das Ziel festgelegt. Falls die Option nicht festgelegt ist, wird als Standardendpunkt s3.amazonaws.com verwendet. Eine Liste der Amazon-S3-Endpunkte finden Sie unter Regionen und Endpunkte.

Beispiel: --s3Endpoint=s3.eu-west-1.amazonaws.com

Nein
--storageClass=CLASS

Die zu verwendende Speicherklasse, wenn das Ziel Amazon S3 ist. Gültige Werte sind STANDARD und REDUCED_REDUNDANCY. Wenn diese Option nicht angegeben ist, wird S3DistCp versucht, die Speicherklasse beizubehalten.

Beispiel: --storageClass=STANDARD

Nein
--srcPrefixesFile=PATH

Eine Textdatei in Amazon S3 (s3://), HDFS (hdfs:///) oder dem lokalen Dateisystem (file:/) mit einer Liste von src-Präfixen, in der ein Präfix pro Zeile aufgeführt wird.

Falls srcPrefixesFile angegeben, S3DistCp wird der SRC-Pfad nicht aufgeführt. Stattdessen wird eine Quellliste als kombiniertes Ergebnis der Auflistung aller in dieser Datei angegebenen Präfixe erstellt. Der relative Pfad im Vergleich zum src-Pfad, wird statt dieser Präfixe verwendet, um die Zielpfade zu generieren. Wenn srcPattern angegeben ist, wird dieser Wert auf die kombinierten Listenergebnisse der Quellpräfixe angewendet, um die Eingabe weiter zu filtern. Wenn copyFromManifest verwendet wird, werden die Objekte im Manifest kopiert und srcPrefixesFile wird ignoriert.

Beispiel: --srcPrefixesFile=PATH

Nein

S3DistCp Implementiert zusätzlich zu den oben genannten Optionen die Tool-Schnittstelle, was bedeutet, dass es die generischen Optionen unterstützt.

Hinzufügen S3DistCp als Schritt in einem Cluster

Sie können ihn aufrufen, S3DistCp indem Sie ihn als Schritt zu Ihrem Cluster hinzufügen. Sie können Schritte beim Start eines Clusters oder einem aktuell ausgeführten Cluster mithilfe der Konsole, Befehlszeilenschnittstelle oder API hinzufügen. Die folgenden Beispiele veranschaulichen das Hinzufügen eines S3DistCp Steps zu einem laufenden Cluster. Weitere Informationen zum Hinzufügen von Schritten zu einem Cluster finden Sie unter Aufträge an einen Cluster übermitteln im Verwaltungshandbuch für Amazon EMR.

Um einen S3DistCp Schritt zu einem laufenden Cluster hinzuzufügen, verwenden Sie den AWS CLI

Weitere Informationen zur Verwendung von Amazon EMR-Befehlen finden Sie in der AWS CLIAWS CLI Befehlsreferenz.

  • Um einen Schritt zu einem Cluster hinzuzufügen, der aufruft S3DistCp, übergeben Sie die Parameter, die angeben, wie der Kopiervorgang ausgeführt S3DistCp werden soll, als Argumente.

    Im folgenden Beispiel werden Daemon-Protokolle von Amazon S3 in hdfs:///output kopiert. Im folgenden Befehl:

    Um einen S3DistCp Kopierschritt zu einem laufenden Cluster hinzuzufügen, fügen Sie Folgendes in eine JSON-Datei ein, die wie myStep.json in diesem Beispiel in Amazon S3 oder Ihrem lokalen Dateisystem gespeichert ist. j-3GYXXXXXX9IOKErsetzen Sie es durch Ihre Cluster-ID und amzn-s3-demo-bucket ersetzen Sie es durch Ihren Amazon S3-Bucket-Namen.

    [ { "Name":"S3DistCp step", "Args":["s3-dist-cp","--s3Endpoint=s3.amazonaws.com","--src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/","--dest=hdfs:///output","--srcPattern=.*[a-zA-Z,]+"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]
    aws emr add-steps --cluster-id j-3GYXXXXXX9IOK --steps file://./myStep.json
Beispiel Protokolldateien von Amazon S3 zu HDFS kopieren

Dieses Beispiel veranschaulicht, wie Protokolldateien in einem Amazon-S3-Bucket in HDFS kopiert werden, indem Sie einen Schritt zu einem aktuell ausgeführten Cluster hinzufügen. In diesem Beispiel werden die Daten, die in die Daemon-Protokolle kopiert werden, anhand der Option --srcPattern eingeschränkt.

Zum Kopieren von Protokolldateien von Amazon S3 in HDFS mithilfe der Option --srcPattern geben Sie Folgendes in einer JSON-Datei, die in Amazon S3 oder Ihrem lokalen Dateisystem gespeichert ist, als myStep.json in diesem Beispiel ein. j-3GYXXXXXX9IOKErsetzen Sie durch Ihre Cluster-ID und amzn-s3-demo-bucket durch Ihren Amazon S3-Bucket-Namen.

[ { "Name":"S3DistCp step", "Args":["s3-dist-cp","--s3Endpoint=s3.amazonaws.com","--src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/","--dest=hdfs:///output","--srcPattern=.*daemons.*-hadoop-.*"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]