国产化适配鲲鹏arm环境:hive on tez 单节点部署实践问题总结
本文详细指导如何在已安装Java的鲲鹏服务器环境下,从下载Hadoop开始,依次配置环境变量、YARN和HDFS设置,然后安装并配置Hive数据库和tez单机版,最后验证服务运行。遇到的问题及解决方法。
org.xerial.snappy.Snappy不兼容arm

shell
org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Linux and os.arch=aarch64
Tez编译完成的snappy-java-1.0.5.jar不适配鲲鹏服务器,查询是否存在snappy-java-1.0.5.jar。
-
若不存在,则下载适配鲲鹏服务器的snappy-java-1.0.5.jar。
rubywget https://repo.huaweicloud.com/kunpeng/maven/org/xerial/snappy/snappy-java/1.0.5/snappy-java-1.0.5.jar
-
若存在,则删除snappy-java-1.0.5.jar后,下载适配鲲鹏服务器的snappy-java-1.0.5.jar。
rubyrm -rf snappy-java-1.0.5.jar wget https://repo.huaweicloud.com/kunpeng/maven/org/xerial/snappy/snappy-java
切到tez yarn一直分配不了资源
查看日志使用 yarn logs
shell
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException): Invalid resource request! Cannot allocate containers as requested resource is less than 0! Requested resource type=[memory-mb], Requested resource=<memory:-1, vCores:1>
解决
xml
<name>hive.tez.container.size</name>
<value>2048</value>
</property>
<name>tez.am.resource.memory.mb</name>
<value>2048</value>
</property>
注意这里的2048都需要大于等于yarn.scheduler.minimum-allocation-mb
mapreduce_shuffle does not exist
shell
Caused by: java.util.concurrent.ExecutionException: org.apache.tez.dag.api.SessionNotRunning: TezSession has already shutdown. Application application_1753241207469_0006 failed 2 times due to Error launching appattempt_1753241207469_0006_000002. Got exception: org.apache.hadoop.yarn.exceptions.InvalidAuxServiceException: The auxService:mapreduce_shuffle does not exist
- 检查 YARN 配置 (
yarn-site.xml
)
确保包含以下关键配置:
xml
<configuration>
<!-- 添加 mapreduce_shuffle 服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- 确保类路径包含 Tez -->
<property>
<name>yarn.application.classpath</name>
<value>
/etc/hadoop/conf,
/opt/hadoop-3.3.6/share/hadoop/common/*,
/opt/hadoop-3.3.6/share/hadoop/common/lib/*,
/opt/hadoop-3.3.6/share/hadoop/hdfs/*,
/opt/hadoop-3.3.6/share/hadoop/hdfs/lib/*,
/opt/hadoop-3.3.6/share/hadoop/mapreduce/*,
/opt/hadoop-3.3.6/share/hadoop/mapreduce/lib/*,
/opt/hadoop-3.3.6/share/hadoop/yarn/*,
/opt/hadoop-3.3.6/share/hadoop/yarn/lib/*,
/opt/tez/*, <!-- 添加 Tez 路径 -->
/opt/tez/lib/* <!-- 添加 Tez 库 -->
</value>
</property>
</configuration>
- 同步配置并重启服务
shell
# 同步配置到所有节点
scp yarn-site.xml node1:/etc/hadoop/conf/
scp yarn-site.xml node2:/etc/hadoop/conf/
# 重启 YARN 服务
stop-yarn.sh
start-yarn.sh
# 重启 Tez 相关服务
kill -9 $(jps | grep RunJar | awk '{print $1}') # 停止 HiveServer2
hive --service metastore & # 重启元数据服务
- 验证辅助服务状态
bash
# 检查 NodeManager 日志
tail -f /var/log/hadoop-yarn/yarn-yarn-nodemanager-*.log
# 应出现类似记录:
# "Initialized ShuffleHandler with mapreduce_shuffle"
- 修复 Hive 配置(可选)
如果问题仍存在,在 hive-site.xml
中显式指定 Shuffle Handler:
xml
<property>
<name>tez.runtime.shuffle.keep-alive.enabled</name>
<value>true</value>
</property>
<property>
<name>tez.runtime.shuffle.ssl.enable</name>
<value>false</value>
</property>
- 彻底清理 YARN 缓存
bash
# 清除 YARN 缓存(在所有节点执行)
rm -rf /tmp/hadoop-yarn/staging/*
rm -rf /tmp/*tez*
hdfs dfs -rm -r /tmp/.staging/*
# 重启集群
stop-all.sh
start-all.sh
启动hive找不到tez的包
shell
...
Localizing resource because it does not exist: file:/home/kpnre/software/tez-0.10.0/lib/jackson-jaxrs-1.9.2.jar to dest: hdfs://10.19.198.29:8020/tmp/hive/kpnre/_tez_session_dir/6637e19f-c6c1-4864-9ec0-acc43cfee601-resources/jackson-jaxrs-1.9.2.jar
...
-
登录server1节点。将编译的安装包复制到"/usr/local"目录并将安装包名称修改为apache-tez-0.10.0-bin.tar.gz,进入该目录。
bashcp tez-0.10.0.tar.gz /usr/local/apache-tez-0.10.0-bin.tar.gz cd /usr/local
-
创建"/apache-tez-0.10.0-bin"目录,并解压安装包至"/apache-tez-0.10.0-bin"目录。
pythonmkdir apache-tez-0.10.0-bin tar -zxvf apache-tez-0.10.0-bin.tar.gz -C apache-tez-0.10.0-bin
-
进入"/usr/local/apache-tez-0.10.0-bin/lib"目录。
bashcd /usr/local/apache-tez-0.10.0-bin/lib
-
Tez编译完成的snappy-java-1.0.5.jar不适配鲲鹏服务器,查询是否存在snappy-java-1.0.5.jar。
-
若不存在,则下载适配鲲鹏服务器的snappy-java-1.0.5.jar。
rubyll wget https://repo.huaweicloud.com/kunpeng/maven/org/xerial/snappy/snappy-java/1.0.5/snappy-java-1.0.5.jar
-
若存在,则删除snappy-java-1.0.5.jar后,下载适配鲲鹏服务器的snappy-java-1.0.5.jar。
rubyll rm -rf snappy-java-1.0.5.jar wget https://repo.huaweicloud.com/kunpeng/maven/org/xerial/snappy/snappy-java/1.0.5/snappy-java-1.0.5.jar
-
-
返回"/usr/local"目录,创建软链接。
bashcd /usr/local ln -s apache-tez-0.10.0-bin /usr/local/tez
-
创建配置文件tez-site.xml。
-
创建"/usr/local/tez/conf"目录并进入该目录。
bashmkdir -p /usr/local/tez/conf cd /usr/local/tez/conf
-
创建tez-site.xml文件。
vi tez-site.xml
-
按"i"进入编辑模式,将以下内容拷贝进文件中。
xml<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>tez.lib.uris</name> <value>${fs.defaultFS}/apps/tez/tez.tar.gz</value> </property> <property> <name>tez.use.cluster.hadoop-libs</name> <value>false</value> </property> <property> <name>tez.history.logging.service.class</name> <value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value> </property> <property> <name>tez.allow.disabled.timeline-domains</name> <value>true</value> </property> <property> <name>tez.tez-ui.history-url.base</name> <value>http://server1:8822/tez-ui</value> </property> </configuration>
-
按"Esc"键,输入 :wq! ,按"Enter"保存并退出编辑。
-
-
上传Tez安装包到HDFS。
-
进入"/usr/local/tez"目录,并将当前文件和目录打包至tez.tar.gz文件。
bashcd /usr/local/tez tar -czvf ../tez.tar.gz .
-
返回上层目录。
bashcd ..
-
在HDFS上创建目录。
bashhdfs dfs -mkdir -p /apps/tez/
-
防止HDFS上有残留文件,删除旧的tez.tar.gz文件。
bashhdfs dfs -rmr /apps/tez/tez.tar.gz
-
将压缩的包上传至"/apps/tez"目录。
bashhdfs dfs -put ./tez.tar.gz /apps/tez/ rm -rf ./tez.tar.gz
-
-
修改Hadoop的配置文件hadoop-env.sh,同步该操作至所有节点。
-
本次使用的环境Hadoop的配置目录在"/usr/local/hadoop/etc/hadoop",进入该目录。
bashcd /usr/local/hadoop/etc/hadoop
-
打开hadoop-env.sh文件。
vi hadoop-env.sh
-
按"i"进入编辑模式,在文件末尾添加下列配置。
bashexport TEZ_CONF_DIR=/usr/local/tez/conf/tez-site.xml export TEZ_JARS=/usr/local/tez export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${TEZ_CONF_DIR}:${TEZ_JARS}/*:${TEZ_JARS}/lib/*
-
按"Esc"键,输入 :wq! ,按"Enter"保存并退出编辑。
-