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.HiveDriver。
jdbc: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="{"mod":"popu_379","ab":"new"}" 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="{"mod":"popu_379","ab":"new"}">關注</a>
<a href="https://bbs.csdn.net/topics/395526538" target="_blank" class="btn btn-sm bt-button personal-messageboard">他的留言板
</a>
</div>
</div>
</div>