Integracja aplikacji z ETL Pentaho

Każdy, kto pozna możliwości Pentaho zachwyci się tym programem. Pentaho Kettle (PDI) może integrować i analizować dane, eksplorować dane, tworzyć raporty itp. Narzędzie oferuje kompleksowy zestaw funkcji BI, które pozwalają usprawnić procesy i poprawić wydajność firmy. Jak połączyć łatwość tworzenia przepływów w Pentaho, szerokie możliwości i stabilność ETL z aplikacjami desktop, web, Android, IOS by wzbogacić ich funkcjonalność i budować aplikacje szybciej, z mniejszą ilością błędów?

REST w Pentaho

Domyślnie Pentaho nie posiada usługi Web Serwisu. Nie można uruchomić Pentano jako serwisu by udostępniało API do transformacji i zadań z innych systemów. By udostępnić Pentaho Kettle innym systemom, potrzebujemy uruchomić Carte Server. Carte jest prosty serwerem web'owym, który umożliwia zdalne wykonywanie zadań i transformacji. Możemy uruchomić go jako batch lub jako serwis. Uruchomienie batch'a to wykoananie komendy (8080 to port na którym nasłuchuje):

data-integration\carte.bat 127.0.0.1 8080

Po chwili server Carte gotowy jest do użytku. W oknie przeglądarki wpisujemy http://localhost:8080 a następnie logujemy się. Domyślne konto/hasło to 'cluster/cluster'. Pierwszą informacją którą widzimy na ekranie jest:

Slave server menu

Show status

Slave server, to serwer na którym uruchomiony jest Carte. Po kliknięciu w 'status' Otrzymamy tabele ze statusami ostatnio wykonanych transformacji i zadań (puste jeśli właśnie uruchomiliśmy serwer) oraz szczegóły konfiguracji poniżej. Nie przejmuj sie brakiem ikon na ekranie - nigdy nie wyświetlają się poprawnie.

Innym sposobem uruchomienia serwera Carte jest zdefiniowanie jego parametrów w pliku XML. Da to nam możliwość ustawienia pożądanego hasła oraz portu. Domyślne konfiguracje znajdziesz w katalogu pdi-ce-X.X\data-integration\pwd. Edytuj jeden z plików. Przykładowa konfiguracja (jeden slave serwer) może wyglądać następująco:

<slave_config>
  <!--
    Test config
  -->

  <slaveserver>
    <name>slave1-8081</name>
    <hostname>localhost</hostname>
    <port>8081</port>
    <username>cluster1</username>
    <password>cluster1</password>
    <master>N</master>
  </slaveserver>

</slave_config>

Mając konfigurację, uruchamiamy serwer:

data-integration>carte.bat \C:\Pentaho\pdi-ce-X.X.X\data-integration\pwd\test-carte-config-8081.xml

Uruchamiamy Pentaho Carte jako serwis

Cały proces przygotowania pliku konfiguracyjnego i uruchomienia serwisu jest dobrze opisany na stronie Pentaho. Postąp zgodnie z zaleceniem i stwórz dedykowany katalog dla serwisu. W razie problemów upewnij się że ścieżki w pliku konfiguracyjnym (wrapper.conf) prowadzą do istniejącego katalogu gdzie jest Java i że wersja Javy jest odpowiednia (w chwili pisania tego artykułu Pentaho Kettle nie działa z wersją 9).

Uruchomienie transformacji i zadania na serwerze Carte

Uruchomienie transformacji lub zadania w najprostszym scenariuszu polega na dodaniu do odpowiedniego parametra URL'a scieżki transformacji lub zadania. Transformacja lub zadanie muszą znajdować się na dysku widocznym dla serwera gdzie uruchomiony jest Carte. Przykładowe uruchomienie transformacji:

http://localhost:8081/kettle/executeTrans/?trans=C:\Pentaho\Workspace\Test\jsontest.ktr

Serwer nie zwróci żadnego statusu. Po wykonaniu transformacji pod url'em kettle/status zobaczysz log z wykonania tej transformacji:

Name Carte Object ID Status Last log date Last log time
jsontest 5d6863a0-2b68-4753-9959-798bc6f2e650 Finished 2020/12/21 11:22:19.734

Zauważ że możliwe jest przesyłanie parametrów do transformacji poprzed dodanie ich do url'a:

http://localhost:8081/kettle/executeTrans/?trans=C:\Pentaho\Workspace\Test\jsontest.ktr&startdate=20130101&enddate=20131231

Uruchomienie zadania wygląda następująco:

http://localhost:8081/kettle/executeJob/?job=C:\Pentaho\Workspace\Test\job_rob_swoje.kjb

Carte serwer zwróci XLM ze statusem i ID zadania:

<webresult>
  <result>OK</result>
  <message>Job started</message>
  <id>f12d80ae-0354-4f2a-b9aa-b1b5222f2020</id>
</webresult>

Status wykonania możesz sprawdzić wchodząc pod url 'kettle/satus'. Jeśli potrzebujesz statusów wykonanych transformacji i/lub zadań w ustrukturyzowanej formie (np. automatyzacja w programie), możesz je pobrać uruchamiając zapytanie:

http://localhost:8081/kettle/status/transStatus/?xml=y

Otrzymasz listę statusów w postaci kodu XML:

<serverstatus>
 <statusdesc>Online</statusdesc>
  <memory_free>268140992</memory_free>
  <memory_total>411566080</memory_total>
  <cpu_cores>2</cpu_cores>
  <cpu_process_time>8812500000</cpu_process_time>
  <uptime>91124162</uptime>
  <thread_count>109</thread_count>
  <load_avg>-1.0</load_avg>
  <os_name>Windows Server 2016</os_name>
  <os_version>10.0</os_version>
  <os_arch>amd64</os_arch>
  <transstatuslist> </transstatuslist>
  <jobstatuslist>
   <jobstatus>
    <jobname>Process_Invoices_v2</jobname>
    <id>cdbc9847-ef80-4355-b046-7d7be2f2be75</id>
    <status_desc>Running</status_desc>
    <error_desc/>
    <log_date>2019/12/24 12:46:16.405</log_date>
    <logging_string><![CDATA[]]></logging_string>
    <first_log_line_nr>0</first_log_line_nr>
    <last_log_line_nr>0</last_log_line_nr>
    </jobstatus>
  </jobstatuslist>
</serverstatus>

Przesyłanie tranformacji na serwer Carte

Jeśli transformacja która chcesz wykonać nie znajduje się w zasobie do którego ma dostęp serwer Carte, możesz przesłać ją na serwer a następnie uruchomić. W tym celu musisz wykonać kilka kroków. Po pierwsze, musisz zmienić format pliku transformacji. Transformacja to plik XML. Do pliku transformacji dodaj tagi:

<?xml version="1.0" encoding="UTF-8"?>
<transformation_configuration>
  <transformation>

   ....szczegóły transformacji

  </transformation>
</transformation_configuration>

Tak spreparowany plik transformacji wyślij metodą POST do servera (plik transformacji w BODY):

http://127.0.0.1:8080/kettle/registerTrans/?xml=Y

Serwer po prawidłowym wykonaniu polecenia zwróci:

<?xml version=""1.0"" encoding=""UTF-8""?>
<webresult>
  <result>OK</result>
  <message>Transformation "AnalyticQuery" was added to Carte with id 02fcbac5-4410-4df3-bba8-907e79121d3b</message>
  <id>02fcbac5-4410-4df3-bba8-907e79121d3b</id>
</webresult>

Metoda 'kettle/prepareExec' przygotowuje wcześniej przesłaną transformację do wykonania. Wykonaj komendę metodą GET:

http://127.0.0.1:8080/kettle/prepareExec/?name=AnalyticQuery&xml=Y

Serwer Carte zwróci w rezultacie:

<?xml version=""1.0"" encoding=""UTF-8""?>
<webresult>
  <result>OK</result>
  <message/>
  <id/>
</webresult>

Mając przygotowaną transformację, uruchom ja finalnie:

http://127.0.0.1:8080/kettle/startTrans/?name=AnalyticQuery&xml=Y

Serwer Carte zwróci w rezultacie:

<?xml version=""1.0"" encoding=""UTF-8""?>
<webresult>
  <result>OK</result>
  <message>Transformation [AnalyticQuery] was started.</message>
  <id/>
</webresult>

Podobne metody dostępne są dla przesyłania i uruchamiania zadań. Szczegóły tych metod znajdziesz w dokumentacji Pentaho Kettle. Jeśli potrzebujesz pomocy, skontaktuj się z nami.