Amazon Data Pipeline per processare dati in AWS
da Davide Riboldi · pubblicato il 18 agosto, 2014 · modificato il 30 luglio, 2016

AWS Data Pipeline è un servizio per automatizzare la trasformazione e lo spostamento dei dati tra risorse AWS o risorse on-premise. Con AWS Data Pipeline, è possibile definire dei flussi di lavoro basati sui dati, facendo in modo che le attività dipendano dal completamento delle attività precedenti. Ad esempio possiamo archiviare ogni giorno i log di un web server in Amazon S3, per poi avviare settimanalmente un cluster Amazon Elastic MapReduce che li analizza e genera un report sul traffico.

Introduzione

Tramite questo servizio possiamo disegnare complessi flussi di operazioni, spostare dei dati e memorizzare dei risultati tra i servizi AWS, tutto senza dover scrivere complicati script e mettere in produzione risorse specifiche per questo tipo di elaborazioni. Tutti gli eventuali errori o la disponibilità dei servizi vengono gestiti direttamente dal servizio che si preoccupa di eseguire e fermare le elaborazioni nei momenti giusti.

AWS Data pipeline

In questo schema viene rappresentato graficamente l’esempio citato in precedenza, dove il task giornaliero si occupa della copia dei dati dal server verso Amazon S3, mentre il task settimanale si occupa di avviare il cluster EMR per eseguire l’analisi dei log. Oltre alle attività pianificate, AWS Data Pipeline si assicura che l’ultima copia giornaliera si sia conclusa correttamente, prima di lanciare il cluster EMR.

Quindi, anche se ci fosse un ritardo imprevisto nell’attività di copia dei dati, grazie alle funzionalità del servizio AWS Data Pipeline è possibile controllare questi inconvenienti e gestire in modo intelligente il flusso di lavoro, avendo la certezza che i nostri dati siano sempre in uno stato consistente. La cosa interessante di questo servizio è che tutte queste attività possono essere configurate senza scrivere una riga di script.

Come funziona

Per accedere al servizio basta entrare nella management console, selezionare la regione geografica e il menu di AWS Data Pipeline. I passaggi fondamentali del servizio sono racchiusi in tre operazioni: Definizione, schedulazione e attivazione. Una volta entrati nella dashboard principale del servizio vi apparirà la seguente schermata:

AWS Data pipeline

Prima di procedere alla creazione di una nuova definizione di Pipeline, è meglio che vediamo insieme il significato di questi due termini che useremo più tardi.

Definizione Pipeline: specifica la logica della gestione dei dati e determina le attività che dovranno essere eseguite, le schedula e le assegna ai task runner. Se un’attività non viene completata, ritenta l’operazione in base alle opzioni specificate, e se necessario, il servizio le può riassegnare ad un altro task runner. Se l’attività fallisce ripetutamente, è possibile configurare la pipeline per l’invio di una notifica. La definizione può essere creata tramite: la console, un file JSON oppure attraverso AWS SDK.

Task Runner: è una applicazione che effettua un polling al servizio di Data Pipeline, in cerca di attività da eseguire. Quando una attività viene assegnata ad un task runner, quest’ultimo esegue tale attività e mantiene informato il servizio di Data Pipeline sul suo stato di esecuzione. Il task runner può essere installato in automatico sulle risorse che vengono lanciate dal servizio o essere installato manualmente sulle risorse che gestiamo direttamente, come istanze EC2 o server all’interno della nostra azienda.

AWS Data Pipeline – Creazione di una definizione

Dalla schermata precedente eseguiamo l’azione “get started now” e inseriamo i valori della nostra prima pipeline. Per la creazione ci verranno richiesti alcuni parametri che servono solo per la definizione, la configurazione vera e propria la potremmo eseguire subito dopo con l’opzione di modifica. Inseriamo un nome e una descrizione, definiamo i parametri di schedulazione, abilitiamo i logs su un bucket S3 e attiviamo i ruoli IAM.

Una volta creata la data pipeline ci verrà presentata la schermata per la configurazione di tutti i componenti, quest’ultima sarà suddivisa in due parti, a sinistra troviamo un layout che visualizza in maniera grafica le azioni che definiamo, mentre a destra troviamo tutte le sezioni con il dettaglio dei parametri che possono essere specificati.

AWS Data pipeline

In questa schermata ho inserito come esempio la copia di una tabella su Amazon RDS in Amazon S3 e la copia di una tabella MySQL locale su Amazon RDS. Come potete vedere, sulla sinistra ci viene riportato uno schema generale e sulla destra le varie opzioni. Vi riporto un’elenco dei parametri di configurazione con una breve descrizione:

Activities: è una componente della pipeline che definisce il lavoro da eseguire. AWS Data Pipeline fornisce una serie di attività preimpostate che possono coprire gli scenari più comuni, ad esempio: spostare i dati da una posizione ad un’altra, l’esecuzione di una query Hive e così via. Le attività sono estendibili, in modo da poter eseguire i propri script personalizzati e supportare infinite combinazioni. Le attività supportate sono:

  • CopyActivity – copia i dati da una posizione all’altra.
  • EmrActivity – esegue un’attività su un Cluster EMR.
  • HiveActivity – esegue una Query Hive su un cluster Amazon EMR.
  • HiveCopyActivity – esegue una query Hive su cluster EMR con supporto avanzato.
  • PigActivity – esegue uno script di Pig su un cluster Amazon EMR.
  • RedshiftCopyActivity – copia i dati da e verso le tabelle di Amazon Redshift.
  • ShellCommandActivity – esegue un comando personalizzato di shell UNIX/Linux.
  • SqlActivity – esegue una query SQL su un database.

DataNodes: il DataNodes definisce la posizione e il tipo di dati che una Activity Pipeline utilizza come input o output. Il servizio supporta i seguenti tipi di nodi:

  • DynamoDBDataNode – una tabella DynamoDB che contiene i dati da utilizzare.
  • RedshiftDataNode – una tabella di Amazon Redshift con i dati da utilizzare.
  • S3DataNode – una posizione in Amazon S3 che contiene uno o più file.
  • SqlDataNode – query di database e tabella MySQL con i dati da utilizzare.

Schedules: questo componente definisce la tempistica di un evento programmato, ad esempio quando viene eseguita un’attività. Le opzioni possono essere: una sola esecuzione al momento dell’attivazione della pipeline, oppure ripetute nel tempo attivando la schedulazione (esecuzioni giornaliere, settimanali, mensili etc.).

Resources: è una risorsa computazionale che esegue un lavoro specificato in una Activity Pipeline. AWS Data Pipeline supporta i seguenti tipi di risorse:

  • Ec2Resource – istanza EC2 che esegue il lavoro definito da un’attività di pipeline.
  • EmrCluster – Un cluster Amazon EMR che esegue il lavoro definito da un’attività.

Preconditions: contiene le condizioni che devono essere verificate prima che un’attività possa essere eseguita. Ad esempio, è possibile verificare che i dati all’interno di un nodo siano presenti prima di iniziare un’attività di copia. Ci sono due tipi di Preconditions:

  • System managed: viene eseguito dal servizio.
  • User managed: viene eseguito solo su risorse computazionali da noi specificate.

Guida completa su AWS

Questo articolo appartiene ad una serie di pubblicazioni che costituiscono una guida completa dedicata agli Amazon Web Services.  Molti servizi che trattiamo in questo blog vengono anche spiegati con dei video che trovate nel nostro canale youtube. Se volete seguire questo percorso didattico iscrivetevi alla community Cloud AWS.

1 Commento

  1. Ciao Davide, io ho provato una copia sul servizio S3 utilizzando dei file di diversi GB e devo dire che le performance sono molto buone. L'unica cosa che consiglio è di utilizzare questo servizio solo per operazioni con grande mole di dati in quanto si va a pagare comunque una istanza EC2 per l'elaborazione.

condividi