前言HIVE SHELL调整
报错解决方案 BEELINE调整
报错解决方案 SPARK调整
解决方案 后记
前言大数据平台数据入湖逻辑执行方式从Impala改为beeline(连接hive)的方式后,在sql语句层面上做了一些调整(如DDL语句、分区字段等)。而后又发现,切换后hive默认不支持多字符作为行分隔符,设置多个字符==!@!==,但只会识别第一个字符!,后续@会被当做字段值识别,导致数据被污染:
…… ROW FORMAT DELIMITED FIELDS TERMINATED BY '!@!' ……HIVE SHELL调整
于是调整一下建表语句:
…… ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' WITH SERDEPROPERTIES ('field.delim'='!@!') ……报错
hive shell执行报错:
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at org.apache.hadoop.hive.ql.plan.TableDesc.getDeserializerClass(TableDesc.java:72) ... 32 more解决方案
找到CDH hive的依赖包路径,找到contrib目录:
[root@bigd-dev014-10 hive]# pwd /app/dolphinscheduler/CDH/lib/hive [root@bigd-dev014-10 hive]# ll total 108 drwxr-xr-x 2 root root 4096 Jan 18 18:35 auxlib drwxr-xr-x 3 root root 4096 Dec 7 2018 bin drwxr-xr-x 2 root root 4096 Dec 7 2018 cloudera lrwxrwxrwx 1 root root 14 Dec 7 2018 conf -> /etc/hive/conf drwxr-xr-x 2 root root 4096 Dec 7 2018 contrib drwxr-xr-x 3 root root 4096 Dec 7 2018 data drwxr-xr-x 6 root root 4096 Dec 7 2018 docs drwxr-xr-x 2 root root 4096 Dec 7 2018 jdbc drwxr-xr-x 4 root root 16384 Dec 7 2018 lib -rw-r--r-- 1 root root 29003 Dec 7 2018 LICENSE -rw-r--r-- 1 root root 578 Dec 7 2018 NOTICE -rw-r--r-- 1 root root 18501 Dec 7 2018 RELEASE_NOTES.txt drwxr-xr-x 4 root root 4096 Dec 7 2018 scripts drwxr-xr-x 3 root root 4096 Dec 7 2018 sentry
将contrib目录下的hive-contrib-2.1.1-cdh6.1.0.jar包拷贝至auxlib目录下:
cp contrib/hive-contrib-2.1.1-cdh6.1.0.jar auxlib/
重启hive shell执行ddl语句,问题解决。
BEELINE调整使用beeline执行刚刚的DDL语句:
beeline --verbose=true -u "jdbc:hive2://XXX.XXX.XXX.XXX:XXXX/" -n hive -d org.apache.hive.jdbc.HiveDriver -e "XXXXXXXXXXX"报错
仍旧报错:
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at org.apache.hadoop.hive.ql.plan.TableDesc.getDeserializerClass(TableDesc.java:72) ... 32 more解决方案
去CDH上找到hive server角色所在的主机IP,登录上去,然后依旧是找到contrib目录下的hive-contrib-2.1.1-cdh6.1.0.jar包拷贝至auxlib目录下,问题再度解决。
SPARK调整在spark-shell内执行spark sql依旧报错:
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at org.apache.hadoop.hive.ql.plan.TableDesc.getDeserializerClass(TableDesc.java:72) ... 32 more解决方案
去所有spark节点上,找到spark依赖路径:
root@bdtest06 spark]# pwd /opt/cloudera/parcels/CDH-6.1.0-1.cdh6.1.0.p0.770702/lib/spark [root@bdtest06 spark]# ll total 160 drwxr-xr-x 2 root root 4096 Dec 7 2018 bin drwxr-xr-x 2 root root 4096 Dec 7 2018 cloudera lrwxrwxrwx 1 root root 15 Dec 7 2018 conf -> /etc/spark/conf drwxr-xr-x 3 root root 4096 Dec 7 2018 examples drwxr-xr-x 2 root root 4096 Dec 7 2018 hive drwxr-xr-x 2 root root 12288 Jan 18 21:19 jars -rw-r--r-- 1 root root 21357 Dec 7 2018 LICENSE -rw-r--r-- 1 root root 42919 Dec 7 2018 NOTICE drwxr-xr-x 7 root root 4096 Dec 7 2018 python -rw-r--r-- 1 root root 49364 Dec 7 2018 python.tar.gz -rw-r--r-- 1 root root 376 Dec 7 2018 RELEASE drwxr-xr-x 2 root root 4096 Dec 7 2018 sbin lrwxrwxrwx 1 root root 19 Dec 7 2018 work -> /var/run/spark/work
将hive-contrib-2.1.1-cdh6.1.0.jar包拷贝至jars目录下的依赖包路径:
cp ../hive/contrib/hive-contrib-2.1.1-cdh6.1.0.jar jars/
注意,这里是每个spark节点都要进行该拷贝 *** 作,之后问题解决。
后记基本上均是因为运行环境中的hive-contrib-2.1.1-cdh6.1.0.jar缺失引起的,有另一种方式是修改hive-site.xml中的hive.aux.jars.pat配置值来指定hive-contrib-2.1.1-cdh6.1.0.jar的位置,因为我的节点hive-contrib-2.1.1-cdh6.1.0.jar包位置并不统一,且节点数比较少,就手动cp解决了该问题。
采用哪种方案可视自己的集群情况而定,如遇问题下方留言交流。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)