暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

kettle连接HDP3组件Hive3.1.0存取数据

大数据开发运维架构 2020-10-19
1778

1.近况

    最近忙于更换工作一直没有更新自己的公众号,十一过后刚入职医疗行业大数据公司,主要还是从事Hadoop相关的工作,正好同事用到了Kettle从Oracle向Hive中抽取数据,周末有空就在自己集群研究了下,这里把采坑过程记录下,希望能帮助有需要的同学。

2.kettle报错研究过程

    由于没有使用过kettle,一开始、下载了最新版的kettle7.0,经过各种百度,下载hive配置和jar包,但是总是连接不上hive,报各种错误,不一一举例了,直到报错:No suitable driver found for jdbc:hive2。

    log4j:ERROR No output stream or file set for the appender named [pdi-execution-appender].
    九月 29, 2020 4:16:05 下午 org.apache.cxf.endpoint.ServerImpl initDestination
    信息: Setting the server‘s publish address to be i18n
    2020/10/18 16:16:05 - dept.0 - Error occurred while trying to connect to the database
    2020/10/18 16:16:05 - dept.0 -
    2020/10/18 16:16:05 - dept.0 - Error connecting to database: (using class org.apache.hive.jdbc.HiveDriver)
    2020/10/18 16:16:05 - dept.0 - No suitable driver found for jdbc:hive2://worker1.hadoop.ljs:10000/lujisen

    复制

        首先说下我这里hadoop用的是比较新的HDP3.1.4,各个组件版本分别是Hadoop3.1.1.3.1、Hive3.1.0,各种百度和看官网一直解决不了这个问题。折腾很久才发现,原来是版本不匹配,因为kettle连接hadoop集群,分为连接CDH还是HDP,从目录\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations 就可以看出,每个版本的kettle只能连接该目录下指定的集群版本,因为 pentaho-hadoop-shims*.jar 这个文件的是用来匹配kettle和集群版本的,不能随意搭配。因为官网上的shims版本是有限的。

    3.kettle下载

        这里我是下载了次新稳定版本8.3,我看这个版本有对应hdp3.0的shims包,

    下载地址:https://fr.osdn.net/projects/sfnet_pentaho/releases#

    4.kettle配置

    1.下载解压后,只有一个 data-integration 目录,开始配置连接hive,你所下载的kettle支持的所有版本的hadoop都会在他的插件子目录中有对应的文件夹和shims包,如下图所示:

    2.找到对应版本的文件夹hdp30,替换集群的xml配置文件:

    3. 修改data-integration\plugins\pentaho-big-data-plugin 目录下的  plugin.properties 文件中的配置项,指定要使用的集群配置是哪个,这里我要启用的是hdp30,入下图所示:

    4.拷贝连接hive所需的jar包, 从集群Hive的lib目录下拷贝所有hive开头的jar,其实有些包不需要,这里我就不再挑选了直接拷贝到了hdp30/lib下,如果报错你还可以在解压的根目录data-integration/lib下也放置一份,如下图所示:

    5. 放上依赖jar后,需要重启,重启之前,最好是清理下data-integration、system/karaf的cache和data(如有)目录,清理缓存:

    6.重启,测试成功。


       1-6步是没有启用kerberos情况下,kettle连接hive,如果集群启用了kerbeos,执行完上面的6步骤之后,还需要执行以下几步:

        这里需要注意的,访问应用服务环境 hive 的主体 principal 统一为 hive/master.hadoo.ljs@HADOOP.COM,而不是用户自己的principal ,用户自己的 principal 仅作为客户端机器获取认证票据。

    7. 创建文件 kettle.login,写入如下内容并保存

    # :Windows 放置在 C:/ProgramData/MIT/Kerberos5/kettle.login

    # :Linux 放置在 etc/kettle.login

      com.sun.security.jgss.initiate{
      com.sun.security.auth.module.Krb5LoginModule required
      useKeyTab=true
      useTicketCache=false
      keyTab="C:/ProgramData/MIT/Kerberos5/testuser.keytab"
         principal="testuser/master.hadoop.ljs@HADOOP.COM"
      doNotPrompt=true
      debug=true
      debugNative=true;
      };
      复制

      注意:

          这上面的keytab和pricipal用哪个用户登录就换成哪个用户的票据和认证文件,注意,注意,注意

      8.修改 Kettle 启动脚本

        # 修改 Kettle 启动脚本
        ## 2.1 window 系统修改 data-integration\Spoon.bat
        #  对大概 98 行左右的 OPT 变量修改为如下:
        # 主要添加了如下四个参数(注意每个参数用引号引起,空格分开,如果想开启动的信息,在启动脚本最后一行加上 pause):
        # "-Djava.security.auth.login.config=C:/ProgramData/MIT/Kerberos5/kettle.login"
        #    "-Djava.security.krb5.realm=HADOOP.COM"  自己集群realm名称
        #    "-Djava.security.krb5.kdc=192.168.33.9" 自己kdcserver地址
        # "-Djavax.security.auth.useSubjectCredsOnly=false"
        set OPT=%OPT% %PENTAHO_DI_JAVA_OPTIONS% "-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2" "-Djava.library.path=%LIBSPATH%" "-Djava.security.auth.login.config=C:/ProgramData/MIT/Kerberos5/kettle.login"  "-Djava.security.krb5.realm=HADOOP.COM" "-Djava.security.krb5.kdc=192.168.0.201" "-Djavax.security.auth.useSubjectCredsOnly=false" "-DKETTLE_HOME=%KETTLE_HOME%" "-DKETTLE_REPOSITORY=%KETTLE_REPOSITORY%" "-DKETTLE_USER=%KETTLE_USER%" "-DKETTLE_PASSWORD=%KETTLE_PASSWORD%" "-DKETTLE_PLUGIN_PACKAGES=%KETTLE_PLUGIN_PACKAGES%" "-DKETTLE_LOG_SIZE_LIMIT=%KETTLE_LOG_SIZE_LIMIT%" "-DKETTLE_JNDI_ROOT=%KETTLE_JNDI_ROOT%"


        ## Linux 系统修改 data-integration/spoon.sh
        ## 大概在 205 行,同 Windows 系统类似,添加四个参数
        OPT="$OPT $PENTAHO_DI_JAVA_OPTIONS -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2 -Djava.library.path=$LIBPATH -Djava.security.auth.login.config=/etc/kettle.login -Djava.security.krb5.realm=HADOOP.COM -Djava.security.krb5.kdc=192.168.0.101 -Djavax.security.auth.useSubjectCredsOnly=false -DKETTLE_HOME=$KETTLE_HOME -DKETTLE_REPOSITORY=$KETTLE_REPOSITORY -DKETTLE_USER=$KETTLE_USER -DKETTLE_PASSWORD=$KETTLE_PASSWORD -DKETTLE_PLUGIN_PACKAGES=$KETTLE_PLUGIN_PACKAGES -DKETTLE_LOG_SIZE_LIMIT=$KETTLE_LOG_SIZE_LIMIT -DKETTLE_JNDI_ROOT=$KETTLE_JNDI_ROOT"
        复制

        9.连接hive

          连接名称:lujisen
          连接类型:Hadoop Hive 2
          主机名称:hiveserver2 服务地址,例如:192.168.0.101
          数据库名称:lujisen;principal=hive/master.hadoop.ljs@HADOOP.COM
          端口号:10000
          用户名:hive
          密码:
          复制

          注意:

              上面第四行中principal后面跟的一定是hive管理员的票据,不是某个登录用户的票据,一定注意,注意,注意

          10.连接成功,如下图所示:

              感谢大家的持续关注,只要有空余时间,争取把自己的Hadoop相关经验和采坑记录都分享给大家。

            如果觉得我的文章能帮到您,请关注微信公众号“大数据开发运维架构”,并转发朋友圈,谢谢支持!

          文章转载自大数据开发运维架构,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论