Kettle to Apache Hop

Kettle 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.

Hop 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, ...

Kettle

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.

Pentaho - Kettle simple Transformation 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.

Pentaho - Kettle simple Job 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).

Pentaho - Spoon

La programmazione grafica e' sicuramente l'elemento caratterizzante di Kettle che rende semplici da realizzare, presentare e mantenere anche i processi ETL piu' complessi.

Apache Hop

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
(cfr. documentazione Hop vs Kettle)

Apache Hop - Pipeline 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.

Apache Hop - Pipeline sample

Apache Hop - Workflow 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.

Apache Hop - Workflow sample

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.

Funzionalita' ulteriori

Apache Hop - Logo2 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. Apache Hop - Project

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}:

Apache Hop - Variables

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).

Apache Hop - Beam 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'.

Installazione Apache Hop

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).
Apache Hop - Database 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!

Performance

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.

Tips and Tricks

Una volta compresa la logica di base Apache Hop e' semplice da utilizzare. Tuttavia qualche breve consiglio puo' essere utile...

Problemi? Parliamone!

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...

Varie ed eventuali

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 (3/5)
Data: 1 Aprile 2025
Versione: 1.0.1 - 1 Aprile 2025
Autore: mail [AT] meo.bogliolo.name