欢迎光临
我们一直在努力

hive on spark/mr 启动慢/报错:NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration

Hive-on-Spark模式启动HiveServer2时,出现NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration。从堆栈跟踪看,HiveServer2在启动时尝试初始化Tez会话池,但我们实际上使用的是Spark执行引擎,因此需要避免Tez相关的初始化。

版本:hive 3.x;spark 3.x

解决方案:

1. 禁用Tez相关功能

在 hive-site.xml 中添加以下配置:

注意:

最有效的方法是组合使用:

  • 设置 hive.server2.tez.sessions.per.default.queue=0
  • 设置 hive.server2.tez.initialize.default.sessions=false
  • Hive 3.x 不能识别 hive.tez.session.pool.enabled与hive.server2.tez.session.pool.enabled

    <!– 可选优化:禁用Tez自动初始化,进一步减少HS2启动耗时 –>
    <property>
    <name>hive.server2.tez.initialize.default.sessions</name>
    <value>false</value>
    <description>禁止HS2启动时自动创建Tez默认会话</description>
    </property>
    <property>
    <name>hive.server2.tez.sessions.per.default.queue</name>
    <value>0</value>
    <description>每个队列的Tez会话数为0</description>
    </property>

    <!– 优化:关闭HS2的Web UI无关日志,减少资源消耗 –>
    <property>
    <name>hive.server2.webui.logging.enabled</name>
    <value>false</value>
    </property>

    <!– H2高可用参数,开启此参数可以提高hiveserver2的启动速度 –>
    <property>
    <name>hive.server2.active.passive.ha.enable</name>
    <value>true</value>

    <!– 关闭Tez DAG访问 – 重要 –>
    <property>
    <name>hive.server2.tez.dag.access.check.enabled</name>
    <value>false</value>
    </property>

    <!– 禁用Tez DAG提交 –>
    <property>
    <name>hive.tez.auto.reducer.parallelism</name>
    <value>false</value>
    </property>
    </property>

    其它【自行选择】
    <!– 添加Spark主节点配置 –>
    <property>
    <name>spark.master</name>
    <value>yarn</value>
    </property>

    <property>
    <name>spark.submit.deployMode</name>
    <value>cluster</value>
    </property>

    2. 从类路径中移除Tez JAR(推荐)

    # 查看是否有tez相关的jar
    # 进入 Hive 的 lib 目录
    cd $HIVE_HOME/lib
    ls -la | grep tez
    或:
    find /opt/installs/apache-hive-3.1.2-bin -name "*tez*.jar"

    # 如果有,移动到备份目录
    sudo mkdir -p /opt/installs/temp
    sudo mv tez*.jar /opt/installs/tez_backup/ 2>/dev/null || echo "No tez jars found"

    #或直接删除所有 Tez 相关的 JAR 包
    rm -f tez-*.jar
    rm -f hadoop-yarn-*.jar # Tez 依赖的 Hadoop 依赖包(通常包含 Tez 类)

    # 检查 Hive lib 目录是否还残留 Tez JAR
    2ls $HIVE_HOME/lib | grep -E 'tez|yarn'

    💡 为什么需要移除 tez*.jar、hadoop-yarn-*.jar?
    类加载发生在配置解析前,必须移除 JAR;hive 配置仅阻止 Tez 会话池,无法阻止 HiveServer2 尝试加载 Tez 类;Tez 依赖的 Hadoop YARN JAR 包中可能包含 Tez 类(如 TezConfiguration),即使不使用 Tez,Hive 也会尝试加载这些类。

    3. 重启步骤

    # 1. 停止所有Hive服务
    ps aux | grep hiveserver2 | grep -v grep | awk '{print $2}' | xargs kill -9

    # 2. 清除临时文件
    rm -rf /tmp/hive* /tmp/root/

    #3.前台启动便于观察日志
    $HIVE_HOME/bin/hive –service hiveserver2

    # 4. 查看日志确认
    tail -f /opt/installs/hive/logs/hiveserver2.log

    4. 验证启动成功

    # 检查进程
    jps | grep RunJar

    # 查看端口监听
    netstat -tlnp | grep 10000

    # 连接测试
    $HIVE_HOME/bin/beeline -u jdbc:hive2://node01:10000 -n root
    #连接成功,执行查询并查看执行引擎
    SET hive.execution.engine;
    — 应输出:spark

    好

    赞(0)
    未经允许不得转载:171主机测评 » hive on spark/mr 启动慢/报错:NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址