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安裝
-
安裝包上傳到伺服器,並解壓
注意:
-
把mysql驅動拷貝到lib目錄下
-
將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頁面
案例:讀取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步驟)。