NiFi集成Hive版本问题
使用CDH的集成Hive和NiFi1.12.0集成使用时,一致在报错
Required field ‘client_protocol’ is unset! Struct:TOpenSessionReq
这个错误很大可能就是jdbc和Hive的版本不匹配。
遇到问题
这里nifi使用的版本是1.12.0,nifi1.4.0起就不再和hive1.1.0兼容了,而CDH默认是安装Hive1.1.0。因此会产生兼容性的问题,会报一个版本问题的错。
Required field ‘client_protocol’ is unset!
完整错误如图

两个思路,要么换用低版本的NiFi处理器,要么Hive升级。
NiFi多版本兼容
Hive升级是比较麻烦的,NiFi的nar包复制过来重启就可以直接使用,比较方便。可惜我这里没有找到兼容Hive1.1.0的对应nar包,小于1.4.0版本的nar包都会无法识别版本。
这里先讲一下使用替换nar包的方法兼容。
apache官方提供的nar包下载路径
选择所需要的版本,复制下载链接。比如这里我需要下载nifi-hive-1.10.0的nar包。
首先进入你的nifi安装目录,下载nar包然后重启nifi,重启过程大概需要三到五分钟。
cd /root/nifi-1.12.0/lib
wget https://repo.maven.apache.org/maven2/org/apache/nifi/nifi-hive-nar/1.10.0/nifi-hive-nar-1.10.0.nar &
../bin/nifi.sh restart
再次访问nifi的web页面,就可以在processor一栏中找到你下载的版本了。
这里再注意一下,很多的nar包之间是有依赖关系的,比如nifi-hive-1.10.0.nar下面的selecthiveQL处理器,需要创建一个对应版本的HivePool,还需要再去下载nifi-hive-service-api-1.10.0.nar,这里的依赖关系需要具体情况具体分析。
CDH升级Hive
CDH的Hive版本是不进行迭代更新的,这里需要我们自己安装相应的新版本Hive,本篇演示在不影响数据的情况下,从CDH-Hive1.1.0升级到1.2.1。
以下操作所有节点必须同步。
首先我们需要下载所需版本的Hive-apache安装包。
这里在后续使用时发现,apache安装包也会少量出现和CDH的兼容问题,建议使用CDH-Hive-1.2.1的安装包。
Hive1.2.1安装包连接
先找到Hive的安装路径,一般情况CDH都会把Hive默认安装在/opt下。
在hive目录下新建一个lib121目录,作为Hive1.2.1的依赖jar路径,把下载好的Hive1.2.1中lib下所有依赖复制进去,然后修改Hive的lib目录为lib121
cd /opt/cloudera/parcels/CDH/lib/hive
wget http://archive.apache.org/dist/hive/hive-1.2.1/apache-hive-1.2.1-bin.tar.gz &
tar -xzvf apache-hive-1.2.1-bin.tar.gz
mkdir lib121
cp apache-hive-1.2.1-bin/lib/* ./lib121/
vim hive
......
#只修改这一行,lib替换为lib121
HIVE_LIB=${HIVE_HOME}/lib ==> HIVE_LIB=${HIVE_HOME}/lib121
......
进入clouderaManager服务web,停用Hive组件,对应的有依赖的组件也要停掉。然后更新hadoop-yarn中的jline依赖,删除老的依赖
ln -s /opt/cloudera/parcels/CDH/lib/hive/lib121/jline-2.12.jar /opt/cloudera/parcels/CDH/lib/hadoop-yarn/lib/jline-2.12.jar
cd /opt/cloudera/parcels/CDH/lib/hadoop-yarn/lib/
以下操作仅在保存Hive元数据的MySQL节点上完成
首先把原有的元数据备份,万一出错可以恢复。使用root账号。
mysqldump -uroot -p[你的Mysql密码] hive > hive013.sql
mysqldump -uroot -p[你的Mysql密码]
附:使用备份进行数据恢复操作
create database hive013 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use hive;
source hive.sql;
进入刚才hive1.2.1的解压目录下,目录下会有一些元数据的初始化备份。
cd /opt/cloudera/parcels/CDH/lib/hive/apache-hive-1.2.1-bin/scripts/metastore/upgrade/mysql
mysqldump -uroot -p[你的Mysql密码]
从目录下登录MySQL,手动进行元数据初始化操作。
use hive;
source upgrade-0.13.0-to-0.14.0.mysql.sql;
source upgrade-0.14.0-to-1.1.0.mysql.sql;
source upgrade-1.1.0-to-1.2.0.mysql.sql;
exit
进入clouderaWeb管理界面,启动Hive和其余关闭的组件。进入hive查看数据,并无数据丢失。
hive
show databases;
show tables;
成功后,若不需要1.1.0的元数据备份可以删掉,建议保留一下以防万一。