AWS Data Pipeline non è più disponibile per i nuovi clienti. Clienti esistenti di AWS Data Pipeline possono continuare a utilizzare il servizio normalmente. Ulteriori informazioni
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Dati e tabelle in gestione temporanea con attività della pipeline
AWS Data Pipeline può eseguire la gestione temporanea dei dati di input e di output nelle pipeline per rendere più facile l'utilizzo di alcune attività, come ShellCommandActivity
e HiveActivity
.
La gestione temporanea dei dati consente di copiare i dati dal nodo di dati di input alla risorsa che esegue l'attività e, in modo analogo, dalla risorsa al nodo di dati di output.
I dati staged sulla risorsa Amazon EMR o Amazon EC2 sono disponibili utilizzando variabili speciali nei comandi della shell dell'attività o negli script Hive.
La gestione temporanea delle tabelle è simile a quella dei dati, tranne che i dati in gestione temporanea assumono la forma di tabelle di database, in modo specifico.
AWS Data Pipeline supporta gli scenari seguenti di gestione temporanea:
-
Gestione temporanea dei dati con
ShellCommandActivity
-
La gestione temporanea della tabella con Hive e i nodi di dati supportati da tale gestione
-
La gestione temporanea della tabella con Hive e i nodi di dati non supportati da tale gestione
Nota
La gestione temporanea funziona solo quando il campo stage
è impostato su true
in un'attività, ad esempio ShellCommandActivity
. Per ulteriori informazioni, consulta ShellCommandActivity.
Inoltre, i nodi di dati e le attività possono essere correlati in quattro modi:
- Gestione temporanea dei dati in locale su una risorsa
-
I dati di input vengono automaticamente copiati nel file system locale della risorsa. I dati di output vengono automaticamente copiati dal file system locale della risorsa al nodo di dati di output. Ad esempio, quando si configurano gli input e gli output
ShellCommandActivity
con gestione temporanea = true, i dati di input sono disponibili come INPUTx_STAGING_DIR e i dati di output sono disponibili come OUTPUTx_STAGING_DIR, dove x è il numero di input o output. - Gestione temporanea delle definizioni di input e output per un'attività
-
Il formato di dati di input (nomi delle colonne e nomi delle tabelle) vengono automaticamente copiati nella risorsa dell'attività. Ad esempio, quando si configura
HiveActivity
con gestione temporanea = true. Il formato di dati specificato nell'inputS3DataNode
viene utilizzato per la definizione della tabella dalla tabella Hive. - Gestione temporanea non abilitata
-
Gli oggetti di input e output e i loro campi sono disponibili per l'attività, mentre i dati no. Ad esempio,
EmrActivity
per impostazione predefinita o quando si configurano altre attività con gestione temporanea = false. In questa configurazione, i campi dati sono disponibili per fare in modo che l'attività effettui un riferimento utilizzando la sintassi dell'espressione AWS Data Pipeline e questo si verifica solo quando la dipendenza viene soddisfatta. Questo serve solo come controllo delle dipendenze. Il codice nell'attività è responsabile della copia dei dati dall'input alla risorsa che esegue l'attività. - Relazione di dipendenza tra gli oggetti
-
Si è verificato un dipende-dalla relazione tra due oggetti, che comporta una situazione analoga a quando la gestione temporanea non è abilitata. In questo modo, i dati di un nodo o un'attività agiscono come precondizione per l'esecuzione di un'altra attività.
Gestione dei dati con ShellCommandActivity
Considerare uno scenario utilizzando un ShellCommandActivity
con gli oggetti S3DataNode
come input e output dei dati. AWS Data Pipeline automaticamente gestisce temporaneamente i nodi di dati in modo da renderli accessibili al comando shell come se fossero cartelle di file locali che utilizzano le variabili di ambiente ${INPUT1_STAGING_DIR}
e ${OUTPUT1_STAGING_DIR}
come mostrato nel seguente esempio. La porzione numerica delle variabili denominate INPUT1_STAGING_DIR
e OUTPUT1_STAGING_DIR
cresce a seconda del numero di nodi di dati a cui fa riferimento l'attività.
Nota
Questo scenario funziona solo se, come descritto, i dati di input e output sono oggetti S3DataNode
. Inoltre, la gestione temporanea dei dati di output è consentita solo quando directoryPath
è impostato sull'oggetto di output S3DataNode
.
{ "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')}" } }, ...
La gestione temporanea della tabella con Hive e i nodi di dati supportati da tale gestione
Considerare uno scenario utilizzando un HiveActivity
con gli oggetti S3DataNode
come input e output dei dati. AWS Data Pipeline automaticamente gestisce temporaneamente i nodi di dati in modo da renderli accessibili allo script Hive come se fossero tabelle Hive che utilizzano le variabili ${input1}
e ${output1}
come mostrato nel seguente esempio per HiveActivity
. La porzione numerica delle variabili denominate input
e output
cresce a seconda del numero di nodi di dati a cui fa riferimento l'attività.
Nota
Questo scenario funziona solo se, come descritto, i dati di input e output sono oggetti S3DataNode
o MySqlDataNode
. La gestione temporanea delle tabelle non è supportata per DynamoDBDataNode
.
{ "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" } }, ...
La gestione temporanea della tabella con Hive e i nodi di dati non supportati da tale gestione
Considerare uno scenario utilizzando una HiveActivity
con DynamoDBDataNode
come input dei dati e un oggetto S3DataNode
come output. Non è disponibile alcuna gestione temporanea dei datiDynamoDBDataNode
, pertanto è necessario innanzitutto creare manualmente la tabella all'interno dello script hive, utilizzando il nome della variabile #{input.tableName}
per fare riferimento alla tabella DynamoDB. Una nomenclatura simile si applica se la tabella DynamoDB è l'output, tranne che si utilizza una variabile. #{output.tableName}
La gestione temporanea è disponibile per l'output dell'oggetto S3DataNode
in questo esempio, pertanto è possibile fare riferimento al nodo dei dati di output come a ${output1}
.
Nota
In questo esempio, la variabile del nome della tabella ha il prefisso di caratteri # (hash) perché AWS Data Pipeline utilizza espressioni per accedere a tableName
o directoryPath
. Per ulteriori informazioni sul funzionamento della valutazione dell'espressione in AWS Data Pipeline, consulta Valutazione delle espressioni.
{ "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" } }, ...