上一篇博客的地址 : https://blog.csdn.net/weixin_38822045/article/details/87973419
第一:在上一篇博客解决了,Hive与ElasticSerach在Linux中集成出现的 ClassNotFoundException之后,通过Beeline操作之后,Beeline.distro 脚本里面 添加了
"$bin"/hive --service beeline "$@" -hiveconf hive.aux.jars.path=file:///usr/hdp/elasticsearch_hadoop.jar
在用Java代码,通过JDBC操作的时候,远程提交,会同样出现ClassNotFoundException,
至此,在Linux 出现的异常问题,重新出现了,查看 yarn运行界面 localhost:8088,查看MR 运行日志,发现是和Linux上缺少集成Jar是一样的异常,ClassNotFoundException,知道问题在此处,查看下 JDBC連接,发现使用JDBC连接的时候,调用的客户端并非是 Beeline客户端,而是 Java的客户端,如果调用的是Beeline客户端,集成Jar就会直接添加到当前会话,但是,Java客户端并没有 将集成jar添加到Hive的会话中,所以会出现异常
上述描述,已经知道了问题所在,现在需要将远程Java代码时,将Es集成Jar 同事提交到服务器,才不会运行异常
尝试过,多种方案,将Jar 分别都拷贝到 MR,Yarn,hive的各自Lib 里面去,运行的时候,还是运行ClassNotFoundException
至此,可以了解到,是因为 在运行这个请求的时候,并没有加载这个集成jar,找不到 集成Jar的位置,一直存在异常!
分析原因: 运行时 并没有加载Jar,但是Jar 却放到了对应的文件夹下面,所以问题出在,运行环境的问题
解决方案:配置Yarn和MR的运行环境【ClassPath】,
ClassPath:$PWD/mr-framework/hadoop/share/hadoop/mapreduce/*:$PWD/mr-framework/hadoop/share/hadoop/mapreduce/lib/*:$PWD/mr-framework/hadoop/share/hadoop/common/*:$PWD/mr-framework/hadoop/share/hadoop/common/lib/*:$PWD/mr-framework/hadoop/share/hadoop/yarn/*:$PWD/mr-framework/hadoop/share/hadoop/yarn/lib/*:$PWD/mr-framework/hadoop/share/hadoop/hdfs/*:$PWD/mr-framework/hadoop/share/hadoop/hdfs/lib/*:$PWD/mr-framework/hadoop/share/hadoop/tools/lib/*:/usr/hdp/${hdp.version}/hadoop/lib/hadoop-lzo-0.6.0.${hdp.version}.jar:/etc/hadoop/conf/secure:/usr/hdp/*
MR 的ClassPath添加:,/usr/hdp/* 前面的为系统默认的
红色为自己添加,然后集成Jar在 /usr/hdp/elasticserach-hadoop.jar 下面,
Yarn的 ClassPath添加同样:
Yarn :$HADOOP_CONF_DIR,/usr/hdp/current/hadoop-client/*,/usr/hdp/current/hadoop-client/lib/*,/usr/hdp/current/hadoop-hdfs-client/*,/usr/hdp/current/hadoop-hdfs-client/lib/*,/usr/hdp/current/hadoop-yarn-client/*,/usr/hdp/current/hadoop-yarn-client/lib/*,/usr/hdp/*
红色为自己添加,重启MR,YARN服务器,再次通过 Java远程提交即可!
不会出现任何异常
远程操作方案解决