Dati e tabelle in gestione temporanea con attività della pipeline - AWS Data Pipeline

AWS Data Pipeline non è più disponibile per i nuovi clienti. I 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'input S3DataNode 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" } }, ...