Exception in thread main java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration

hive on tez,为了这个配置今天是第四天了,MLGB的!!!

################################环境配置如下##########################################

软件 版本
Hadoop 3.1.2
Hive 3.0.0
Tez 0.9.2

###################################################################################################

这个报错是在启动hive客户端的时候触发了。

######################################下面是解决方案#####################################

直接说解决方案:

~/.bashrc中加入(应该也可以是$HADOOP_HOME/etc/hadoop/hadoop-env.sh,根据自己喜好即可)

export TEZ_HOME=/home/appleyuchi/bigdata/apache-tez-0.9.2-bin
for jar in `ls $TEZ_HOME |grep jar`; do
    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_HOME/$jar
done
for jar in `ls $TEZ_HOME/lib`; do
    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_HOME/lib/$jar
done

然后source ~/.bashrc

不用重启任何集群

重新启动hive客户端,就会发现报错消失。

##############################下面是错误配置的分析(可以跳过不看)##############################

注意:

有些同学非常自信(我一开始也是这样),

写成如下:

export TEZ_CONF_DIR=$TEZ_HOME/conf
export TEZ_JARS=$TEZ_HOME/*:$TEZ_HOME/lib/*
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_CONF_DIR:$TEZ_JARS
export HIVE_AUX_JARS_PATH=$HADOOP_HOME/share/hadoop/common/hadoop-lzo-0.4.13.jar:$TEZ_JARS

上述写法写法会导致报错

②ERROR [main] common.FileUtils: The jar file path file:///home/appleyuchi/bigdata/apache-tez-0.9.2-bin/* doesn't exist

然后无论你写成:

export TEZ_JARS=$TEZ_HOME/*

export TEZ_JARS=$TEZ_HOME/*.jar

export TEZ_JARS=$TEZ_HOME

都会报类似②的错误

有人反驳:

但是我以前写别的环境变量的时候明明就是这么写的啊(例如CLASSPATH),为什么设置TEZ环境变量的时候不是这么写?

因为TEZ对环境变量的处理方式比较特殊,所以你就老老实实照着写吧

你要注意,这个环境变量是被TEZ的脚本获取之后进行处理,不同软件在获取环境变量后的处理方式不同,处理方式的不同也就意味着你的环境变量的写法可能不同。

你可以回想下,你用python读取数据的时候,这个数据是有特定格式要求的。

###################################################################################################

Reference:

https://www.bbsmax.com/A/q4zVWZexJK/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章