国产化适配鲲鹏arm环境:hive on tez 单节点部署实践问题总结

国产化适配鲲鹏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。

    ruby 复制代码
    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。

    ruby 复制代码
    rm -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
  1. 检查 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>
  1. 同步配置并重启服务
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 &                      # 重启元数据服务
  1. 验证辅助服务状态
bash 复制代码
# 检查 NodeManager 日志
tail -f /var/log/hadoop-yarn/yarn-yarn-nodemanager-*.log

# 应出现类似记录:
# "Initialized ShuffleHandler with mapreduce_shuffle"
  1. 修复 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>
  1. 彻底清理 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
...
  1. 登录server1节点。将编译的安装包复制到"/usr/local"目录并将安装包名称修改为apache-tez-0.10.0-bin.tar.gz,进入该目录。

    bash 复制代码
    cp tez-0.10.0.tar.gz /usr/local/apache-tez-0.10.0-bin.tar.gz
    cd /usr/local
  2. 创建"/apache-tez-0.10.0-bin"目录,并解压安装包至"/apache-tez-0.10.0-bin"目录。

    python 复制代码
    mkdir apache-tez-0.10.0-bin
    tar -zxvf apache-tez-0.10.0-bin.tar.gz -C apache-tez-0.10.0-bin
  3. 进入"/usr/local/apache-tez-0.10.0-bin/lib"目录。

    bash 复制代码
    cd /usr/local/apache-tez-0.10.0-bin/lib
  4. Tez编译完成的snappy-java-1.0.5.jar不适配鲲鹏服务器,查询是否存在snappy-java-1.0.5.jar。

    • 若不存在,则下载适配鲲鹏服务器的snappy-java-1.0.5.jar。

      ruby 复制代码
      ll
      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。

      ruby 复制代码
      ll
      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
  5. 返回"/usr/local"目录,创建软链接。

    bash 复制代码
    cd /usr/local
    ln -s apache-tez-0.10.0-bin /usr/local/tez
  6. 创建配置文件tez-site.xml。

    1. 创建"/usr/local/tez/conf"目录并进入该目录。

      bash 复制代码
      mkdir -p /usr/local/tez/conf
      cd /usr/local/tez/conf
    2. 创建tez-site.xml文件。

      复制代码
      vi tez-site.xml
    3. 按"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>
    4. 按"Esc"键,输入 :wq! ,按"Enter"保存并退出编辑。

  7. 上传Tez安装包到HDFS。

    1. 进入"/usr/local/tez"目录,并将当前文件和目录打包至tez.tar.gz文件。

      bash 复制代码
      cd /usr/local/tez
      tar -czvf ../tez.tar.gz .
    2. 返回上层目录。

      bash 复制代码
      cd ..
    3. 在HDFS上创建目录。

      bash 复制代码
      hdfs dfs -mkdir -p /apps/tez/
    4. 防止HDFS上有残留文件,删除旧的tez.tar.gz文件。

      bash 复制代码
      hdfs dfs -rmr /apps/tez/tez.tar.gz
    5. 将压缩的包上传至"/apps/tez"目录。

      bash 复制代码
      hdfs dfs -put ./tez.tar.gz /apps/tez/
      rm -rf ./tez.tar.gz
  8. 修改Hadoop的配置文件hadoop-env.sh,同步该操作至所有节点。

    1. 本次使用的环境Hadoop的配置目录在"/usr/local/hadoop/etc/hadoop",进入该目录。

      bash 复制代码
      cd /usr/local/hadoop/etc/hadoop
    2. 打开hadoop-env.sh文件。

      复制代码
      vi hadoop-env.sh
    3. 按"i"进入编辑模式,在文件末尾添加下列配置。

      bash 复制代码
      export 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/*
    4. 按"Esc"键,输入 :wq! ,按"Enter"保存并退出编辑。

参考

部署Tez

相关推荐
jzy37111 天前
国产化适配鲲鹏arm环境:hive on tez 单节点部署实践总结
linux·hadoop·apache hive
武子康1 个月前
大数据-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog
大数据·后端·apache hive
武子康2 个月前
大数据-14-Hive HQL 表连接查询 HDFS导入导出 逻辑运算 函数查询 全表查询
大数据·后端·apache hive
jzy37114 个月前
Hive疑难杂症全攻克:从分隔符配置到权限避坑实战指南
大数据·apache hive
齐朋5 个月前
Hive架构原理解析:从数据存储到SQL执行的全流程
大数据·apache hive
DannyIdea9 个月前
Hive的实践记录
大数据·apache hive
青云交10 个月前
大数据新视界 --大数据大厂之 DataFusion:超越传统的大数据集成与处理创新工具
数据库·内存管理·apache hive·数据集成·大数据处理·datafusion·查询处理·powercenter
有数的编程笔记1 年前
HiveQL和SparkSQL中的正则
spark·apache hive