Staging von Daten und Tabellen mit Pipeline-Aktivitäten - AWS Data Pipeline

AWS Data Pipeline ist für Neukunden nicht mehr verfügbar. Bestandskunden von AWS Data Pipeline können den Service weiterhin wie gewohnt nutzen. Weitere Informationen

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.

Staging von Daten und Tabellen mit Pipeline-Aktivitäten

AWS Data Pipeline kann Eingabe- und Ausgabedaten in Ihren Pipelines bereitstellen, so dass bestimmte Aktivitäten, wie z. B ShellCommandActivity und HiveActivity, leichter zu verwenden sind.

Daten-Staging gibt Ihnen die Möglichkeit, Daten von einem Eingabedatenknoten in die Ressource zu kopieren, die die Aktivität ausführt, und anschließend genauso von der Resource in den Ausgabedatenknoten.

Die bereitgestellten Daten auf der Amazon EMR- oder Amazon EC2-Ressource sind verfügbar, indem spezielle Variablen in den Shell-Befehlen oder Hive-Skripten der Aktivität verwendet werden.

Tabellen-Staging ist mit Daten-Staging vergleichbar, außer dass die Daten speziell in Form von Datenbanktabellen bereitgestellt werden.

AWS Data Pipeline unterstützt die folgenden Staging-Szenarien:

  • Daten-Staging mit ShellCommandActivity

  • Tabellen-Staging mit Hive und zum Staging fähigen Datenknoten

  • Tabellen-Staging mit Hive und nicht zum Staging fähigen Datenknoten

Anmerkung

Staging funktioniert nur, wenn das Feld stage für eine Aktivität wie etwa ShellCommandActivity auf true festgelegt ist. Weitere Informationen finden Sie unter ShellCommandActivity.

Darüber hinaus sind zwischen Datenknoten und Aktivitäten vier verschiedene Beziehungen möglich:

Staging von Daten lokal auf einer Ressource

Die Eingabedaten werden automatisch in das lokale Dateisystem der Ressource kopiert. Die Ausgabedaten werden automatisch aus dem lokalen Dateisystem auf den Ausgabedatenknoten kopiert. Wenn Sie z. B. ShellCommandActivity-Eingaben und -Ausgaben mit Staging = true konfigurieren, sind die Eingabedaten als INPUTx_STAGING_DIR und die Ausgabedaten als OUTPUTx_STAGING_DIR verfügbar, wobei x die Anzahl der Ein- oder Ausgaben ist.

Staging von Eingabe- und -Ausgabedefinitionen für eine Aktivität

Das Format der Eingabedaten (Spaltennamen und Tabellennamen) wird automatisch auf die Ressource der Aktivität kopiert. Beispielsweise, wenn Sie HiveActivity mit Staging = true konfigurieren. Das auf dem Eingabedatenknoten S3DataNode angegebene Datenformat wird zum Bereitstellen der Tabellendefinition aus der Hive-Tabelle verwendet.

Staging nicht aktiviert

Die Eingabe- und Ausgabe-Objekte und ihre Felder sind für die Aktivität zwar verfügbar, die Daten selbst jedoch nicht. Dies trifft z. B. bei EmrActivity standardmäßig zu. Andere Aktivitäten müssen Sie dazu mit Staging = false konfigurieren. In einer solchen Konfiguration sind die Datenfelder verfügbar und die Aktivität kann mit der AWS Data Pipeline-Ausdruckssyntax auf sie verweisen, sofern die Abhängigkeit erfüllt ist. Dies dient alleinig der Abhängigkeitsprüfung. Der Code in der Aktivität veranlasst das Kopieren der Daten von der Eingabe auf die Ressource, auf der die Aktivität ausgeführt wird.

Abhängigkeitsbeziehung zwischen Objekten

Zwischen zwei Objekten besteht eine Abhängigkeitsbeziehung, die zu einer ähnlichen Situation führt, wie wenn Staging nicht aktiviert ist. In diesem Fall fungiert ein Datenknoten oder eine Aktivität als Vorbedingung für die Ausführung einer anderen Aktivität.

Data Staging mit ShellCommandActivity

Stellen Sie sich ein Szenario mit einer ShellCommandActivity mit S3DataNode-Objekten als Dateneingabe und -ausgabe vor. AWS Data Pipeline stellt die Datenknoten mit den Umgebungsvariablen ${INPUT1_STAGING_DIR} und ${OUTPUT1_STAGING_DIR} automatisch bereit, um sie für den Shell-Befehl zugänglich zu machen, als ob sie lokale Dateiordner wären. Dies wird im folgenden Beispiel veranschaulicht. Der numerische Teil der Variablen namens INPUT1_STAGING_DIR und OUTPUT1_STAGING_DIR wird abhängig von der Anzahl der Datenknoten erhöht, auf die Ihre Aktivität verweist.

Anmerkung

Dieses Szenario funktioniert nur wie beschrieben, wenn Ihre Dateneingabe- und -ausgaben S3DataNode-Objekte sind. Außerdem ist das Staging von Ausgabedaten nur zulässig, wenn für das S3DataNode-Ausgabeobjekt directoryPath festgelegt ist.

{ "id": "AggregateFiles", "type": "ShellCommandActivity", "stage": "true", "command": "cat ${INPUT1_STAGING_DIR}/part* > ${OUTPUT1_STAGING_DIR}/aggregated.csv", "input": { "ref": "MyInputData" }, "output": { "ref": "MyOutputData" } }, { "id": "MyInputData", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "filePath": "s3://my_bucket/source/#{format(@scheduledStartTime,'YYYY-MM-dd_HHmmss')}/items" } }, { "id": "MyOutputData", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "directoryPath": "s3://my_bucket/destination/#{format(@scheduledStartTime,'YYYY-MM-dd_HHmmss')}" } }, ...

Tabellen-Staging mit Hive und zum Staging fähigen Datenknoten

Stellen Sie sich ein Szenario mit einer HiveActivity mit S3DataNode-Objekten als Dateneingabe und -ausgabe vor. AWS Data Pipeline stellt die Datenknoten mit den Variablen ${input1} und ${output1} automatisch bereit, um sie für das Hive-Skript zugänglich zu machen, als ob sie Hive-Tabellen wären. Dies wird im folgenden Beispiel für HiveActivity veranschaulicht. Der numerische Teil der Variablen namens input und output wird abhängig von der Anzahl der Datenknoten erhöht, auf die Ihre Aktivität verweist.

Anmerkung

Dieses Szenario funktioniert nur wie beschrieben, wenn die Dateneingaben und -ausgaben S3DataNode- oder MySqlDataNode-Objekte sind. Tabelle-Staging wird für DynamoDBDataNode nicht unterstützt.

{ "id": "MyHiveActivity", "type": "HiveActivity", "schedule": { "ref": "MySchedule" }, "runsOn": { "ref": "MyEmrResource" }, "input": { "ref": "MyInputData" }, "output": { "ref": "MyOutputData" }, "hiveScript": "INSERT OVERWRITE TABLE ${output1} select * from ${input1};" }, { "id": "MyInputData", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "directoryPath": "s3://test-hive/input" } }, { "id": "MyOutputData", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "directoryPath": "s3://test-hive/output" } }, ...

Tabellen-Staging mit Hive und nicht zum Staging fähigen Datenknoten

Angenommen, eine HiveActivity wird für die Dateneingabe mit DynamoDBDataNode und für die Datenausgabe mit einem S3DataNode-Objekt verwendet. Da kein Data Staging verfügbar istDynamoDBDataNode, müssen Sie die Tabelle zunächst manuell in Ihrem Hive-Skript erstellen und dabei den Variablennamen verwenden, um auf die DynamoDB-Tabelle #{input.tableName} zu verweisen. Eine ähnliche Nomenklatur gilt, wenn die DynamoDB-Tabelle die Ausgabe ist, außer Sie verwenden eine Variable. #{output.tableName} Da in diesem Beispiel für das Ausgabeobjekt S3DataNode Staging verfügbar ist, können Sie unter ${output1} auf den Ausgabedatenknoten verweisen.

Anmerkung

In diesem Beispiel verfügt die Variable für den Tabellennamen über das #-(Hash-)Zeichen als Präfix, da AWS Data Pipeline zum Zugriff auf tableName oder directoryPath Ausdrücke verwendet. Weitere Informationen darüber, wie die Ausdrucksauswertung in AWS Data Pipeline funktioniert, finden Sie unter Ausdrucksauswertung.

{ "id": "MyHiveActivity", "type": "HiveActivity", "schedule": { "ref": "MySchedule" }, "runsOn": { "ref": "MyEmrResource" }, "input": { "ref": "MyDynamoData" }, "output": { "ref": "MyS3Data" }, "hiveScript": "-- Map DynamoDB Table SET dynamodb.endpoint=dynamodb.us-east-1.amazonaws.com; SET dynamodb.throughput.read.percent = 0.5; CREATE EXTERNAL TABLE dynamodb_table (item map<string,string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "#{input.tableName}"); INSERT OVERWRITE TABLE ${output1} SELECT * FROM dynamodb_table;" }, { "id": "MyDynamoData", "type": "DynamoDBDataNode", "schedule": { "ref": "MySchedule" }, "tableName": "MyDDBTable" }, { "id": "MyS3Data", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "directoryPath": "s3://test-hive/output" } }, ...