kettle 运行linux_linux 运行kettle - CSDN
  • 我们之前学习的kettle操作都是在windows中进行可视化的操作,但是在使用过程中发现一些问题。 比如我们的数据文件是放在linux服务器...Kettle可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定,不...

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

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

    准备java环境

    使用命令查看java环境

    java -version

    如图:

    需要注意的是不建议使用默认安装的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

    解压成功如图:

    确保可执行权限

    使用命令查看文件权限

    ls -l  /data-integration

    如图

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

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

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

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

    ./data-integration/kitchen.sh

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

    常用命令

    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对应的路径如下:

    把ktr脚本上传到work目录中

    使用命令运行

    /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
    

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

    ./data-integration/spoon.sh

    报错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'
    #######################################################################

    解决方法
    根据提示完成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

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

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

    可能遇到的问题

    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.HiveDriverjdbc: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中。
    如下:

    再次尝试运行成功解决。

    可能遇到的问题

    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
    最终内容如图:

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

    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]

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

    zzq与自己的用户名对应

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

    vncpasswd

    输入两次相同的密码

    启动vncserver服务

    vncserver
    vncserver -list
    vncserver restart

    启动如下:

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

    vim /home/zzq/.vnc/xstartup

    将最后一行改为
    gnome &
    (使用GNOME桌面)

    开启防火墙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

    如图:

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

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

    打开kettle成功

    可能遇到的问题

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

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

    展开全文
  • kettlelinux运行

    2019-10-18 14:57:22
    1.在windows系统上用kettle生成转换和作业,运行成功之后可以放到linux运行 注意:一定确保在Windows上是能正确运行的 2.找到kettle生成的转换文档,传入到linux系统中用pan.sh运行测试能否成功 cd data-...

    1.在windows系统上用kettle生成转换和作业,运行成功之后可以放到linux上运行
    注意:一定确保在Windows上是能正确运行的
    2.找到kettle生成的转换文档,传入到linux系统中用pan.sh运行测试能否成功
    cd data-integration
    目录下能够找到pan.sh

    ll
     drwxrwxr-x  2 hadoop hadoop     4096 Jul 31 19:47 kettle_file
    drwxrwxr-x  2 hadoop hadoop     4096 Aug 28 11:36 kettle_logs
    -rw-r--r--  1 hadoop hadoop      184 May 16  2017 Kitchen.bat
    -rwxr-xr-x  1 hadoop hadoop      354 May 16  2017 kitchen.sh
    drwxr-xr-x  2 hadoop hadoop     4096 May 16  2017 launcher
    drwxr-xr-x  2 hadoop hadoop    20480 Jul 31 18:39 lib
    drwxr-xr-x  6 hadoop hadoop     4096 May 16  2017 libswt
    -rw-r--r--  1 hadoop hadoop    13366 May 16  2017 LICENSE.txt
    -rw-r--r--  1 hadoop hadoop      172 May 16  2017 Pan.bat
    -rwxr-xr-x  1 hadoop hadoop      320 May 16  2017 pan.sh
    

    用ll命令查询pan.sh是否有权限,如果没有用命令

    chmod +x *.sh
    

    3.开始执行
    ./pan.sh -file /home/kettle_file/tran.ktr
    4.运行作业过程是一样的,只不过要注意job中的每个transform地址都是Windows系统上的,需要改成linux系统中的地址

    <entry>
          <name>转换01</name>
          <description />
          <type>TRANS</type>
          <specification_method>filename</specification_method>
          <trans_object_id />
          <filename>/home/kettle_file/tran.ktr</filename>
          <transname />
    

    然后执行:

      ./kitchen.sh -file /home/kettle_file/job.kjb
    

    5.linux 上的定时调度
    先创建一个脚本test.sh,需要先修改test.sh 的权限,cd到test.sh所在的文件夹下面,然后运行chmod +x *.sh,这是给当前路径下的所有 .sh 结尾的文档都修改了权限,chmod +x test.sh,是给本文档修改权限。

    vi test.sh
    

    打开test.sh 进行编辑:

    export JAVA_HOME=/opt/jdk1.8.0_73
    export PATH=${JAVA_HOME}/bin:${PATH}
    /home/data-integration/pan.sh -file /home/kettle_file/tran.ktr > /home/kettle_logs/log.txt
    

    第一二条是指的java的路径,不指定的话会找不到java路径,报错!
    第三条是运行命令,用的都是绝对路径,后面指定了日志存储路径,可以直接去log.txt查看日志。
    指定定时调度:

    crontab -e
    

    进入编辑页面:

    */2 * * * * /home/data/test.sh
    

    意思是每两分钟执行一次,后面用的也是绝对路径

     01 08 23 02 * /home/data/test.sh
    

    01分钟,08小时,23日,02月, * 星期
    这个意思是每个2月23日8时1分执行一次

    [kettle@haha ~]$crontab -l
    01 08 23 02 * /home/data/test.sh
    

    用来查询调度命令是否保存成功

     [kettle@haha ~]$service crond status  
    Redirecting to /bin/systemctl status  crond.service
    ● crond.service - Command Scheduler
       Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
       Active: active (running) since Tue 2019-07-30 14:02:03 CST; 2 months 19 days ago
     Main PID: 743 (crond)
       CGroup: /system.slice/crond.service
               └─743 /usr/sbin/crond -n
    

    service crond status 用来查看任务是否启动
    Active: active (running) 状态证明已经打开了
    如果显示Active: failed
    使用service crond start 命令进行启动

    展开全文
  • kettlelinux状态下调用的脚本文件,自动化,一键运行,便于实施。
  • kettlelinux环境中打开图形界面 kettle数据转换的时候需要图形界面 如果所在的linux环境中没有安装图形界面 可以在本机安装xshell 配置一个全局变量 ip是自己的本地ip DISPLAY=192.168.180.48:0.0 export DISPLAY...

    kettle在linux环境中打开图形界面


    kettle数据转换的时候需要图形界面
    当运行./spoon.sh时,如果没有图形界面,会出现下面的结果

    ./spoon.sh

    [root@localhost data-integration]# ./spoon.sh
    OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
    org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]
            at org.eclipse.swt.SWT.error(Unknown Source)
            at org.eclipse.swt.widgets.Display.createDisplay(Unknown Source)
            at org.eclipse.swt.widgets.Display.create(Unknown Source)
            at org.eclipse.swt.graphics.Device.<init>(Unknown Source)
            at org.eclipse.swt.widgets.Display.<init>(Unknown Source)
            at org.eclipse.swt.widgets.Display.<init>(Unknown Source)
            at org.pentaho.di.ui.spoon.Spoon.main(Spoon.java:619)
            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)
    

    如果所在的linux环境中没有安装图形界面
    可以在本机安装xshell
    配置一个全局变量 ip是自己的本地ip

    DISPLAY=192.168.180.48:0.0
    export DISPLAY

    输入命令就可以了

    xhost +

    先打开本地的 Xmanager - Broadcast
    在这里插入图片描述
    再运行./spoon.sh的时候,就可以通过本地的xshell打开图形界面了

    ./spoon.sh

    [root@localhost data-integration]# ./spoon.sh
    OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
    09:42:59,481 INFO  [KarafInstance]
    *******************************************************************************
    *** Karaf Instance Number: 2 at /u02/kettle/data-integration/./system/karaf ***
    ***   /caches/spoon/data-1                                                  ***
    *** Karaf Port:8803                                                         ***
    *** OSGI Service Port:9052                                                  ***
    *******************************************************************************
    09:42:59,482 INFO  [KarafBoot] Checking to see if org.pentaho.clean.karaf.cache is enabled
    °ËÔÂ 26, 2019 9:43:02 ÉÏÎç org.apache.karaf.main.Main$KarafLockCallback lockAquired
    ÐÅÏ¢: Lock acquired. Setting startlevel to 100
    C:\mnt\y\01.WORK\12.kettle\data-integration\system\karaf/deploy does not exist, please create it.
    Root path does not exist: /u02/kettle/data-integration/C:\mnt\y\01.WORK\12.kettle\data-integration\system\karaf/deploy
    Y:\01.WORK\12.kettle\data-integration\system\karaf/deploy does not exist, please create it.
    Root path does not exist: /u02/kettle/data-integration/Y:\01.WORK\12.kettle\data-integration\system\karaf/deploy
    
    

    出现这个页面,需要等一会就打开了
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • kettle是一款纯java编写的开源ETL工具,需要jdk环境支持,下载jdk-6u45-linux-i586.bin到/root/Desktop,建立jdk安装目录 #mkdir /usr/java #cp /root/Desktop/jdk-6u45-linux-i586.bin /usr/java/ #cd /usr/java...

    一:安装jdk

    1:下载安装jdk

    kettle是一款纯java编写的开源ETL工具,需要jdk环境支持,下载jdk-6u45-linux-i586.bin到/root/Desktop,建立jdk安装目录

    #mkdir /usr/java

    #cp /root/Desktop/jdk-6u45-linux-i586.bin  /usr/java/

    #cd  /usr/java

    #chmod  +x  jdk-6u45-linux-i586.bin

    #./jdk-6u45-linux-i586.bin

     

    2:配置环境变量

    #vim  /etc/profile

     

    export JAVA_HOME=/usr/java/jdk1.6.0_45  //jdk1.6.0_45为jdk的安装目录

    export PATH=$JAVA_HOME/bin:$PATH

    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

     

    3:测试

    若出现版本信息,则安装配置成功

    #java -version

     

     

    二:部署kettle

     

    1:创建一个目,将下载好的kettle解压后放在该文件夹下。

    # mkdir  /root/software/kettle

    # cp  /root/pdi-ce-5.0.1-stable.zip  /root/software/kettle

    # cd   /root/software/kettle

    # unzip pdi-ce-5.0.1-stable.zip

    # cd  data-integration

    # ll  *.sh

    # chmod  +x  *.sh  //以.sh结尾的文件必须拥有执行权限,如果没有,请赋予

     

    2:测试安装是否成功

    在kettle的data-integration目录中执行kitchen.sh文件,若出现帮助信息,证明安装成功

    # ./kitchen.sh

    备注:

    kitchen.sh:执行job

    pan.sh:执行转换

     

    3:打开图形界面(需Xmanager配合使用)

    使用XShell建立连接时,在 SSH --> tunneling 选项下勾选 Forward X11 connections to: Xmanager。登陆远端Linux主机,执行 gtk-demo 测试是否可以将界面显示在本地窗口。这样设置成功后,我们可以运行有图形界面的工具并将其显示在我们本地机器上。

    #  ./spoon.sh &

    编写job和transition(略)

     

    三:运用crontab执行kettle程序

     

    1.建立目录存放kettle文件

    # mkdir  -p  /root/kettle/kettle_file/job   // 存放作业文件

    # mkdir /root/kettle/kettle_file/transition  // 存放转换

    # mkdir /root/kettle/kettle_sh  // 存放执行脚本

    # mkdir /root/kettle/kettle_log  // 存放执行kettle产生的日志文件

    将从windows上配置好的.ktr和.kjb程序分别放在transition目录和job目录下(或linux下编写后直接保存到该目录下)

     

    2:编写执行脚本

    # cd  /root/kettle/kettle_sh

    # vim  ceshi.sh

    文本内容如下:

    #!/bin/bash

    #执行job程序

    cd  /root/software/kettle/data-integration

    export JAVA_HOME=/usr/java/jdk1.6.0_45 

    export PATH=$JAVA_HOME/bin:$PATH

    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    注:(因为crond是个守护进程,它不归属于任何用户,虽然之前以root用户配置了java环境变量,但是crond一样找不到java命令,所以,当crond执行kettle任务时,需要动态设置java环境变量,否则会出现手动执行.sh没问题,放crontb里面执行后无效果)

    ./kitchen.sh -file=/root/kettle/kettle_file/job/ceshi.kjb-level=basic >>/root/kettle/kettle_log/ceshi_$(date +%Y%m%d).log

    # chmod  +x  ceshi.sh

    # sh  -x  ceshi.sh

     

    3:设定crontab 定时执行任务

    # crontab  -u  root  -e

    */1 * * * * /root/kettle/kettle_sh/ceshi.sh  //每分钟执行一次ceshi.sh

    # systemctl restart crond

    # systemctl enable crond

     

    到此大功告成,记得在数据库中验证结果

    注意:

    在linux中,如果是通过图形界面执行程序的话,点击那个绿色的三角即可。如果是命令行启动,后台执行进行进程不能中断。因此,在linux中不推荐使用kettle里面的自动执行,使用操作系统的定时执行要稳定的多。Windows下使用定时任务计划,linux下使用crontab。

    展开全文
  • kettlelinux使用kettle

    2019-07-23 04:19:55
    Kettle可以在Window、Linux、Unix上运行,数据抽取高效稳定,使用之前需要准备环境。 准备java环境,这里就不赘述了,建议jdk7以上版本。 上传kettle压缩包,并解压,我解压的路径是/usr/soft/kettle 以下是重点:...
  • 目录 一、安装JDK环境: 二、软件下载: 三、软件解压: 四、配置环境变量: 五、修改参数: ...1、设置编码格式为UTF-8: ...kettle软件下载地址:https://sourceforge.net/projects/pentaho/files/Da...
  • 最近已经两个项目使用到了ETL工具Kettle,而且我司两次使用的环境部署及使用都是我自己费劲巴拉东找西找来搞定的,所以觉得有必要自己把这块知识记录共享一下了。*
  • 2.4 Linux下安装使用 2.4.1 单机 1)jdk安装 2)安装包上传到服务器,解压 注意:1. 把mysql驱动拷贝到lib目录下 2. 将本地用户家目录下的隐藏目录C:\Users\自己用户名\.kettle,整个上传到linux的家目录/home/...
  • Kettle是使用Java编写的,使用的时候尽可能的将JVM设置的足够大 # ****************************************************************** # ** Set java runtime options ** # ** Change 512m to highe...
  • (一) 下载jre-6u23-linux-x64.bin 下载地址: http://cds-esd.sun.com/ESD6/JSCDL/jdk/6u23-b05/jre-6u23-linux-x64.bin?AuthParam=1292401739_2abc6c61c57eec5b100fe647086d1f33&TicketId=CJ0nhp...
  • linux运行kettle转换任务 (需要先上传kettle程序包至服务器) 任务是从Cassandra抽取数据到hdfs上,这个转换的任务请参考上一篇博客https://blog.csdn.net/oppo62258801/article/details/89501428。 考虑到...
  • Linux下实现kettle 自动同步数据 1.安装jdk tar -zxvf jdk-7u25-linux-x64.tar.gz -C /usr/share 2.配置java环境 vim /etc/profile 在末尾添加如下 export JAVA_HOME=/usr/share/jdk1.7.0_25 export PATH=$JAVA...
  • linux环境下使用kettle 安装JDK1.8以上 参考链接:https://blog.csdn.net/zzq900503/article/details/51879745 版本要求 vi Spoon.bat 安装PDI 参考 ...[root@...
  • Kettle部署到linux

    2019-03-29 11:27:41
    Kettle部署到linux系统 准备工作 安装JDK;(略) 准备.kjb或.ktr转换文件。(以CRM角色用户同步知识库为例)文件夹WORK\CRMKNOW\*. 准备pdi-ce-6.1.0.1-196.tar.gz文件(Kettle文件)。 安装步骤 复制pdi-ce-...
  • 执行本地job和trans命令 ./kitchen.sh -file=/tmp/kettle/workspace/job/... /tmp/kettle/workspace/log/kettlejob.log ./pan.sh -file=/tmp/kettle/workspace/job/月卡.ktr >> /tmp/kettle/workspace/lo...
  • Linux环境部署kettle

    2018-08-08 23:22:58
    本博客主要是记录了鄙人第一次在Linux环境部署kettle的经历,以及其中遇到的部分问题,不一定很全面,仅供参考交流 博客内容主要分为:JDK安装、kettle安装、安装JDK与kettle可能遇到的问题、以及定时执行job等 一...
  • kettlelinux下的常用命令 在Kettle中pan和kitchen两个工具分别用来执行transformation(转换)和job(作业),如下所示: 1、Pan——转换执行器 运行transformation文件是通过pan.sh来运行的。在本地创建一个...
  • 修改kettle用户主目录下的.bash_profile文件: export JAVA_HOME=/usr/java/jdk1.8.0_181 export CLASSPATH=.:$JAVA_HOME/dt.jar:$JAVA_HOME/tools.jar export PATH=$JAVA_HOME/bin:$PATH 解压kettle并授权 ...
1 2 3 4 5 ... 20
收藏数 2,285
精华内容 914
关键字:

kettle 运行linux