father_1227头像

【ambari管理下hdp2.6.5升级hive1.2.1-2.1.0-2.3.3】

环境&背景:

Ambari2.6.2+HDP2.6.5

基础环境下,从ambari安装部署的hive的版本为1.2.1,而hdp2.6.5的官网支持包含着hive2.1.0

https://docs.cloudera.com/HDPDocuments/HDPforCloud/HDPforCloud-2.6.5/hdp-release-notes/content/hdp_comp_versions.html

目的:

将已经使用ambari安装的hive1.2.1版本升级到hive2.1.0版本,并且保证hive2.1.0.以及2.3.3被ambari正常管理。

两种方案:

注意:ambari进行的操作必须保证agent运行

方法一:

在ambari页面找到:

安装:HiveServer2 Interactive

为hive2.1.0的连接,Interactive主要有 LLAP进行交互式查询,这是hive2的特性,这也证明着此当前为hive2.X的,但是有个问题就是metastore还是hive1.2.1。这个方法的优点是简单,方便,快捷。在ambair页面操作HiveServer2 Interactive即可管理hive2。

是否可能存在其他使用问题暂不明确。

其他:

Llap:这里选择禁用:

方法二:

更改环境变量:

在ambari停止hive metstore

确定2.1.0的目录后将2.1的环境变量配置:

export HIVE_HOME=/usr/hdp/2.6.5.0-292/hive2

export PATH=$PATH:$HIVE_HOME/bin

刷新环境变量,并hive --version 检查版本,确定版本为所替换的版本:

更换ambari-a脚本中配置地址:

登录机器找到:

/var/lib/ambari-agent/cache/common-services/HIVE/0.12.0.2.0/package/scripts

下的status_params.py:

解释:status_params.py

status_params.py 脚本通常包括以下功能:

获取服务状态:通过与 Hive 服务交互,确定服务是否正在运行。

参数设置:定义和获取与 Hive 服务状态相关的参数,这些参数可能会被 Ambari 用于展示状态或者进行健康检查。

集成:将 Hive 状态信息集成到 Ambari 的管理框架中,使管理员能够通过 Ambari UI 查看 Hive 的状态。

通过更改脚本中的参数达到ambari管理hive的目的:

参数主要都在92行,定位到此处,原始:

更改为:

解释:参数修改内容:

hive_etc_dir_prefix:Hive 配置文件的目录前缀,要改成以hive2为准的地址

hive_home_dir:hive的安装目录,以此更改为hive2的做到偷梁换柱

hive_conf_dir:hive配置文件

hive_client_conf_dir:指定 Hive 客户端配置文件的目录

hive_server_conf_dir是server的目录不需更改。

其中{stack_root}不用更改,代表安装了整个大数据堆栈的根目录

要更改的为{component_directory}为hive2(疑问,这个是ambari创建的目录还是说自己定义的?)

登录ambari启动hivemetastore

并到机器上检查mstastore版本

为hiveserver2指定hive2:
  1. 同样更新环境变量
  2. 复制status_params脚本到指定位置
  3. 停止hiveserver2原本的进程(hive1.2.1的)
  4. 删除原本连接,并创建软连接:

  1. Ambari启动hiveserver2,并到机器检查是否为2.1的hive

升级2.3.3版本:

为了适配hive on spark :

这里使用得spark2所以要看下版本适配:

https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started#space-menu-link-content

下载apache-hive-2.3.3-bin.tar.gz:

上传到地址下并解压如:

这里不要直接进行复制,会导致脚本执行与jar未替换ambari启动报错:

找到位置:

脚本:

验证脚本:

export HIVE_CONF_DIR=/usr/hdp/current/hive-metastore/conf/conf.server ; /usr/hdp/current/hive-server2-hive2/bin/schematool -initSchema -dbType mysql -userName hive -passWord hive -verbose

报错:说明脚本替换不完整,jar得软连接指向不对

将bin.lib.scripts.jdbc目录全部删除:

 rm -rf bin/*\

...

将2.3.3下得copy到安装目录:

sudo cp -rvf /allinstall/apache-hive-2.3.3-bin/bin/* /usr/hdp/2.6.5.0-292/hive2/bin/

sudo cp -rvf /allinstall/apache-hive-2.3.3-bin/jdbc/* /usr/hdp/2.6.5.0-292/hive2/jdbc/

sudo cp -rvf /allinstall/apache-hive-2.3.3-bin/lib/* /usr/hdp/2.6.5.0-292/hive2/lib/

sudo cp -rvf /allinstall/apache-hive-2.3.3-bin/scripts/* /usr/hdp/2.6.5.0-292/hive2/scripts/

创建软连接脚本:

更改软连接脚本

编码设置:

sed -i 's/\r$//'脚本.sh

执行后到ambari执行启动:

同理更改hiveserver2也是同样得操作:

每个操作前将更改的在ambari上stop再操作

其他问题:

  1. Hive2的目录ambari自己定义创建的?

是的

  1. hive-client和hive-matestore的软连接不需要改么?

读取的环境变量?

需要。下面得告警是要改的

而metastore启动没改是因为实际读的还是hive1的配置

解决Instance Response告警问题:

把/usr/hdp/current/下得软连接包括hive-client,hive-metastore改为指向hive2:

测试mr和tez:

su hive

beeline -u "jdbc:hive2://slave01.example.com:2181,slave02.example.com:2181,slave03.example.com:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2"

mr没问题,主要是tez

替换tez包

替换hdfs上的tez包:

找不到缺失的文件,补充过去:

 cp /usr/hdp/2.6.5.0-292/hive2_backup/beeline.distro  /usr/hdp/2.6.5.0-292/hive2/bin/

mr没有问题,tez版本不匹配,需要更改

官网hive源码:

查看Hive源码:https://github.com/apache/hive/blob/rel/release-2.3.3/pom.xml下的pom文件

Hive:http://hive.apache.org/downloads.html

Tez:http://tez.apache.org/releases/apache-tez-0-8-4.html

下载地址:Index of /dist/tez/0.8.4

将旧的版本保存到,命令如下图

hadoop fs -get /hdp/apps/2.6.5.0-292/tez_hive2/tez.tar.gz /allinstall/

解压:apache-tez-0.8.4-bin.tar.gz

进入 tez 目录,上传tez目录下的 share/tez.tar.gz 到 hdfs 上(备份旧的删掉原来的,并且注意权限保持一致)

hadoop fs -mkdir /hdp/apps/2.6.5.0-292/tez/

hadoop fs -put tez.tar.gz /hdp/apps/2.6.5.0-292/tez/

到ambari下更改hive的配置:

替换服务器机器上的tez包:

将得到的包下的

/allinstall/apache-tez-0.8.4-bin/* 替换到所有安装tezclient的机器上

/usr/hdp/2.6.5.0-292/tez下

并且创建软连接:conf -> /etc/tez/2.6.5.0-292/0(可以使用ansible统一一次性创建)

重启hive和hiveserver2

beeline -u "jdbc:hive2://slave01.example.com:2181,slave02.example.com:2181,slave03.example.com:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2" -n hive -p hive

SELECT e.name, e.department, e.salary FROM employees e JOIN (SELECT MAX(salary) AS max_salary FROM employees) AS max_emp ON e.salary = max_emp.max_salary;

权限要改

hadoop fs -chmod -R 777 /hdp/apps/2.6.5.0-292/tez_hive2/

hadoop fs -chown -R hdfs:hadoop /hdp/apps/2.6.5.0-292/tez

查看安装目录是否包含ATSV15HistoryLoggingService:

grep -r ATSV15HistoryLoggingService

缺失包:

tez-yarn-timeline-history-with-fs-0.8.4.2.6.5.0-292.jar

tez-yarn-timeline-cache-plugin-0.8.4.2.6.5.0-292.jar

此为补充完的包:

将这两个缺失的包也放到hdfs中(单独拿share中的把包添加进去-这个暂时没有替换也是可以的,说明类没用到多出来的那两个包?)

替换后重启尝试,依旧报错:

Ambair检查环境变量,配置:
更改yarn的内容:

扩展内容:

- **故障转移方式**:

  - `ConfiguredRMFailoverProxyProvider`: 同步故障转移,按顺序尝试资源管理器。

  - `RequestHedgingRMFailoverProxyProvider`: 并行请求,减少请求延迟。

- **使用场景**:

  - `ConfiguredRMFailoverProxyProvider`: 适合于需要严格一致性的情况。

  - `RequestHedgingRMFailoverProxyProvider`: 适合于需要快速响应和高可用性的情况。

tez配置:

tez.history.logging.service.class 是 Apache Tez 中的一个配置属性,用于指定 Tez 历史日志记录服务的实现类,两个类只是针对不同版本的:yarn.timeline-service.version根据这个配置

tez.am.acls.enabled:权限控制 ,没必要关闭

tez.use.cluster.hadoop-libs:是否使用hadoop集群库, 使用集群库可以减少作业提交时的资源占用(因为不需要将库打包到每个作业中)

这这块我不明白,显示的1.5版本但是不能用15的,而且我没找到生产机器关于tez的配置是哪个?而且这些运行的大小配置改的合适么,现网的脚本很多,这个大小我担心不行,应该也要调整的吧,默认不是更好么

替换hive包:

在hive目录下创建extlib目录用来存放扩展包(并在脚本充补充环境配置(见hive配置)):

这里是整个的hive目录下的内容:

d

Hive配置:

tez目录统一一致

脚本中添加环境变量

export HADOOP_HOME=${HADOOP_HOME:-/usr/hdp/2.6.5.0-292/hadoop}

export HADOOP_MAPRED_HOME=${HADOOP_MAPRED_HOME:-/usr/hdp/2.6.5.0-292/hadoop-mapreduce}

export HADOOP_YARN_HOME=${HADOOP_YARN_HOME:-/usr/hdp/2.6.5.0-292/hadoop-yarn}

export HADOOP_LIBEXEC_DIR=${HADOOP_HOME}/libexec

export HIVE_AUX_JARS_PATH=/usr/hdp/2.6.5.0-292/hive2/extlib

尤其注意: HIVE_AUX_JARS_PATH 相当于对与hive增加一个三方扩展库。(具体所需包在上边的hive包中)

问题定位:

运行脚本例如:

beeline -u "jdbc:hive2://slave01.example.com:2181,slave02.example.com:2181,slave03.example.com:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2" -n hive

SELECT e.name, e.department, e.salary FROM employees e JOIN (SELECT MAX(salary) AS max_salary FROM employees) AS max_emp ON e.salary = max_emp.max_salary;

打开(基本流程)

http://x.x.x.x:8088/cluster/apps

?user.name=<用户名>

其他问题:

我平台连接时候写的hive地址是hiveserver2的,说明hive这个25005的端口也就是hiveserver2的ha地址,然后生成的我看了下一共有2个hiveserver2分别不住两台机器,

这个ha。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_41546244/article/details/169266095

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--