首页 > 系统相关 >kettle案例九-----linux使用kettle

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

时间:2023-08-08 12:33:33浏览次数:38  
标签:01 java 19 kettle 15 ----- 2018 linux org


我们之前学习的kettle操作都是在windows中进行可视化的操作,但是在使用过程中发现一些问题。 比如我们的数据文件是放在linux服务器中的,如果要清洗则需要把它们下载到本地,这样需要耗费一些时间,尤其是数据文件比较大时。 解决方案就是 我们直接在linux服务器中运行kettle进行抽取。

Kettle可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定,不过在使用之前需要准备环境。

准备java环境

使用命令查看java环境

java -version

如图:

kettle案例九-----linux使用kettle_kettle


需要注意的是不建议使用默认安装的openjdk,否则后续会有很多莫名其妙的问题。

kettle案例九-----linux使用kettle_界面化_02

如果没有安装JDK可以参考如下帖子:
linux软件(一)—CentOS安装jdk

从上面可以看到,在zzq用户下已经安装了java jdk,版本是1.8.0_141,我们看一下kettle的最低版本要求,编辑查看spoon.bat可以看到如图

kettle案例九-----linux使用kettle_hadoop_03


java的版本需求为1.6.0_17,cognos用户下的jdk版本在此之上,说明java环境已经符合。

上传部署

利用SSH将本地可用的增加好jar包配置好的data-integration打包成data-integration.zip上传到linux服务器(将整个文件夹上传也可以)

我这里使用的工具是Xftp如下图:

kettle案例九-----linux使用kettle_linux_04

使用unzip命令解压data-integration.zip(如果上传的是文件夹,忽略此步骤)

unzip data-integration.zip

解压成功如图:

kettle案例九-----linux使用kettle_hadoop_05

确保可执行权限

使用命令查看文件权限

ls -l  /data-integration

如图

kettle案例九-----linux使用kettle_界面化_06

从上面可以看出,此目录下面的.sh文件都没有执行权限(X),需要这个文件夹下面的所有.sh文件赋执行的权限
使用命令

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

再查看已经有执行权限了,如图:

kettle案例九-----linux使用kettle_kettle_07

使用命令测试是否部署成功

./data-integration/kitchen.sh

如果出现帮助信息则部署成功。

kettle案例九-----linux使用kettle_界面化_08

常用命令

ktr的运行:运行transformation文件是通过pan.sh来运行的。

打开cmd命令行窗口,转到pan.sh所在的目录,如/home/zzq/data-integration,然后执行文件的命令为

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

如果要输出日志则

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

后台模式运行使用

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

kjb的运行:运行job文件是通过kitchen.sh来运行的。

打开cmd命令行窗口,转到kitchen.sh所在的目录,如/home/zzq/data-integration,然后执行文件的命令为

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

如果要输出日志则

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

配置参数:

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

作业存储在数据库

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

(Rep的值为数据库资源库ID)

Linux 中参数以 –分隔

作业存储在文件

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

作业存储在数据库

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

测试运行转换脚本

把ktr转换脚本要清洗的文件的路径修改成linux对应的路径如下:

kettle案例九-----linux使用kettle_linux_09

把ktr脚本上传到work目录中

kettle案例九-----linux使用kettle_hive_10

使用命令运行

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

成功运行使用命令查看日志:

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

可能遇到的问题

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

kettle案例九-----linux使用kettle_界面化_11

原因
我这里是直接把windows中可用的data-integration复制过来在linux运行,按理说不会有问题,那么应该是环境配置的问题,尝试着运行spoon.sh使用命令

./data-integration/spoon.sh

报错java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons。

kettle案例九-----linux使用kettle_linux_12


说明缺少可以加载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'
#######################################################################

解决方法
根据提示完成libwebkitgtk的安装。
在centos版本中使用的命令为:

yum install epel-release
yum install webkitgtk

安装完后再运行命令

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

发现仍然报错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

kettle案例九-----linux使用kettle_hadoop_13

经过排查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                                                  ***

缓存目录有两个分别为:
/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 &

发现已经能够成功运行如下:

kettle案例九-----linux使用kettle_kettle_14

可能遇到的问题

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]

原因很明显,就是没有hive的驱动包导致的。
这里需要注意的是hive2和hive的版本问题,也就是说
Connection URL

jdbc:hive2:// 使用的驱动是org.apache.hive.jdbc.HiveDriver。
jdbc:hive:// 使用的驱动是org.apache.hadoop.hive.jdbc.HiveDriver

详细信息可以参考文章: 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中。

如下:

kettle案例九-----linux使用kettle_kettle_15

再次尝试运行成功解决。

可能遇到的问题

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

原因是我们在配置中使用了host名称而不是使用的ip,所以如果linux系统没设置host会对应不到。

解决方式设置host即可。

Linux主机名的相关配置文件就是/etc/hosts;
hosts文件的格式如下:
IP地址 主机名/域名
第一部份:网络IP地址;
第二部份:主机名或域名;
第三部份:主机名别名;
使用命令

vim /ect/hosts

点击i插入编辑添加对应关系如下:

192.168.30.217 host217

192.168.30.250 host250

192.168.30.252 host252

192.168.30.251 host251

最终内容如图:

kettle案例九-----linux使用kettle_界面化_16

使用命令测试是否设置成功

ping host250

其他异常

如果还有其他异常,比如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]

kettle案例九-----linux使用kettle_linux_17

这是因为当前版本的系统没有图形界面部分。
所以需要借助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

在Linux平台安装VNCServer服务端软件包

sudo yum -y install vnc *vnc-server*

修改VNCServer主配置文件

vim /etc/sysconfig/vncservers

添加内容如下:

VNCSERVERS=”1:zzq”

VNCSERVERARGS[1]=”-geometry 1024x768”

kettle案例九-----linux使用kettle_hive_18


zzq与自己的用户名对应

设置VNCServer远程连接密码使用命令

vncpasswd

输入两次相同的密码

启动vncserver服务

vncserver
vncserver -list
vncserver restart

启动如下:

kettle案例九-----linux使用kettle_hadoop_19

上一步执行完毕会在zzq宿主目录下生成.vnc开头的隐藏目录,该目录下面的文件就是zzq用户的VNC桌面配置文件。打开xstartup配置桌面

vim /home/zzq/.vnc/xstartup

将最后一行改为

gnome &

(使用GNOME桌面)

kettle案例九-----linux使用kettle_hadoop_20

开启防火墙VNCServer端口

sudo vim /etc/sysconfig/iptables

在“-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

在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"

安装后重新启动 重新连接即可

vncserver restart

如图:

kettle案例九-----linux使用kettle_hadoop_21

在桌面右键 打开终端 输入命令

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

打开kettle成功

kettle案例九-----linux使用kettle_界面化_22

可能遇到的问题

弹出框兼容性问题无法点击下面的确定按钮

如图

kettle案例九-----linux使用kettle_hadoop_23

解决方法 使用快捷键
ALT + O


标签:01,java,19,kettle,15,-----,2018,linux,org
From: https://blog.51cto.com/u_16218512/7007140

相关文章

  • hadoop组件---数据仓库(五)---通过JDBC连接hive的thrift或者hiveserver2
    我们在上一篇文章中已经学习了Hive的常用命令,但是如果使用其他的语言如何跟Hive进行交互呢。Thrift简介Hive拥有HiveServer(Thrift)或者Hiveserver2组件,提供了JDBC驱动服务,使得我们可以用Java代码或者Python来连接Hive并进行一些关系型数据库的sql语句查询等操作。HiveServer或者Hi......
  • linux测试网络速度
    大家都知道,Linux界面基本都是命令行模式,但是命令行模式也可以测试网速,我们就要用这个工具:speedtest,linux上的版本是基于python开发的。1、是从githup上下载的这个工具,所以我们需要在linux上要安装git命令客户端,最简单的方法是用yum来安装,[root@localhost~]#yum-yinstallgit2、......
  • java多线程编程基础4--正确使用 Volatile 变量
    记住一点就是:对数据的操作是分三步:1.从内存从拿过来2.更改数据3.写入内存 还需要记住一点就是:我们在存储数据的时候,不一定是将数据存放在内存中的,有时放在寄存器中的。所以多线程操作的时候,共有变量A如果被一个线程操作,并且存放在寄存器中并没写入到内存中,而另一个线程操作这个......
  • 2023第七场牛客多校-We Love Strings
    I-WeLoveStrings_2023牛客暑期多校训练营7题意 做法:根号分治+容斥原理将字符串分为两类:len<=20直接位运算枚举出可能的所有答案,看是否存在符合的len>20采用容斥原理,计算出所有长度为i的字符串中(假设为n个),1个字符串可以表示的(1个元素的交集) ,2个字符串可以表示的......
  • 博弈论:台阶-Nim游戏
    现在,有一个 nn 级台阶的楼梯,每级台阶上都有若干个石子,其中第i 级台阶上有 ai 个石子(i≥1)。两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中(不能不拿)。已经拿到地面上的石子不能再拿,最后无法进行操作的人视为失败。问如果两人都采用最优策略,......
  • python3 apscheduler 任务池 异常错误 /opt/www/taskPools1/venv/lib/python3.8/site-
    报错信息:(venv)root@VM-8-7-ubuntu:/opt/www/taskPools1#pythonmain.pyTraceback(mostrecentcalllast):File"/opt/www/taskPools1/venv/lib/python3.8/site-packages/apscheduler/jobstores/mongodb.py",line86,inadd_jobself.collection.insert_on......
  • linux进阶:内核模块
    现代内核派系宏内核关键功能(基本功能,不可裁剪、扩展)和服务功能(如文件系统、设备驱动、网络服务等,可裁剪、扩展)均在内核空间提供。运行效率高。扩展性较差。systemcall(系统调用)能够先入内核态来使用内核提供的服务。微内核内核空间只提供关键功能,服务功能在用户空间提供。......
  • 20天 hot 100 速通计划-day04
    普通数组238.除自身以外数组的乘积给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。请不要使用除法,且在O(*n*)时间复杂度内......
  • 分布式链路跟踪springcloud-Sleuth和springcloud-Zipkin
    分布式链路跟踪springcloud-Sleuth和springcloud-Zipkin前言各大厂分布式链路跟踪系统架构对比随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分......
  • Siemens 西门子S7-1200PLC与组态王TCP通讯
    1.0首先打开组态王软件,这里测试用的是6.6版本的2.0点击菜单栏的新建项目,然后下一步 3.0这一步是选择项目存放的目录,找到存放位置就下一步 4.0接下来就是设置工程名称了,自己根据项目定义 5.0完成以上步骤,你就会看到如下图的项目,然后我们选择菜单栏点击开发 6.0......