Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 700|回复: 0

Kettle连接HiveServer2配置和常见问题解决

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-5-21 18:34:10 | 显示全部楼层 |阅读模式

    Kettle版本:pdi-ce-8.2.0.0-342.zip

    Hive版本:apache-hive-2.3.0-bin.tar.gz

    Hadoop版本:hadoop-2.7.3.tar.gz

     

    Kettle关于Hadoop生态圈组件连接配置基本都在data-integration\plugins\pentaho-big-data-plugin目录下,如图:

     

     

    其中plugin.properties配置文件中有两个主要参数:

    (1)active.hadoop.configuration

    # The Hadoop Configuration to use when communicating with a Hadoop cluster. This is used for all Hadoop client tools
    # including HDFS, Hive, HBase, and Sqoop.
    # For more configuration options specific to the Hadoop configuration choosen
    # here see the config.properties file in that configuration's directory.
    active.hadoop.configuration=hdp30

    (2)hadoop.configurations.path

    # Path to the directory that contains the available Hadoop configurations
    hadoop.configurations.path=hadoop-configurations

    两个参数主要配置Hadoop集群的版本,在hadoop-configurations目录下,提供了如下几个Hadoop集群版本:

     

     

    其中cdh和hdp是目前用的比较多的两个版本。它们整合了Hadoop集群的各个组件,可以快速配置和部署。因为我们这里使用的是Apache开源的Hadoop集群,所以可以采用hdp30。选择hdp30,而不选择hdp26,主要是选择高版本可以向后兼容。

    hdp30目录下,提供如下一些配置文件和jar包,如图:

     

     

    我们这里连接Hive2,需要Hadoop集群支持,所以将Hadoop的配置文件core-site.xml,hdfs-site.xml和Hive的配置文件hive-site.xml拷贝过来(事先需要搭建好Hadoop和Hive集群)。

    core-site.xml

    <configuration>
        <property>
                    <!-- 配置NameNode地址  -->
                    <name>fs.defaultFS</name>
                    <value>hdfs://bigdata111:9000</value>
            </property>
            <property>
                    <!-- 保存HDFS临时数据的目录  -->
                    <name>hadoop.tmp.dir</name>
                    <value>/root/bigdata/hadoop-2.7.3/tmp</value>
            </property>
            <property>
                <name>hadoop.proxyuser.root.hosts</name>
                <value>*</value>
            </property>
            <property>
                <name>hadoop.proxyuser.root.groups</name>
                <value>*</value>
            </property>
    </configuration>

    这里说明下:

            <property>
                <name>hadoop.proxyuser.root.hosts</name>
                <value>*</value>
            </property>
            <property>
                <name>hadoop.proxyuser.root.groups</name>
                <value>*</value>
            </property>

    如果不配置这两个属性,可能会出现如下问题:

    Error connecting to database: (using class org.apache.hive.jdbc.HiveDriver)
    Could not open client transport with JDBC Uri: jdbc:hive2://bigdata111:10001/test: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous

    主要是hadoop安全验证,不允许root匿名。配置好后需要重启hdfs。
    hdfs-site.xml

    <configuration>
        <property>
               <!-- HDFS数据冗余度,默认3  -->
                <name>dfs.replication</name>
                <value>1</value>
        </property>
    </configuration>

    我使用的是单机搭建的集群。

    <configuration>
        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://bigdata111:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionDriverName</name>
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionUserName</name>
            <value>root</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionPassword</name>
            <value>root</value>
        </property>
            <property>
                    <name>hive.exec.scratchdir</name>
                    <value>/hive/mapreduce</value>
            </property>
        <property>
                    <name>hive.metastore.warehouse.dir</name>
                    <value>/hive/warehouse</value>
            </property>
                <property>
                    <name>hive.server2.thrift.bind.host</name>
                    <value>bigdata111</value>
            </property>
                <property>
                    <name>hive.server2.thrift.port</name>
                    <value>10001</value>
            </property>
    </configuration>

    上面的其他配置不用关心,主要是最后两个属性,我们连接的是HiveServer2,如下配置HiveServer2主机和端口

                <property>
                    <name>hive.server2.thrift.bind.host</name>
                    <value>bigdata111</value>
            </property>
                <property>
                    <name>hive.server2.thrift.port</name>
                    <value>10001</value>
            </property>

    Kettle如下连接Hive2

     

     如图,需要事先在Hive中创建好test的数据库用于连接测试,点击测试,连接成功后如图:

     

     

    在连接过程中经常会出现Error connecting to database(using class org.apache.hadoop.hive.jdbc.HiveDriver)错误。原因有很多,主要有如下几个:

    (1)版本兼容问题

    hdp30目录下lib中的jdbc和Hive集群不兼容,可以将Hive集群中的lib下的jar包拷贝过来

    (2)根本没有jdbc的jar

    这时需要检查下active.hadoop.configuration=hdp30配置是否有问题,或者已经修改后,还是找不到jdbc,需要重启Kettle。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-6 07:54 , Processed in 0.073574 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表