kettle案例-----linux使用kettle

我們之前學習的kettle操作都是在windows中進行可視化的操作,但是在使用過程中發現一些問題。
比如我們的數據文件是放在linux服務器中的,如果要清洗則需要把它們下載到本地,這樣需要耗費一些時間,尤其是數據文件比較大時。
解決方案就是 我們直接在linux服務器中運行kettle進行抽取。

Kettle可以在Window、Linux、Unix上運行,綠色無需安裝,數據抽取高效穩定,不過在使用之前需要準備環境。

準備java環境

使用命令查看java環境

java -version
  • 1

如圖:

需要注意的是不建議使用默認安裝的openjdk,否則後續會有很多莫名其妙的問題。

如果沒有安裝JDK可以參考如下帖子:
linux軟件(一)—CentOS安裝jdk

從上面可以看到,在zzq用戶下已經安裝了java jdk,版本是1.8.0_141,我們看一下kettle的最低版本要求,編輯查看spoon.bat可以看到如圖

java的版本需求爲1.6.0_17,cognos用戶下的jdk版本在此之上,說明java環境已經符合。

上傳部署

利用SSH將本地可用的增加好jar包配置好的data-integration打包成data-integration.zip上傳到linux服務器(將整個文件夾上傳也可以)
我這裏使用的工具是Xftp如下圖:

使用unzip命令解壓data-integration.zip(如果上傳的是文件夾,忽略此步驟)

unzip data-integration.zip
  • 1

解壓成功如圖:

確保可執行權限

使用命令查看文件權限

ls -l  /data-integration
  • 1

如圖

從上面可以看出,此目錄下面的.sh文件都沒有執行權限(X),需要這個文件夾下面的所有.sh文件賦執行的權限
使用命令

chmod +x ./data-integration/*.sh
  • 1

再查看已經有執行權限了,如圖:

使用命令測試是否部署成功

./data-integration/kitchen.sh
  • 1

如果出現幫助信息則部署成功。

常用命令

ktr的運行:運行transformation文件是通過pan.sh來運行的。

打開cmd命令行窗口,轉到pan.sh所在的目錄,如/home/zzq/data-integration,然後執行文件的命令爲

./pan.sh -file=/home/zzq/work/test.ktr
  • 1

如果要輸出日誌則

./pan.sh -file=/home/zzq/work/test.ktr >> /home/zzq/log/kettle.log
  • 1

後臺模式運行使用

./pan.sh -file=/home/zzq/work/genotypeHiveLinux.ktr >> /home/zzq/log/kettle.log &
  • 1

kjb的運行:運行job文件是通過kitchen.sh來運行的。

打開cmd命令行窗口,轉到kitchen.sh所在的目錄,如/home/zzq/data-integration,然後執行文件的命令爲

./kitchen.sh -file=/home/zzq/work/test.kjb
  • 1

如果要輸出日誌則

./kitchen.sh -file=/home/zzq/work/test.kjb  >> /home/zzq/log/kettle.log
  • 1

配置參數:

Pan——轉換執行器

用來執行轉換。參數與Kitchen類似,如下。

1- -version顯示版本信息

2- -file=filename運行xml文件

3- -param:key=value指定命名參數

4- -log=logging filename 設置日誌文件

5- -level=logging level 設置日誌級別

Error:只顯示錯誤

Nothing:不顯示任何輸出

Minimal:只使用最少的記錄

Basic:這是默認的基本日誌記錄級別

Detailed:詳細的日誌輸出

Debug:以調試爲目的,非常詳細的輸出

Rowlevel:使用行級記錄,會產生大量的數據

返回狀態,Pan會基於執行狀況返回一個錯誤碼:

0:轉換執行成功
1:處理過程中發生錯誤
2:在裝載或者運行時發生意外的錯誤
3:不能初始化轉換
7:轉換不能從資源庫或xml中裝載
8:裝載步驟或插件錯誤(通常是裝載其中一個插件錯誤)
9:命令行用法錯誤

Kitchen——作業執行器

用來執行作業。這是一個命令行執行工具,參數說明如下。

1) -rep:Repositoryname任務包所在存儲名

2) -user:Repositoryusername執行人

3) -pass:Repositorypassword執行人密碼

4) -job:Thenameofthejobtolaunch任務包名稱

5) -dir:Thedirectory(don’tforgettheleading/or)

6) -file:Thefilename(JobXML)tolaunch

7) -level:Thelogginglevel(Basic,Detailed,Debug,Rowlevel,Error,Nothing)指定日誌級別

8) -log:Theloggingfiletowriteto指定日誌文件

9) -listdir:Listthedirectoriesintherepository列出指定存儲中的目錄結構。

10) -listjobs:Listthejobsinthespecifieddirectory列出指定目錄下的所有任務

11) -listrep:Listthedefinedrepositories列出所有的存儲

12) -norep:Don’tlogintotherepository不寫日誌

示例: 1. Windows 中多個參數以 / 分隔,key 和value之間以:分隔

作業存儲在文件

Kitchen.bat /level:Basic>D:\etl.log /file:F:\Kettledemo\email.kjb
  • 1

作業存儲在數據庫

Kitchen.bat /rep kettle /user admin /pass admin /job F_DEP_COMP
  • 1

(Rep的值爲數據庫資源庫ID)

Linux 中參數以 –分隔

作業存儲在文件

./kitchen.sh-file=/home/job/huimin.kjb >> /home/ log/kettle.log
  • 1

作業存儲在數據庫

./kitchen.sh -rep=kettle1 -user=admin -pass=admin -level=Basic -job=job
  • 1

測試運行轉換腳本

把ktr轉換腳本要清洗的文件的路徑修改成linux對應的路徑如下:

把ktr腳本上傳到work目錄中

使用命令運行

/home/zzq/data-integration/pan.sh -file=/home/zzq/work/genotypeHiveLinux.ktr >> /home/zzq/log/kettle.log &
  • 1

成功運行使用命令查看日誌:

tail -f -n 500 ./log/kettle.log
  • 1

可能遇到的問題

database type with plugin id [HIVE2] couldn’t be found

詳細報錯如下:

#######################################################################
WARNING:  no libwebkitgtk-1.0 detected, some features will be unavailable
    Consider installing the package with apt-get or yum.
    e.g. 'sudo apt-get install libwebkitgtk-1.0-0'
#######################################################################
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
12:06:05,243 INFO  [KarafBoot] Checking to see if org.pentaho.clean.karaf.cache is enabled
12:06:05,333 INFO  [KarafInstance] 
*******************************************************************************
*** Karaf Instance Number: 1 at /home/zzq/data-integration/./system/karaf/c ***
***   aches/pan/data-1                                                      ***
*** FastBin Provider Port:52901                                             ***
*** Karaf Port:8802                                                         ***
*** OSGI Service Port:9051                                                  ***
*******************************************************************************
一月 19, 2018 12:06:05 下午 org.apache.karaf.main.Main$KarafLockCallback lockAquired
信息: Lock acquired. Setting startlevel to 100
D:\kettle\data-integration\system\karaf/deploy does not exist, please create it.
Root path does not exist: /home/zzq/data-integration/D:\kettle\data-integration\system\karaf/deploy
Updating configuration from org.ops4j.pax.logging.cfg
Creating configuration from org.apache.activemq.server-default.cfg
Updating configuration from org.ops4j.pax.url.mvn.cfg
Updating configuration from org.apache.karaf.shell.cfg
Creating configuration from org.pentaho.caching-default.cfg
Creating configuration from org.apache.felix.fileinstall-deploy.cfg
12:06:08,902 ERROR [KarafLifecycleListener] Error in Feature Watcher
org.pentaho.osgi.api.IKarafFeatureWatcher$FeatureWatcherException: No IKarafFeatureWatcher service available
    at org.pentaho.di.osgi.KarafLifecycleListener$2.run(KarafLifecycleListener.java:141)
    at java.lang.Thread.run(Thread.java:748)
12:06:08,905 ERROR [KarafLifecycleListener] Error in Blueprint Watcher
org.pentaho.osgi.api.IKarafBlueprintWatcher$BlueprintWatcherException: No IKarafBlueprintWatcher service available
    at org.pentaho.di.osgi.KarafLifecycleListener$2.run(KarafLifecycleListener.java:157)
    at java.lang.Thread.run(Thread.java:748)
2018/01/19 12:06:08 - Pan - 開始運行.
處理過程停止,由於錯誤:
錯誤從XML文件讀取轉換
錯誤從XML文件讀取轉換
Unable to load database connection info from XML node
Unable to create new database interface
database type with plugin id [HIVE2] couldn't be found!
org.pentaho.di.core.exception.KettleXMLException: 
錯誤從XML文件讀取轉換
錯誤從XML文件讀取轉換
Unable to load database connection info from XML node
Unable to create new database interface
database type with plugin id [HIVE2] couldn't be found!
    at org.pentaho.di.trans.TransMeta.loadXML(TransMeta.java:3402)
    at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2758)
    at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2710)
    at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2687)
    at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2667)
    at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2632)
    at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2595)
    at org.pentaho.di.pan.Pan.main(Pan.java:397)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.pentaho.commons.launcher.Launcher.main(Launcher.java:92)
Caused by: org.pentaho.di.core.exception.KettleXMLException: 
錯誤從XML文件讀取轉換
Unable to load database connection info from XML node
Unable to create new database interface
database type with plugin id [HIVE2] couldn't be found!
    at org.pentaho.di.trans.TransMeta.loadXML(TransMeta.java:3384)
    ... 12 more
Caused by: org.pentaho.di.core.exception.KettleXMLException: 
Unable to load database connection info from XML node
Unable to create new database interface
database type with plugin id [HIVE2] couldn't be found!
    at org.pentaho.di.core.database.DatabaseMeta.<init>(DatabaseMeta.java:1013)
    at org.pentaho.di.trans.TransMeta.loadXML(TransMeta.java:2976)
    ... 12 more
Caused by: org.pentaho.di.core.exception.KettleXMLException: 
Unable to create new database interface
database type with plugin id [HIVE2] couldn't be found!
    at org.pentaho.di.core.database.DatabaseMeta.<init>(DatabaseMeta.java:977)
    ... 13 more
Caused by: org.pentaho.di.core.exception.KettleDatabaseException: 
database type with plugin id [HIVE2] couldn't be found!
    at org.pentaho.di.core.database.DatabaseMeta.findDatabaseInterface(DatabaseMeta.java:584)
    at org.pentaho.di.core.database.DatabaseMeta.getDatabaseInterface(DatabaseMeta.java:558)
    at org.pentaho.di.core.database.DatabaseMeta.<init>(DatabaseMeta.java:974)
    ... 13 more
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85

原因
我這裏是直接把windows中可用的data-integration複製過來在linux運行,按理說不會有問題,那麼應該是環境配置的問題,嘗試着運行spoon.sh使用命令

./data-integration/spoon.sh
  • 1

報錯java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons。

說明缺少可以加載lib包的環境,這也可能是導致無法讀取到xml數據庫配置的原因。
剛好我們注意到報錯代碼中有提醒:

#######################################################################
WARNING:  no libwebkitgtk-1.0 detected, some features will be unavailable
    Consider installing the package with apt-get or yum.
    e.g. 'sudo apt-get install libwebkitgtk-1.0-0'
#######################################################################
  • 1
  • 2
  • 3
  • 4
  • 5

解決方法
根據提示完成libwebkitgtk的安裝。
在centos版本中使用的命令爲:

yum install epel-release
yum install webkitgtk
  • 1
  • 2

安裝完後再運行命令

/home/zzq/data-integration/pan.sh -file=/home/zzq/work/genotypeHiveLinux.ktr >> /home/zzq/log/kettle.log &
  • 1

發現仍然報錯database type with plugin id [HIVE2] couldn’t be found,但是錯誤的原因已經改變了如下:

D:\kettle\data-integration\system\karaf/deploy does not exist, please create it.
Root path does not exist: /home/zzq/data-integration/D:\kettle\data-integration\system\karaf/deploy
  • 1
  • 2

經過排查Root path does not exist這是由於緩存文件造成的錯誤,kettle在windows上啓動運行後有緩存
根據日誌輸出可以找到緩存目錄

*******************************************************************************
*** Karaf Instance Number: 1 at /home/zzq/data-integration/./system/karaf/c ***
***   aches/pan/data-1                                                      ***
*** FastBin Provider Port:52901                                             ***
*** Karaf Port:8802                                                         ***
*** OSGI Service Port:9051                                                  ***
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

緩存目錄有兩個分別爲:
/home/zzq/data-integration/./system/karaf/caches

/home/zzq/data-integration/./system/karaf/data
將以上兩個目錄刪除後重新運行命令即可。

rm -rf  /home/zzq/data-integration/./system/karaf/caches
rm -rf  /home/zzq/data-integration/./system/karaf/data
/home/zzq/data-integration/pan.sh -file=/home/zzq/work/genotypeHiveLinux.ktr >> /home/zzq/log/kettle.log &
  • 1
  • 2
  • 3

發現已經能夠成功運行如下:

可能遇到的問題

No suitable driver found for jdbc:hive2
詳細報錯如下:

信息: New Caching Service registered
2018/01/19 15:25:01 - Pan - 開始運行.
2018/01/19 15:25:01 - genotypeHiveLinux - 爲了轉換解除補丁開始  [genotypeHiveLinux]
2018/01/19 15:25:01 - 執行SQL腳本.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : An error occurred, processing will be stopped: 
2018/01/19 15:25:01 - 執行SQL腳本.0 - Error occurred while trying to connect to the database
2018/01/19 15:25:01 - 執行SQL腳本.0 - 
2018/01/19 15:25:01 - 執行SQL腳本.0 - Error connecting to database: (using class org.apache.hive.jdbc.HiveDriver)
2018/01/19 15:25:01 - 執行SQL腳本.0 - No suitable driver found for jdbc:hive2://192.168.30.253:10000/default
2018/01/19 15:25:01 - 執行SQL腳本 2.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : An error occurred, processing will be stopped: 
2018/01/19 15:25:01 - 執行SQL腳本 2.0 - Error occurred while trying to connect to the database
2018/01/19 15:25:01 - 執行SQL腳本 2.0 - 
2018/01/19 15:25:01 - 執行SQL腳本 2.0 - Error connecting to database: (using class org.apache.hive.jdbc.HiveDriver)
2018/01/19 15:25:01 - 執行SQL腳本 2.0 - No suitable driver found for jdbc:hive2://192.168.30.253:10000/default
2018/01/19 15:25:01 - 執行SQL腳本.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : 錯誤初始化步驟[執行SQL腳本]
2018/01/19 15:25:01 - 執行SQL腳本 2.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : 錯誤初始化步驟[執行SQL腳本 2]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

原因很明顯,就是沒有hive的驅動包導致的。
這裏需要注意的是hive2和hive的版本問題,也就是說
Connection URL

jdbc:hive2:// 使用的驅動是org.apache.hive.jdbc.HiveDriverjdbc:hive:// 使用的驅動是org.apache.hadoop.hive.jdbc.HiveDriver
  • 1
  • 2

詳細信息可以參考文章:
hadoop組件—數據倉庫(五)—通過JDBC連接hive的thrift或者hiveserver2

如果確認提示和配置沒問題,那麼還有另外一個原因就是缺少jar包。

這裏有些奇怪的是data-integration文件夾我們是從windows系統中可用的版本直接打包過來的,按理說不會缺少jar包。
檢查了一下 我們確實也在路徑
data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp25\lib
下放置了hive相關的jar包。
參考文章的方式一
kettle案例七連接hive–抽取mongodb的數據保存到hive

但是 奇怪的是linux系統運行pan的時候 並沒有加載到這些jar包。經過排查,linux系統需要把hive相關的jar包再放置一份到data-integration\lib中。
如下:

再次嘗試運行成功解決。

可能遇到的問題

Caused by: java.net.UnknownHostException: host250
詳細報錯如下:

18/01/19 15:46:39 - Hadoop File Output.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : Couldn't open file hdfs://hdfs@host250:8020/user/hive/warehouse/genotype.txt
2018/01/19 15:46:39 - Hadoop File Output.0 - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : java.lang.reflect.UndeclaredThrowableException
2018/01/19 15:46:39 - Hadoop File Output.0 -    at com.sun.proxy.$Proxy66.getFileSystem(Unknown Source)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at com.pentaho.big.data.bundles.impl.shim.hdfs.HadoopFileSystemFactoryImpl.create(HadoopFileSystemFactoryImpl.java:94)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at Proxy7c377dcb_639a_42dd_9255_bad6188e939c.create(Unknown Source)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.pentaho.bigdata.api.hdfs.impl.HadoopFileSystemLocatorImpl.getHadoopFilesystem(HadoopFileSystemLocatorImpl.java:59)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at Proxyb5661c76_80f5_4521_8dfc_bf38de0a8a38.getHadoopFilesystem(Unknown Source)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at Proxy638011c2_3385_4e2e_a7b0_c5576ed09efd.getHadoopFilesystem(Unknown Source)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.pentaho.big.data.impl.vfs.hdfs.HDFSFileProvider.doCreateFileSystem(HDFSFileProvider.java:114)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider.getFileSystem(AbstractOriginatingFileProvider.java:102)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:80)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:64)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:790)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:712)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.pentaho.di.core.vfs.KettleVFS.getFileObject(KettleVFS.java:152)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.pentaho.di.core.vfs.KettleVFS.getFileObject(KettleVFS.java:107)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.pentaho.di.trans.steps.textfileoutput.TextFileOutput.getFileObject(TextFileOutput.java:1032)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.pentaho.di.trans.steps.textfileoutput.TextFileOutput.openNewFile(TextFileOutput.java:700)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.pentaho.di.trans.steps.textfileoutput.TextFileOutput.init(TextFileOutput.java:792)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.pentaho.di.trans.step.StepInitThread.run(StepInitThread.java:69)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at java.lang.Thread.run(Thread.java:748)
2018/01/19 15:46:39 - Hadoop File Output.0 - Caused by: java.lang.reflect.InvocationTargetException
2018/01/19 15:46:39 - Hadoop File Output.0 -    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at java.lang.reflect.Method.invoke(Method.java:498)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.pentaho.hadoop.shim.HadoopConfiguration$1.invoke(HadoopConfiguration.java:145)
2018/01/19 15:46:39 - Hadoop File Output.0 -    ... 19 more
2018/01/19 15:46:39 - Hadoop File Output.0 - Caused by: java.lang.IllegalArgumentException: java.net.UnknownHostException: host250
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:411)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.hadoop.hdfs.NameNodeProxies.createNonHAProxy(NameNodeProxies.java:311)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.hadoop.hdfs.NameNodeProxies.createProxy(NameNodeProxies.java:176)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:688)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:629)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:159)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2761)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:99)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2795)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2777)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:386)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:179)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.pentaho.hadoop.shim.common.CommonHadoopShim.getFileSystem(CommonHadoopShim.java:202)
2018/01/19 15:46:39 - Hadoop File Output.0 -    at org.pentaho.hadoop.shim.common.delegating.DelegatingHadoopShim.getFileSystem(DelegatingHadoopShim.java:96)
2018/01/19 15:46:39 - Hadoop File Output.0 -    ... 24 more
2018/01/19 15:46:39 - Hadoop File Output.0 - Caused by: java.net.UnknownHostException: host250
2018/01/19 15:46:39 - Hadoop File Output.0 -    ... 38 more
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

原因是我們在配置中使用了host名稱而不是使用的ip,所以如果linux系統沒設置host會對應不到。

解決方式設置host即可。

Linux主機名的相關配置文件就是/etc/hosts;
hosts文件的格式如下:
IP地址 主機名/域名
第一部份:網絡IP地址;
第二部份:主機名或域名;
第三部份:主機名別名;
使用命令

vim /ect/hosts
  • 1

點擊i插入編輯添加對應關係如下:
192.168.30.217 host217
192.168.30.250 host250
192.168.30.252 host252
192.168.30.251 host251
最終內容如圖:

使用命令測試是否設置成功

ping host250
  • 1

其他異常

如果還有其他異常,比如hdfs寫入無法連接hadoop集羣而是寫到了本機等等想象無法排查時,建議看文末啓動圖形界面排查,這樣就可以跟在windows系統上一樣進行操作和排查。

編寫運行的sh

在文件夾中新建執行job的文件,
新建文件命令: touch xxx.sh
並賦予文件執行權限
chmod +x xxx.sh

編輯xxx.sh文件
Vi xxx.sh
輸入 :
!/bin/sh
source /etc/profile 配置環境變量(使用crontab時候,由於crontab不識別系統的環境變量,所以需要我們這邊再配置一遍)

ROOT_TOPDIR=/home/zzq/kettle
Export ROOT_TOPDIR –設置kettle目錄
$ROOT_TOPDIR/data-integration/kitchen.sh –file=需要執行的job的文件(絕對路徑)

保存!
8
可在目錄下直接執行./xxx.sh 文件運行

配置crontab定時運行作業或者轉換

基本格式 :
*  *  *  *  *  command
分 時 日 月 周 命令
第1列表示分鐘1~59 每分鐘用或者 /1表示 第2列表示小時1~23(0表示0點) 第3列表示日期1~31 第4列表示月份1~12 第5列標識號星期0~6(0表示星期天) 第6列要運行的命令
在crontab中配置自動每天12點30分執行xxx.sh文件
編輯crontab : crontab –e
增加一行
30 12 * * * /home/zzq/kettle/xxx.sh

如果要輸出日誌可
30 12 * * * /home/zzq/kettle/xxx.sh >> /home/zzq/kettle/log01
如果kettle下面不存在log01文件會自動創建
配置完後重啓crontab服務:
Service crond restart
查看crontab服務
Service crond status
查看crontab中的內容
Crontab –1

注意事項

1、此地配置的kettle是不連接資源庫的,用的都是ktr或者kjb文件直接上傳到linux即可,因此在ktr中連接的數據庫需要配置在ktr文件中,數據庫連接統一使用Native(JDBC)連接,不使用JNDI連接,因爲crontab無法識別JNDI的連接
2、JDBC連接MYSQL的時候在連接選項中添加characterEncoding :gbk參數,否則mysql數據庫中的中文會在轉換中無法識別

使用圖形界面操作

如果linux系統直接可以使用圖形界面啓動那麼就可以像windows系統一下操作spoon進行開發。
如果不是圖形界面啓動的話,則需要使用vncviewer等工具登錄linux系統圖形界面,在data-integration目錄下,運行spoon.sh進行開發。
執行spoon.sh會報錯
org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]

這是因爲當前版本的系統沒有圖形界面部分。
所以需要藉助VNC工具。

在自己的windows電腦上安裝連接工具vncviewer。
官網
https://www.realvnc.com/en/connect/download/viewer/

下載版本最新版本,當前爲VNC-Viewer-6.17.1113-Windows.exe。

點擊安裝。

在linux系統中使用命令查看是否安裝VNC server

rpm -qa | grep vnc
  • 1

在Linux平臺安裝VNCServer服務端軟件包

sudo yum -y install vnc *vnc-server*
  • 1

修改VNCServer主配置文件

vim /etc/sysconfig/vncservers
  • 1

添加內容如下:
VNCSERVERS=”1:zzq”
VNCSERVERARGS[1]=”-geometry 1024x768”

zzq與自己的用戶名對應

設置VNCServer遠程連接密碼使用命令

vncpasswd
  • 1

輸入兩次相同的密碼

啓動vncserver服務

vncserver
vncserver -list
vncserver restart
  • 1
  • 2
  • 3

啓動如下:

上一步執行完畢會在zzq宿主目錄下生成.vnc開頭的隱藏目錄,該目錄下面的文件就是zzq用戶的VNC桌面配置文件。打開xstartup配置桌面

vim /home/zzq/.vnc/xstartup
  • 1

將最後一行改爲
gnome &
(使用GNOME桌面)

開啓防火牆VNCServer端口

sudo vim /etc/sysconfig/iptables
  • 1

在“-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT”下面添加一行
-A INPUT -m state –state NEW -m tcp -p tcp –dport 5901 -j ACCEPT

重啓iptables服務

service iptables restart
  • 1

在windows中打開VNC,新建連接輸入
VNC Server爲
192.168.30.64:1
zzq

這裏的1和zzq與上文中配置文件裏的對應。

如果連接藍屏說明linux沒有安裝圖形界面組件,使用命令安裝gnome

sudo yum groupinstall "X Window System"
sudo  yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
  • 1
  • 2

安裝後重新啓動 重新連接即可

vncserver restart
  • 1

如圖:

在桌面右鍵 打開終端 輸入命令

/home/zzq/data-integration/spoon.sh
  • 1

打開kettle成功

可能遇到的問題

彈出框兼容性問題無法點擊下面的確定按鈕
如圖

解決方法 使用快捷鍵
ALT + O

        <div class="person-messagebox">
            <div class="left-message"><a href="https://blog.csdn.net/q383965374">
                <img src="https://profile.csdnimg.cn/2/0/4/3_q383965374" class="avatar_pic" username="q383965374">
            </a></div>
            <div class="middle-message">
                                    <div class="title"><span class="tit "><a href="https://blog.csdn.net/q383965374" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;,&quot;ab&quot;:&quot;new&quot;}" target="_blank">張小凡vip</a></span>
                    <!-- 等級,level -->
                                            <img class="identity-icon" src="https://csdnimg.cn/identity/blog9.png">                                                    <span class="flag expert">
                            <a href="https://blog.csdn.net/home/help.html#classicfication" target="_blank">
                            <img src="https://csdnimg.cn/release/phoenix/template/new_img/identityExpert.png" alt="">
                                博客專家
                            </a>
                        </span>
                                        </div>
                <div class="text"><span>原創文章 829</span><span>獲贊 959</span><span>訪問量 571萬+</span></div>
            </div>
                            <div class="right-message">
                                        <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;,&quot;ab&quot;:&quot;new&quot;}">關注</a>
                                                            <a href="https://bbs.csdn.net/topics/395526538" target="_blank" class="btn btn-sm bt-button personal-messageboard">他的留言板
                    </a>
                                </div>
                        </div>
                    
    </div>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章