Il componente piu' interessante della suite Pentaho
e' sicuramente PDI (Pentaho Data Integration).
PDI, da sempre noto con il nome Kettle, e' un ETL,
ovvero si occupa dell'estrazione, della trasformazione e del trasferimento dei dati.
La suite Pentaho non e' piu' mantenuta come Open Source
ma da tempo e' disponibile il fork Hop (Hop Orchestration Platform) che nel tempo
e' stato profondamente cambiato ed e' diventato un progetto Apache.
In questa paginetta vediamo le caratteristiche di Hop che e' nato come fork di Kettle
ma si e' notevolmente evoluto come architettura pur mantenendo
le principali caratteristiche, come il visual programming, che hanno
reso Kettle famoso e diffuso.
Apache Hop e' un progetto Open Source pubblicato con una licenza molto aperta.
Questo documento presenta diversi aspetti utili per approcciare l'utilizzo di Hop: Kettle, Apache Hop, Installazione, Performance, Tips and Tricks, Varie ed eventuali, ...
TLDR; Chi gia' conosce Kettle / Pentaho Data Integration puo' passare al prossimo capitolo!
Kettle e' lo strumento di ETL della suite Pentaho. ETL sta per Extract, Transform and Load. Ovvero reperire i dati da diverse sorgenti, trasformarli e caricarli da qualche parte. In realta' la suite Pentaho Kettle fa anche un passo in piu': il Transport e quindi a volte si usa l'acronimo ETTL. Storicamente si tratta del pacchetto Open Source Kettle. Nel tempo ha acquisito un nome ufficiale piu' lungo: Pentaho Data Integration o Pentaho DI e fa parte della Suite di Hitachi Vantara... pero' io sono molto vecchio quindi continuero' a chiamarlo Kettle!
Gli oggetti fondamentali di Kettle sono le Trasformazioni ed i Job.
Le Trasformazioni indicano come debbono essere raccolti, trasformati e ricaricati i dati.
Le trasformazioni sono composte da vari Step connessi tra loro da collegamenti chiamati Hop.
Una tipica trasformazione inizia con uno Step di Input, uno o piu' Step di trasformazione ed uno
Step di Output.
Vi sono diversi possibili Step organizzati per tipologia:
Input, Output, Transform, Utility,
Flow, Scripting, Lookup, Joins, Data Warehouse, Validation, Statistics, Job,
Mapping, Inline, Experimental, Bulk loading,
...
Gli Hop che collegano i vari step di una trasformazione rappresentano il flusso dei dati e trasportano
il contenuto dei Field da uno Step a quello successivo.
Le trasformazioni vengono eseguite in parallelo.
I Job sono graficamente simili alle trasformazioni poiche' sono anch'essi composti da una serie
di Step collegati tra loro con Hop.
I Job servono a coordinare tra loro differenti trasformazioni ed attivita' sui sistemi ospite
(eg. ricezione file, script SQL).
Un tipico Job inizia con uno Step di Start e quindi una sequenza di Step per lanciare
script, Trasformazioni e Job.
Vi sono diversi possibili Step organizzati per tipologia:
Utility, General, Mail, File management, Conditions,
Scripting, Bulk loading, XML, Repository, File tranfer,
...
Gli Hop che collegano i vari Step di un Job rapprentano il flusso di controllo e definiscono
la successione degli step da eseguire. Gli step dei job vengono eseguiti in sequenza.
I componenti principali di kettle sono: Spoon (disegno grafico dei passi dell'ETL), Pan (esecuzione da linea di comando delle trasformazioni), Kitchen (esecuzione da linea di comando dei job), Carte (console per l'esecuzione remota).
La programmazione grafica e' sicuramente l'elemento caratterizzante di Kettle che rende semplici da realizzare, presentare e mantenere anche i processi ETL piu' complessi.
Per chi conosce gia' PDI/Kettle imparare ad utilizzare Apache Hop e' molto semplice perche', a parte la nomeclatura, molti concetti di base sono gli stessi! La seguente tabella riporta le differenti terminologie utilizzate dai due progetti:
Kettle / PDI | Apache Hop |
Trasformation | Pipeline |
Job | Workflow |
Hop | Hop |
Step | Transform |
Job Entry | Action |
Spoon | hop-gui |
Pan, Kitchen | hop-run |
Carte | Hop Server |
.ktr Kettle transformation files | .hpl Hop pipeline |
.kjb Kettle job files | .hwf Hop workflows |
Le Pipeline di Apache Hop indicano come debbono essere raccolti, trasformati e ricaricati i dati.
Le trasformazioni sono composte da vari Transform connessi tra loro da collegamenti chiamati Hop.
Una tipica trasformazione inizia con un Transform di Input,
un'eventuale serie di Transform di trattamento dei dati ed un Transform di Output.
Vi sono diversi possibili Transform organizzati per categoria:
Big Data, Bulk loading, Cassandra, Cryptography, Data Quality, Data Warehouse, Experimental,
Flow, Inline, Input, Joins, Lookup, Mapping, Neo4j, Output, Scripting, Statistics, Streaming,
Transform, Utility, Validation, Workflow.
A sua volta ciascuna categoria contiene decine di possibilita'.
Ad esempio un Transform di Input puo' prelevare i dati:
da una tabella di un DB relazionale (un qualsiasi database raggiungibile via JDBC),
da un file con tracciato record fisso, da un file CSV, da un foglio MS-Excel, ...
Gli Hop che collegano i vari step di una trasformazione rappresentano il flusso dei dati
e trasportano il contenuto dei Field da uno Transform a quello successivo.
Le pipeline vengono elaborate in parallelo.
I Workflow di Apache Hop sono graficamente simili alle Pipeline poiche' sono anch'essi composti
da una serie di Action collegati tra loro con Hop.
I Workflow servono a coordinare tra loro differenti trasformazioni ed attivita' sui sistemi ospite
(eg. ricezione file, script SQL).
Un workflow inizia con un Action di Start
e quindi una sequenza di Action per lanciare script, Trasformazioni e Job.
Vi sono diversi possibili Action organizzati per categoria:
Bulk loading, Conditions, File encryption, File management, File transfer, General,
Mail, Scripting, Utility, XML.
Gli Hop che collegano i vari Step di un Job rapprentano
il flusso di controllo e definiscono la successione degli step da eseguire.
I workflow generalmente vengono elaborati in sequenza.
Le descrizioni appena viste sono quasi identiche per Kettle/PDI, basta cambiare i nomi!
In effetti Hop fornisce un tool che converte in automatico i file
delle trasformazioni e dei job di Kettle in pipeline e workflow di Apache Hop:
Menu / File / Import from Kettle/PDI !
Effettuata la conversione da script Kettle al nuovo formato
conviene pero' eseguirne una revisione per sfruttare le
ulteriori funzionalita' offerte da Apache Hop.
Anche se i concetti di base sono gli stessi di Kettle, Apache Hop
presenta un'ampia serie di innovazioni:
I progetti contengono tutti i workflow, pipeline, file, documentazione
che servono per una implementazione ed hanno una directory associata.
E' possibile utilizzare la stessa pipeline su ambienti diversi (eg. sviluppo, laboratorio di integrazione, produzione)
perche' l'associazione alle stringhe di connessione e' dinamica.
Le variabili possono essere definite ed utilizzate a qualsiasi livello in Hop rendendo molto flessibile il suo comportamento. La sintassi per utilizzare una variabile e' molto semplice ${nome_variabile}:
I metadati consentono di personalizzare gli ambienti e vengono tipicamente
salvati come file JSON.
Un'installazione di default di Hop contiene i seguenti tipi di metadati:
Asynchronous Web Service, Azure Blob Storage Authentication, Beam File Definition,
Cassandra Connection, Data Set, Google Storage Authentication, Hop Server,
MongoDB Connection, Neo4j Connection, Neo4j Graph Model,
Partition Schema, Pipeline Log, Pipeline Probe, Pipeline Run Configuration,
Pipeline Unit Test, Relational Database Connection, REST Connection,
Splunk Connection, Variable Resolver, Web Service,
Workflow Log, Workflow Run Configuration.
Hop consente di introdurre test nel codice ed e' integrabile con GitHub (per altro i file JSON ed XML sono gestiti molto bene da Git).
Oltre che sull'engine nativo, in locale o in remoto,
e' possibile eseguire pipeline e workflow di Hop su
Apache Spark, Apache Flink e Google Dataflow grazie all'integrazione con Apache Beam.
Non si trovano invece in Apache Hop: wizard, repository, JNDI, ... in generale perche' con i plugin ed i metadati non sono stati piu' ritenuti necessari.
L'interfaccia grafica hop-gui ha sostituito Spoon con diverse migliorie
ed il comando hop-run ha sostituito Pan e Kitchen.
Infine come ultima differenza rispetto a Kettle, ma certo non per importanza,
la licenza di Hop e' Apache License 2.0
una licenza Open Source nota per la sua liberta'.
L'installazione e' molto semplice... e' sufficiente scaricare il software dal sito ufficiale e porlo una directory locale perche' sia gia' utilizzabile. Nella directory si trovano le applicazioni Java, che possono girare su qualsiasi piattaforma, ed alcuni script per il lancio dei programmi sulle piattaforme piu' comuni (eg. .sh per Unix/Linux/Mac OS, .bat per WinX).
L'unico prerequisito e' la presenza di una versione compatibile del runtime Java
(eg. l'ultima versione di Hop e' la 2.13 che richiede Java 17).
Con Hop vengono gia' distribuiti i driver JDBC dei database che sono compatibili
come licenza (eg. clickhouse, duckdb, postgresql, sqlite, ...).
I driver JDBC si trovano nella directory
PATH_TO_YOUR_HOP_INSTALLATION/lib/jdbc
dove e' possibile aggiungere altri driver o aggiornare quelli presenti.
Per avviare la GUI basta lanciare il comando hop-gui.sh su OS X / Linux oppure il comando hop-gui.bat su Windows.
Problemi? Parliamone!
Quando il gioco si fa duro... i duri cominciano a giocare!
Per ottenere il massimo delle prestazioni:
si sfrutta al massimo il parallelismo,
si utilizza la modalita' batch (use_batch=Y, ignore_errors=Y) e
si configura con attenzione il numero di record per commit,
si lavora per delta,
si dimensionano adeguatamente i server e le connessioni di rete,
si schedulano con attenzione i workflow load e le finestre temporali,
si effettua solo il minimo necessario richiesto,
si utilizzano i Bulk load (disponibili verso diversi tipi di DB),
si effettua un tuning specifico delle basi dati (eg. nologging, drop idx, partitioning, noconstraint),
si spezzano le fasi di ETL ed, eventualmente, si utilizzano tool specifici per alcune di esse,
...
Il fatto che i tool di Apache Hop siano applicazioni Java non e' un problema:
si trova sempre il modo di rendere efficiente la parte che si trova sul percorso critico
e di gestirla nel workflow.
Le trasformazioni vengono eseguite in parallelo, percio' i tempi di inizio e fine dei singoli trasform non sono indicativi: uno passo puo' essere durato a lungo perche' non riceveva l'input dal precedente. E' invece importante controllare l'attivita' eseguita dai singoli passi.
Una volta compresa la logica di base Apache Hop e' semplice da utilizzare. Tuttavia qualche breve consiglio puo' essere utile...
Apache Hop e' un'applicazione Java: funziona sempre su qualsiasi SO, ma se non funzionasse...
Se qualche pipeline va in out of memory...
Se non funziona l'accesso ai DB...
Basta seguire i link per conoscere il dettaglio delle versioni di Apache Hop e di Pentaho Data Integration/Kettle.
Titolo: Kettle 2 Apache Hop
Livello: Avanzato
Data:
1 Aprile 2025
Versione: 1.0.1 - 1 Aprile 2025
Autore: mail [AT] meo.bogliolo.name