1. 程式人生 > 其它 >Kettle的安裝及簡單使用

Kettle的安裝及簡單使用

Kettle的安裝及簡單使用

目錄

一、kettle概述

1、什麼是kettle

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

2、Kettle工程儲存方式

(1)以XML形式儲存

(2)以資源庫方式儲存(資料庫資源庫和檔案資源庫)

3、Kettle的兩種設計

4、Kettle的組成

5、kettle特點


二、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,啟動圖形化介面工具,就可以使用了

主介面:

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

在data-integration\lib檔案下新增mysql驅動

在資料庫連線欄目點選新建,填入mysql相關配置,並測試連線

建立連線後,選擇剛剛建好的連線,填入SQL,並預覽資料:

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

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

轉換之前,需要做儲存

執行成功之後,可以在mysql檢視,stu2的資料

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

案例2:使用作業執行上述轉換,並且額外在表stu2中新增一條資料

1、新建一個作業

2、按圖示拉取元件

3、雙擊Start編輯Start

4、雙擊轉換,選擇案例1儲存的檔案

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指令碼編輯

7、加上Dummy,如圖所示:

8、儲存並執行

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,並將如下配置檔案拷貝到data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp26下

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 ',';

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 ',';

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、按下圖建立流程圖

  • 表輸入
  • 表輸入2
  • 排序記錄
  • 記錄集連線
  • 欄位選擇
  • 文字檔案輸出

6、儲存並執行檢視hdfs

  • 執行
  • 檢視HDFS檔案

案例4:讀取hdfs檔案並將sal大於1000的資料儲存到hbase中

1、在HBase中建立一張people表

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

2、按下圖建立流程圖

  • 文字檔案輸入
  • 設定過濾記錄
  • 設定HBase output

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

  • 執行轉換
  • 檢視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

  • 選擇Database Repository
  • 建立新連線
  • 填好之後,點選finish,會在指定的庫中建立很多表,至此資料庫資源庫建立完成
  • 連線資源庫

    預設賬號密碼為admin

  • 將之前做過的轉換匯入資源庫

    • 選擇從xml檔案匯入

    • 點選儲存,選擇儲存位置及檔名

    • 檢視MySQL中kettle庫中的R_TRANSFORMATION表,觀察轉換是否儲存

2、檔案資源庫

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

建立方式跟建立資料庫資源庫步驟類似,只是不需要使用者密碼就可以訪問,跨

平臺使用比較麻煩

  • 選擇connect

  • 點選add後點擊Other Repositories

  • 選擇File Repository

  • 填寫資訊


四、 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檔案的路徑)

  • 執行資源庫裡的作業:

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

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

    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 – 日誌目錄

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下

  • 建立轉換,編輯步驟,填好相關配置

    直接使用trans1

  • 建立子伺服器,填寫相關配置,跟叢集上的配置相同

  • 建立叢集schema,選中上一步的幾個伺服器

  • 對於要在叢集上執行的步驟,右鍵選擇叢集,選中上一步建立的叢集schema

  • 建立Run Configuration,選擇叢集模式

  • 直接執行,選擇叢集模式執行


五、調優

1、調整JVM大小進行效能優化,修改Kettle根目錄下的Spoon指令碼。

引數參考:

-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步驟)。