kettle使用


Kettle的安裝及簡單使用

一、kettle概述

1、什么是kettle

Kettle是一款開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,綠色無需安裝,數據抽取高效穩定。

2、Kettle工程存儲方式

(1)以XML形式存儲

(2)以資源庫方式存儲(數據庫資源庫和文件資源庫)

3、Kettle的兩種設計

image.png

4、Kettle的組成

image.png

5、kettle特點

image.png


二、kettle安裝部署和使用

Windows下安裝

(1)概述

在實際企業開發中,都是在本地環境下進行kettle的job和Transformation開發的,可以在本地運行,也可以連接遠程機器運行

(2)安裝步驟

1、安裝jdk

2、下載kettle壓縮包,因kettle為綠色軟件,解壓縮到任意本地路徑即可

3、雙擊Spoon.bat,啟動圖形化界面工具,就可以直接使用了

案例1:MySQL to MySQL

把stu1的數據按id同步到stu2,stu2有相同id則更新數據

1、在mysql中創建testkettle數據庫,並創建兩張表

create database testkettle;

use testkettle;

create table stu1(id int,name varchar(20),age int);

create table stu2(id int,name varchar(20));

2、往兩張表中插入一些數據

insert into stu1 values(1001,'zhangsan',20),(1002,'lisi',18), (1003,'wangwu',23);

insert into stu2 values(1001,'wukong');

3、把pdi-ce-8.2.0.0-342.zip文件拷貝到win環境中指定文件目錄,解壓后雙擊Spoon.bat,啟動圖形化界面工具,就可以使用了

image.png

主界面:

image.png

在kettle中新建轉換--->輸入--->表輸入-->表輸入雙擊

image.png

在data-integration\lib文件下添加mysql驅動

image.png

在數據庫連接欄目點擊新建,填入mysql相關配置,並測試連接

image.png

建立連接后,選擇剛剛建好的連接,填入SQL,並預覽數據:

image.png

以上說明stu1的數據輸入ok的,現在我們需要把輸入stu1的數據同步到stu2輸出的數據

image.png

注意:拖出來的線條必須是深灰色才關聯成功,若是淺灰色表示關聯失敗

image.png

轉換之前,需要做保存

image.png

執行成功之后,可以在mysql查看,stu2的數據

mysql> select * from stu2;
+------+----------+
| id   | name     |
+------+----------+
| 1001 | zhangsan |
| 1002 | lisi     |
| 1003 | wangwu   |
+------+----------+
3 rows in set (0.00 sec)

案例2:使用作業執行上述轉換,並且額外在表stu2中添加一條數據

1、新建一個作業

image.png

2、按圖示拉取組件

image.png

3、雙擊Start編輯Start

image.png

4、雙擊轉換,選擇案例1保存的文件

image.png

5、在mysql的stu1中插入一條數據,並將stu2中id=1001的name改為wukong

mysql> insert into stu1 values(1004,'stu1',22);
Query OK, 1 row affected (0.01 sec)

mysql> update stu2 set name = 'wukong' where id = 1001;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

6、雙擊SQL腳本編輯

image.png

7、加上Dummy,如圖所示:

image.png

8、保存並執行

image.png

9、在mysql數據庫查看stu2表的數據

mysql> select * from stu2;
+------+----------+
| id   | name     |
+------+----------+
| 1001 | zhangsan |
| 1002 | lisi     |
| 1003 | wangwu   |
| 1004 | stu1     |
| 1005 | kettle   |
+------+----------+
5 rows in set (0.00 sec)

案例3:將hive表的數據輸出到hdfs

1、因為涉及到hive和hbase(后續案例)的讀寫,需要修改相關配置文件

修改解壓目錄下的data-integration\plugins\pentaho-big-data-plugin下的plugin.properties,設置active.hadoop.configuration=hdp26,26是指用hdp26文件夾里面的配置,從我們的hadoop,hive,hbase中將這些配置拷貝到data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp26下

image.png

2、啟動hadoop集群、hiveserver2服務

​ 可以用來監控日志

3、進入hive shell,創建kettle數據庫,並創建dept、emp表

create database kettle;

use kettle;

CREATE TABLE dept(
    deptno int,
    dname string,
    loc string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

CREATE TABLE emp(
    empno int,
    ename string,
    job string,
    mgr int,
    hiredate string,
    sal double,
    comm int,
    deptno int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

4、插入數據

insert into dept values(10,'accounting','NEW YORK'),(20,'RESEARCH','DALLAS'),(30,'SALES','CHICAGO'),(40,'OPERATIONS','BOSTON');

insert into emp values(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20),(7499,'ALLEN','SALESMAN',7698,'1980-12-17',1600,300,30),(7521,'WARD','SALESMAN',7698,'1980-12-17',1250,500,30),(7566,'JONES','MANAGER',7839,'1980-12-17',2975,NULL,20);

5、按下圖建立流程圖

image.png

  • 表輸入
image.png
  • 表輸入2
image.png
  • 排序記錄
image.png
  • 記錄集連接
image.png
  • 字段選擇
image.png image.png
  • 文本文件輸出
image.png image.png

6、保存並運行查看hdfs

  • 運行
image.png
  • 查看HDFS文件
image-20210129215501794.png

案例4:讀取hdfs文件並將sal大於1000的數據保存到hbase中

1、在HBase中創建一張people表

hbase(main):004:0> create 'people','info'

2、按下圖建立流程圖

image.png

  • 文本文件輸入
image.png image.png
  • 設置過濾記錄
image.png
  • 設置HBase output

    編輯hadoop連接,並配置zookeeper地址

image.png image.png
  • 執行轉換
image.png
  • 查看hbase people表的數據

    scan 'people'
    

    注意:若報錯沒有權限往hdfs寫文件,在Spoon.bat中第119行添加參數

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


三、創建資源庫

1、數據庫資源庫

數據庫資源庫是將作業和轉換相關的信息存儲在數據庫中,執行的時候直接去數據庫讀取信息,方便跨平台使用

  • 在MySQL中創建kettle數據庫

    mysql> create database kettle;
    Query OK, 1 row affected (0.01 sec)
    
  • 點擊右上角connect,選擇Other Resporitory

image.png
  • 選擇Database Repository
image.png
  • 建立新連接
image.png image.png image.png
  • 填好之后,點擊finish,會在指定的庫中創建很多表,至此數據庫資源庫創建完成
image.png
  • 連接資源庫

    默認賬號密碼為admin

image.png
  • 將之前做過的轉換導入資源庫

    • 選擇從xml文件導入

      image.png
    • 點擊保存,選擇存儲位置及文件名

    image.png
    • 查看MySQL中kettle庫中的R_TRANSFORMATION表,觀察轉換是否保存

      image.png

2、文件資源庫

將作業和轉換相關的信息存儲在指定的目錄中,其實和XML的方式一樣

創建方式跟創建數據庫資源庫步驟類似,只是不需要用戶密碼就可以訪問,跨

平台使用比較麻煩

  • 選擇connect

  • 點擊add后點擊Other Repositories

  • 選擇File Repository

  • 填寫信息

image.png

四、 Linux下安裝使用

1、單機

  • jdk安裝

  • 安裝包上傳到服務器,並解壓

    注意:

    1. 把mysql驅動拷貝到lib目錄下

    2. 將windows本地用戶家目錄下的隱藏目錄C:\Users\自己用戶名\.kettle 目錄,

      整個上傳到linux的用戶的家目錄下,root用戶的家目錄為/root/

  • 運行數據庫資源庫中的轉換:

    cd /usr/local/soft/data-integration
    ./pan.sh -rep=my_repo -user=admin -pass=admin -trans=tran1
    

    參數說明:

    ​ -rep 資源庫名稱

    ​ -user 資源庫用戶名

    ​ -pass 資源庫密碼

    ​ -trans 要啟動的轉換名稱

    ​ -dir 目錄(不要忘了前綴 /)(如果是以ktr文件運行時,需要指定ktr文件的路徑)

image.png
  • 運行資源庫里的作業:

    記得把作業里的轉換變成資源庫中的資源

    記得把作業也變成資源庫中的資源

    cd /usr/local/soft/data-integration
    mkdir logs
    ./kitchen.sh -rep=my_repo -user=admin -pass=admin -job=job1 -logfile=./logs/log.txt
    

    參數說明:
    -rep - 資源庫名
    -user - 資源庫用戶名
    -pass – 資源庫密碼
    -job – job名
    -dir – job路徑(當直接運行kjb文件的時候需要指定)
    -logfile – 日志目錄

    image.png

2、 集群模式

  • 准備三台服務器

    master作為Kettle主服務器,服務器端口號為8080,

    node1和node2作為兩個子服務器,端口號分別為8081和8082。

  • 安裝部署jdk

  • hadoop完全分布式環境搭建

  • 上傳並解壓kettle的安裝包至/usr/local/soft/目錄下

  • 進到/usr/local/soft/data-integration/pwd目錄,修改配置文件

    • 修改主服務器配置文件carte-config-master-8080.xml

      <slaveserver>
          <name>master</name>
          <hostname>master</hostname>
          <port>8080</port>
          <master>Y</master>
          <username>cluster</username>
          <password>cluster</password>
      </slaveserver>
      
    • 修改從服務器配置文件carte-config-8081.xml

      <masters>
          <slaveserver>
            <name>master</name>
            <hostname>master</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>node1</hostname>
          <port>8081</port>
          <username>cluster</username>
          <password>cluster</password>
          <master>N</master>
      </slaveserver>
      
    • 修改從配置文件carte-config-8082.xml

      <masters>
          <slaveserver>
            <name>master</name>
            <hostname>master</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>node2</hostname>
          <port>8082</port>
          <username>cluster</username>
          <password>cluster</password>
          <master>N</master>
      </slaveserver>
      
  • 分發整個kettle的安裝目錄,通過scp命令

  • 分發/root/.kettle目錄到node1、node2

  • 啟動相關進程,在master,node1,node2上分別執行

[root@master]# ./carte.sh master 8080
[root@node1]# ./carte.sh node1 8081
[root@node2]# ./carte.sh node2 8082
  • 訪問web頁面

http://master:8080


案例:讀取hive中的emp表,根據id進行排序,並將結果輸出到hdfs上

注意:因為涉及到hive和hbase的讀寫,需要修改相關配置文件。

修改解壓目錄下的data-integration\plugins\pentaho-big-data-plugin下的plugin.properties,設置active.hadoop.configuration=hdp26,並將如下配置文件拷貝到data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp26下

image.png
  • 創建轉換,編輯步驟,填好相關配置

    直接使用trans1

  • 創建子服務器,填寫相關配置,跟集群上的配置相同

image.png image.png image.png
  • 創建集群schema,選中上一步的幾個服務器

    image.png
  • 對於要在集群上執行的步驟,右鍵選擇集群,選中上一步創建的集群schema

    image.png
  • 創建Run Configuration,選擇集群模式

    image.png
  • 直接運行,選擇集群模式運行

    image-20210130145846848

五、調優

1、調整JVM大小進行性能優化,修改Kettle根目錄下的Spoon腳本。

img

參數參考:

-Xmx2048m:設置JVM最大可用內存為2048M。

-Xms1024m:設置JVM促使內存為1024m。此值可以設置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內存。

-Xmn2g:設置年輕代大小為2G。整個JVM內存大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。

-Xss128k:設置每個線程的堆棧大小。JDK5.0以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。更具應用的線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。

2、 調整提交(Commit)記錄數大小進行優化,Kettle默認Commit數量為:1000,可以根據數據量大小來設置Commitsize:1000~50000

3、盡量使用數據庫連接池;

4、盡量提高批處理的commit size;

5、盡量使用緩存,緩存盡量大一些(主要是文本文件和數據流);

6、Kettle是Java做的,盡量用大一點的內存參數啟動Kettle;

7、可以使用sql來做的一些操作盡量用sql;

Group , merge , stream lookup,split field這些操作都是比較慢的,想辦法避免他們.,能用sql就用sql;

8、插入大量數據的時候盡量把索引刪掉;

9、盡量避免使用update , delete操作,尤其是update,如果可以把update變成先delete, 后insert;

10、能使用truncate table的時候,就不要使用deleteall row這種類似sql合理的分區,如果刪除操作是基於某一個分區的,就不要使用delete row這種方式(不管是deletesql還是delete步驟),直接把分區drop掉,再重新創建;

11、盡量縮小輸入的數據集的大小(增量更新也是為了這個目的);

12、盡量使用數據庫原生的方式裝載文本文件(Oracle的sqlloader, mysql的bulk loader步驟)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM