KDE大数据集群开启kerberos认证关于org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe not found的问题

it2022-05-05  141

原因:

      使用了GoldMount大数据集群(KDE)在spark提交任务之后,一直报org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe not found的错误。查找各种资料具体解决措施如下(以下配置同步集群全部节点):

(1)配置hive/conf 下的hive-site.xml :

<property> <name>hive.aux.jars.path</name> <value>file:///home/develop/hive-3.0.1/lib/hive-contrib-3.1.0.3.0.1-123.jar</value> </property>

 (2)配置spark/conf下的hive-site.xml:

<property> <name>hive.aux.jars.path</name> <value>file:///home/develop/hive-3.0.1/lib/hive-contrib-3.1.0.3.0.1-123.jar</value> </property>

(3)hive/conf/hive-env.sh中添加:

export HADOOP_HOME=${HADOOP_HOME:/usr/hdp/current/hadoop-client}

  (4) hadoop/etc/hadoop/hadoop-env.sh中将export HADOOP_CLASSPATH=.....修改为:

//一定要注意shell脚本中的空格问题!!! for f in $HADOOP_HOME/contrib/capacity-scheduler/*.jar; do if [ "$HADOOP_CLASSPATH" ]; then //此处[ " " ]一定要有空格,不然绝对会报错. export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f else export HADOOP_CLASSPATH=$f fi done

(5)将hive-3.0.1/lib/hive-contrib-3.1.0.3.0.1-123.jar这个jar包拷贝到如下路径:

cp hive-3.0.1/lib/hive-contrib-3.1.0.3.0.1-123.jar /usr/hadoop-yarn/lib/

(6)在spark submit提交任务时添加 --jars  引入hive-contrib-3.1.0.3.0.1-123.jar

//注意 后面的“ \ ”不能漏掉,否则可能会有个乱码一样的报错 spark-submit \ --keytab /home/hadoop/hadoop.keytab \ --principal hadoop@TEST.COM \ --class test.TestClassName \ --master yarn \ --name test \ --conf spark.local.dir=/home/hadoop/test_tmp \ --conf spark.shuffle.manager=SORT \ --conf spark.default.parallelism=16 \ --conf spark.ui.showConsoleProgress=true \ --driver-memory 2G --num-executors 4 \ --executor-cores 2 --executor-memory 4G \ --verbose \ --jars /hive/lib/hive-contrib-3.1.0.3.0.1-123.jar \ /home/hadoop/TEST.jar \ 1>/home/hadoop/TestClassName.log

经过上六步一顿猛如虎的操作配置,发现依然不起作用!!!

于是换个思路,使用登入spark-sql:(之前测试hive上相同的建表语句可以成功创建表,说明Hive没问题

spark-sql> use test; // 先创建一张最简单的表 spark-sql> create table test(name string,age string); spark-sql>吧啦吧啦吧啦....一堆提示信息后,提示建表成功。 //于是创建张复杂点点的表 spark-sql> create table if not exists test123(name string,age int) row format serde 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' with SERDEPROPERTIES ('field.delim'= '§') store as textfile tblproperties('serialization.encoding'='utf-8'); spark-sql>吧啦吧啦吧啦....一堆提示信息后报错,关键点来了org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe not found

以上通过spark-sql建表测试可以发现,问题应该出现在spark集成hive,应该是spark的某个地方缺少了hive-contrib-3.1.0.3.0.1-123.jar这个jar包,于是乎将 hive/lib下的hive-contrib-3.1.0.3.0.1-123.jar  拷贝到 /usr/current/spark2-client/standalone-metastore/目录下:

cp -r hive/lib/hive-contrib-3.1.0.3.0.1-123.jar /usr/current/spark2-client/standalonemetastore/

然后重启下spark集群(保险起见),再次运行,成功了!!!

总结:

   如果干完了前六步,依然报同样的错,那就可以大胆的怀疑,这是Spark的锅,肯定是缺少了hive-contrib-3.1.0.3.0.1-123.jar包的原因。

 


最新回复(0)