天天看點

【Kettle 入門 Windows10 CentOS7】Kettle-8.2.0 入門基礎 2019.10.31簡介資源PDI 構架核心概念Kitchen指令行選項部署案例資源庫/存儲庫調優

Pentaho·Data Integration - Kettle

  • 簡介
      • 軟體背景
      • Kettle 水壺簡介
      • 特點
  • 資源
  • PDI 構架
      • PDI 用戶端
      • PDI 伺服器
  • 核心概念
      • Transformation
      • Job
      • 變量
  • Kitchen指令行選項
  • 部署
      • Windows
      • Linux
      • 叢集部署
  • 案例
      • 1. RDBMS --> RDBMS Trans
      • 2. R --> R Job
      • 3. Hive --> HDFS Trans
      • 4.HDFS --> HBase Trans
  • 資源庫/存儲庫
      • Database Repository
      • File Repository
  • 調優

簡介

軟體背景

2017 Hitachi Data Systems 日立資料系統公司 和 Hitachi Insight Group、Pentaho 三家公司合并至一家新公司—— Hitachi Vantara。順帶一提,日立集團涉及的領域十分廣闊,對于計算機存儲方面尤為出名,是以他們對于資料方面的擴充也不令人驚訝,應該說是理所當然。

Kettle 為早先的開源項目名稱,後來被Pentaho收購,現在的全稱為 Pentaho 平台體系中的 Pentaho Data Integration,也就是 資料內建。下文均使用 Kettle 作為簡稱。為什麼使用 Kettle 軟體,很簡單,窮B不配用付費的産品,hhh。Kettle 是 Pentaho 産品體系中的 免費 完全開源的一環,用用是不收費的。

最後擴充一下 Pentaho 平台體系。Pentaho解決了阻礙組織從海量資料中擷取價值的障礙。該平台簡化了準備和混合任何資料的過程,并提供了一系列工具,可輕松分析,可視化,探索,報告和預測。Pentaho具有開放性,可嵌入性和可擴充性,其設計旨在確定團隊中的每個成員(從開發人員到業務使用者)都可以輕松地将資料轉化為價值。

主要産品分為2大部分:資料內建Data Integration,商業分析Business Analytics,以及完整的部署安裝售後故障服務。

Kettle 水壺簡介

Pentaho Data Integration Pentaho 資料內建 (PDI),通過可視化工具來簡化編寫代碼的過程,使可以更快地向分析者傳遞清理就緒的資料,這樣可以減少時間和複雜性。不需要編寫SQL或Java或Python代碼,組織可以立即從他們的資料中獲得真正的價值,這些資料可以來自檔案系統、關系資料庫、Hadoop等等,這些資料位于雲計算或本地環境中。

簡答來說:Kettle 水壺 是一款開源,分布式的 ETL資料清洗 工具,純java編寫,可視化操作不用寫代碼,可在Window、Linux 等諸多平台上運作,資料抽取高效穩定。

PDI用戶端(也稱為 Spoon 勺子)是一個桌面應用程式,使您能夠建構轉換以及安排和運作作業。

PDI用戶端的常見用途包括:

  • 不同資料庫和應用程式之間的資料遷移
  • 充分利用雲,叢集和大規模并行處理環境,将大量資料集加載到資料庫中
  • 資料清理的步驟範圍從非常簡單到非常複雜的轉換
  • 資料內建,包括利用實時ETL作為Pentaho Reporting的資料源的能力
  • 内置支援緩慢變化的尺寸和替代密鑰建立的資料倉庫(如上所述)

如果團隊需要 ETL(提取,轉換和加載)協作環境,Kettle也提供了Pentaho存儲庫,用于共享 協作 PDI 腳本。

特點

1.開源免費,2.跨平台純Java編寫,3.資料抽取高效穩定,4.圖形化操作無編碼,5.全面覆寫資料庫、數倉,6.定時工作流

資源

Hitachi Vantara 公司中文官網:https://www.hitachivantara.com/zh-cn/home.html

Pentaho 平台首頁:https://www.hitachivantara.com/zh-cn/products/big-data-integration-analytics.html

Data Integration Kettle 新聞首頁:https://community.hitachivantara.com/s/article/data-integration-kettle

Pentaho 系列産品下載下傳位址: https://sourceforge.net/projects/pentaho/files/

Kettle 2019.10.30最新穩定版“:https://sourceforge.net/projects/pentaho/files/latest/download?aliId=137249511

Kettle 文檔:https://help.pentaho.com/Documentation/8.3/Products/Pentaho_Data_Integration

Kettle 位于 Pentaho系列産品下載下傳位址的 Pentaho x.x / client-tools 路徑下的 pdi-ce-x.x.x.x-xx.zip,如下

https://sourceforge.net/projects/pentaho/files/Pentaho 8.3/client-tools/pdi-ce-8.3.0.0-371.zip/download

PDI 構架

【Kettle 入門 Windows10 CentOS7】Kettle-8.2.0 入門基礎 2019.10.31簡介資源PDI 構架核心概念Kitchen指令行選項部署案例資源庫/存儲庫調優

PDI(kettle)是基于 BS 架構實作的服務。

組成:

名稱 描述
Spoon 通過圖形接口,用于編輯作業和轉換的桌面應用 / 用戶端應用程式【GUI】。
Pan 一個獨立的指令行程式,用于執行由Spoon編輯的轉換(Transformation)【指令行】。
Kitchen 一個獨立的指令行程式,用于執行由Spoon編輯的作業(Job)【指令行】。
Carte Carte是一個輕量級的Web容器,用于建立專用、遠端的ETL Server。

PDI 用戶端

Spoon 勺子 是建構 ETL Jobs 和 Transformations 的設計工具( GUI方式 )。Spoon 以拖拽方式圖形化界面進行設計,能夠通過 spoon 調用專用的資料內建引擎或者叢集。Spoon 還可以為 Jobs 和 Transformations 設計排程時間表。

Pan 與 Kitchen 可以視為 Spoon 執行器,均可執行 由Spoon編輯的 Job 檔案,Pan 還可以執行 Transformation 檔案。

PDI 伺服器

Data Integration Server(Carte) 是一個專用的ETL Server,它的主要功能有:

功能 描述
執行 通過Pentaho Data Integration引擎執行ETL的作業或轉換
安全性 管理使用者、角色或內建的安全性
内容管理 提供一個集中的資源庫,用來管理ETL的作業和轉換。資源庫包含所有内容和特征的曆史版本。
時序安排 在spoon設計者環境中提供管理Data Integration Server上的活動的時序和監控的服務

核心概念

Transformation

轉換,Transformation 是由一系列 step(步驟)圖形化元件組成的邏輯工作網絡。 本質上,是對資料的操作。

例如:step1從文本檔案中讀取資料,step2過濾,然後step3排序,最後step4将資料加載到資料庫。

steps: Transformation構成的基礎子產品,包含了140多個,它們按照不同功能進行分類: 輸入類、輸出類、腳本類。每個不同的Step完成某種特定的功能。将這些特定功能的Step組合起來,我們可以制作出一個 Transformation 對象。

Hops:連接配接 Steps的資料通道(圖形化界面中的 有向線) 使得中繼資料從一個步驟傳遞到另一個步驟。但實際上并非如此,步驟之間的順序不是 Transformation 執行的順序。當執行一個轉換時,每個Step都以自己的線程啟動,并不斷的接受和推送資料。注意:所有的Step都是同時開啟的,也就是,我們無法在第一個Step設定變量,然後在後面的Step中使用。

Transformation檔案的擴充名為

.ktr

【Kettle 入門 Windows10 CentOS7】Kettle-8.2.0 入門基礎 2019.10.31簡介資源PDI 構架核心概念Kitchen指令行選項部署案例資源庫/存儲庫調優

Job

Jobs(工作)基于工作流模型(時間排程)的,協調一個或多個資料源、Transformation 執行過程 及其 各個轉換間的相關依賴性的ETL活動——可以簡單了解為 包含多個轉換的,且帶有時間排程設定的 轉換集合,有向圖結構。

ETL Job檔案的擴充名為

.kjb

【Kettle 入門 Windows10 CentOS7】Kettle-8.2.0 入門基礎 2019.10.31簡介資源PDI 構架核心概念Kitchen指令行選項部署案例資源庫/存儲庫調優

二者差別:

  • Transformation是Job的組成部分。
  • Job的每一個步驟都需要等待前面的步驟執行完畢後,才會執行——控制依賴。而Transformation則是全部啟動,每個step都是一個單獨的線程

變量

根據作用範圍,定義為2類:環境變量,Kettle變量

環境變量:在所有使用JVM允許的Application中可見。使用Set environment variables設定。唯一問題是,如果在同一個PDI Server 中執行多個 Job 同時使用/改變一個 環境變量時,可能會産生沖突。

Kettle變量:用于在一個小的動态範圍内,存儲少量資訊——局部變量, 作用範圍在一個Job或轉換,也可以是 父工作、祖父工作 或 根工作,使用 Set variable。

Kitchen指令行選項

kitchen.bat | kitchen.sh -options | /options 均可。

-option=? | -option:? | -option ? 均可。

/rep        : Repository name 資源庫名(任務所在庫)
/user       : Repository username 帳号
/pass       : Repository password 密碼
/job        : The name of the job to launch 任務名
/dir        : The directory (dont forget the leading /)
/file       : The filename (Job XML) to launch 任務檔案路徑
/level      : The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing) 日志級别
/logfile    : The logging file to write to 日志寫出路徑
/listdir    : List the directories in the repository 列出資源庫中的目錄s
/listjobs   : List the jobs in the specified directory 列出指定目錄下的任務s
/listrep    : List the available repositories 列出可擷取的資源庫
/norep      : Do not log into the repository 不記錄日志在資源庫中
/version    : show the version, revision and build date 顯示版本
/param      : Set a named parameter <NAME>=<VALUE>. For example -param:FOO=bar 設定參數
/listparam  : List information concerning the defined parameters in the specified job 列出參數資訊
/export     : Exports all linked resources of the specified job. The argument is the name of a ZIPfile. 導出所有與指定任務關聯的資源為一個ZIP檔案
           

執行執行個體:

kitchen.bat /norep -file=D:/kettledata/mysal2orcle.kjb >> kitchen_%date:~0,10%.log

解析:Kitchen執行器 執行 路徑為D:/kettledata/mysal2orcle.kjb的任務,将結果輸出到 kitchen_%date:~0,10%.log 檔案中

部署

Windows

提前準備:8.2版本,pdi-ce-8.2.0.0-342.zip【已安裝Java 1.8】

一般情況下,均是在 Windows環境下,進行ETL Job編寫,然後連接配接至遠端Carte Server執行。

1.安裝JDK 1.8版本,2.解壓 pdi-ce-8.2.0.0-342.zip 至合适路徑,3.輕按兩下 Spoon.bat 啟動圖形化界面。

Linux

提前準備:8.2版本,pdi-ce-8.2.0.0-342.zip【已安裝Java 1.8】

1.安裝包上傳到伺服器解壓。2.偷懶》将Windows下的 目前使用者家目錄下的 .kettle目錄拷貝至linux的目前使用者家目錄下。

指令執行個體:運作資料庫資源庫中的轉換:

./pan.sh -rep=my_repo -user=admin -pass=admin -trans=stu1tostu2 -dir=/

-rep:資源庫名稱,-user:資源庫使用者名,-pass:資源庫密碼,-trans:運作轉換名稱,-dir:轉換檔案所在資源庫目錄

叢集部署

1.修改 data-integration/pwd 目錄下的配置檔案.

<!-- 1.主伺服器配置檔案 carte-config-master-8080.xml -->
<slaveserver>
    <name>master</name>
    <hostname>hadoop102</hostname>
    <port>8080</port>
    <master>Y</master>
    <username>cluster</username>
    <password>cluster</password>
</slaveserver>

<!-- 2.從伺服器配置檔案 carte-config-8081.xml -->
<masters>
    <slaveserver>
      <name>master</name>
      <hostname>hadoop102</hostname>
      <port>8080</port>
      <username>cluster</username>
      <password>cluster</password>
      <master>Y</master>
    </slaveserver>
</masters>
<report_to_masters>Y</report_to_masters>
<slaveserver>
    <name>slave1</name>
    <hostname>hadoop103</hostname>
    <port>8081</port>
    <username>cluster</username>
    <password>cluster</password>
    <master>N</master>
</slaveserver>

<!-- 3.從伺服器配置檔案 carte-config-8082.xml -->
<masters>
    <slaveserver>
      <name>master</name>
      <hostname>hadoop102</hostname>
      <port>8080</port>
      <username>cluster</username>
      <password>cluster</password>
      <master>Y</master>
    </slaveserver>
</masters>
<report_to_masters>Y</report_to_masters>
<slaveserver>
    <name>slave2</name>
    <hostname>hadoop104</hostname>
    <port>8082</port>
    <username>cluster</username>
    <password>cluster</password>
    <master>N</master>
</slaveserver>
           

2.xsync分發整個安裝目錄至 hadoop103 hadoop104

3.分别啟動程序:

carte.sh hadoop102 8080

carte.sh hadoop103 8081

carte.sh hadoop104 8082

4.通路Web頁面:http://hadoop102:8080

案例

1. RDBMS --> RDBMS Trans

MySQL–》MySQL

需求:将stu1的資料按id同步到stu2,stu2有相同id則更新資料

# 表1
create database kettle;
use kettle;
create table stu1(id int,name varchar(20),age int);
create table stu2(id int,name varchar(20));

insert into stu1 values(1001,'zhangsan',20),(1002,'lisi',18), (1003,'wangwu',23);
insert into stu2 values(1001,'wukong');
           
  1. 檔案——》建立——》轉換(Ctrl+N)
  2. 左側核心對象·輸入和輸出中,拉出 表輸入 和 插入/更新
  3. 輕按兩下 表輸入 對象,填寫 MySQL 配置,測試成功
  4. 摁住 Shift 左鍵點選 表輸入 ——》連線至 插入 / 更新
  5. 輕按兩下 插入/更新 對象,點選 擷取和更新字段 按鈕,再填寫 更新字段,查詢關鍵字相關配置
  6. 儲存轉換(Ctrl+S),啟動(F9)
  7. 去 mysql 查詢轉換運作結果【執行前,需要先将 連結 MySQL 資料庫的 JDBC驅動.jar 放入 lib目錄下】
【Kettle 入門 Windows10 CentOS7】Kettle-8.2.0 入門基礎 2019.10.31簡介資源PDI 構架核心概念Kitchen指令行選項部署案例資源庫/存儲庫調優

2. R --> R Job

需求:使用 Job 執行案例1的 Transformation,然後再額外在表student2中添加一條資料。

  1. 檔案——》建立——》作業(Ctrl+Alt+N)
  2. 左側核心對象·通用和腳本中,拉出 Start,Dummy(什麼也不做),轉換,SQL
  3. 輕按兩下 Start,類型選擇 不需要定時
  4. 輕按兩下 轉換,點選浏覽,指定 轉換檔案(案例1.ktr)路徑。
  5. 輕按兩下 SQL,資料庫連接配接選擇 已設定的 MySQL,編寫 SQL腳本
  6. 儲存轉換(Ctrl+S),啟動(F9)
  7. 去 mysql 查詢轉換運作結果
【Kettle 入門 Windows10 CentOS7】Kettle-8.2.0 入門基礎 2019.10.31簡介資源PDI 構架核心概念Kitchen指令行選項部署案例資源庫/存儲庫調優

3. Hive --> HDFS Trans

需求:将hive表的資料輸出到hdfs的一個文本檔案中。

預先配置

  1. 修改Plugin配置,修改data-integration\plugins\pentaho-big-data-plugin\plugin.properties,

    設定 active.hadoop.configuration=hdp26,并将 叢集上的同名配置檔案拷貝至

    data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp26下進行覆寫

  2. 在Spoon.bat中第119行後面添加參數

    "-DHADOOP_USER_NAME=atguigu" "-Dfile.encoding=UTF-8"

  3. 啟動虛拟機相關服務:
    # HDFS 分别在NN RM節點執行相應指令
    start-hdfs.sh
    start-yarn.sh
    # hbase Master RegionServer
    start-hbase.sh
    # zookeeper
    zkServer.sh start
    # hiveserver2 jdbc 服務
    # 不建議 hive --service hiveserver2 &
    hiveserver2
               

建立 Transformation.ktr 檔案

  1. 檔案——》建立——》轉換(Ctrl+N)
  2. 左側核心對象拉出:輸入·表輸入x2,輸出·文本檔案輸出,轉換·排序記錄x2·字段選擇,連接配接·記錄集連接配接
  3. 輕按兩下表輸入,建立資料庫連接配接,一般–> Hadoop Hive 2,設定完整選項。使用者名為Linux使用者名(或者beeline檢測HiveServer2 連接配接時輸入的使用者名),密碼為空。點選完成,再輸入SQL語句,然後點選預覽。dept與emp兩表同
  4. 摁住shift 連接配接表輸入與排序記錄與記錄集連接配接,對排序記錄輕按兩下設定,或者不設定均可。
  5. 設定記錄集連接配接,條件為 dept.no = dept.no。
  6. 輕按兩下字段選擇,随意選擇,想要看到的最終結果字段。
  7. 輕按兩下文本檔案輸出,字段頁籤——點選最小寬度,否則有可能因為 某些字段的長度太大而報錯。再點檔案頁籤,點選浏覽,将 Location 選擇為 HDFS,New一個 Hadoop Cluster,設定好 NN與RM,ZK等等,測試連接配接成功。出來設定檔案名,及擴充名,再點選内容頁籤,将原有的分隔符删除,點選插入TAB按鈕,使用

    /t

    來分隔字段。
  8. 儲存,運作,結果為:
deptno	empno	ename	sal
   20	7369	SMITH	800
   20	7369	SMITH	800
   30	7499	ALLEN	1600
   30	7521	WARD	1250
   30	7499	ALLEN	1600
   30	7521	WARD	1250
           
【Kettle 入門 Windows10 CentOS7】Kettle-8.2.0 入門基礎 2019.10.31簡介資源PDI 構架核心概念Kitchen指令行選項部署案例資源庫/存儲庫調優

4.HDFS --> HBase Trans

需求:讀取案例3的結果——hdfs上的檔案,并将sal大于1000的資料儲存到hbase中

預先配置:進入HBase(hbase shell),create ‘people’,‘info’。

【Kettle 入門 Windows10 CentOS7】Kettle-8.2.0 入門基礎 2019.10.31簡介資源PDI 構架核心概念Kitchen指令行選項部署案例資源庫/存儲庫調優
  1. 設定輸入·文本檔案輸入,檔案頁籤選擇浏覽,HDFS,選擇全部檔案,選擇輸入檔案output.test;内容頁籤設定分隔符,删除分号,insert TAB,檔案類型選擇 CSV;字段頁籤,點選擷取字段,看情況選擇Minimal width,結束
  2. 設定流程·過濾記錄 | 空操作,輕按兩下過濾記錄,點選左邊的黑框,選擇字段,中間的黑框條件,右邊的2個黑框一個是比較字段,一個是比較一個值,點選比較值黑框輸入值,點選右上角+号。點選确定按鈕。
  3. 設定Big Data·HBase output,Configure Connection頁籤,設定Hadoop Cluster為HDFS,浏覽本地的HBase-site.xml檔案。再點選 Create/Edit mappings,建立 HDFS檔案内容至 HBase 列的映射關系,以及RowKey的映射選取,并設定為 HBase哪個表的 XXX 映射,XXX自行取名。先選取HBase Table name,在命名此 Mapping 名稱,再點選 Get incoming fields 擷取字段,選擇Rowkey,設定Column 名稱 類型,再點選Save Mapping,最後回到 配置連接配接頁籤,點選Get table names,選擇 HBase表,再點選 Get mapping for the specifiedtable 按鈕,擷取這個表的Mapping檔案,左側 Mapping Name下拉選擇,剛剛設定好的Mapping 名稱。點選确定。結束

資源庫/存儲庫

主要用來,跨平台,協同 生成,處理,使用 ETL Job 、Transformation。

分為2種,一種 Database Repository,資料庫存儲 Job與Transformation;另一種 File Repository,不需要使用者名密碼就可以通路,但是跨平台使用較為麻煩。

Database Repository

點選右上角Connect,Database connect 可以選擇MySQL,Kettle自動創庫創表,一步一步填寫即可。建立完成後,點選立即連接配接,或者點選右上角connect選擇剛剛建立的Database Repository,預設通路賬号密碼為admin。

連接配接完成後,Spoon就會關閉所有未連接配接時建立的 Job 與 Transformation,相當于建立一個 Spoon-Database Repo版的用戶端。此時,檔案 --> 打開,就是打開 Database Repository,查詢MySQL中存儲的 Job 與 Transformation,并且,此時建立的Job 或 Transformation 存儲的話,也是存儲至 MySQL 中。

File Repository

以本地檔案系統建立的 Repository,過程與 Database Repository建立相同,隻是跨平台使用比較麻煩。

調優

Spoon.sh/bat 參數
JVM
-Xmx2048m JVM最大記憶體空間
-Xms1024m JVM初始化記憶體空間
-Xmn2g JVM年輕代記憶體空間,建議為3/8堆記憶體
送出Commit記錄數 預設1000,可根據總資料量增加 ↑
能用SQL語句就用SQL 盡量不使用 Kettle 的 Step 如 split field
update轉換為delete與insert 盡量不使用 update
盡量truncate 盡量不使用 delete

其他:

盡量使用資料庫原生函數執行裝載Load ;

盡量縮小輸入的資料集的大小;

盡量使用資料庫連接配接池;

插入大量資料的時候盡量把索引删掉;

繼續閱讀