0738-6.2.0-如何在Hive中使用多分隔符

吃可爱长大的小学妹 提交于 2020-02-06 08:19:37

​文档编写目的

 

Hive在0.14及以后版本支持字段的多分隔符,参考:

https://cwiki.apache.org/confluence/display/Hive/MultiDelimitSerDe

而Fayson在以前的文章中也基于C5的环境介绍过如何在Hive中使用多分隔符,参考《Hive多分隔符支持示例》。本文主要介绍在CDH6中如何让Hive支持多分隔符。

 

  • 测试环境

1.Redhat7.2

2.CDH6.2.0

3.Hive2.1

 

数据准备

 

如何将多个字符作为字段分割符的数据文件加载到Hive表中,示例数据如下:

字段分隔符为“@#$”

test1@#$test1name@#$test2valuetest2@#$test2name@#$test2valuetest3@#$test3name@#$test4value

如何将上述示例数据加载到Hive表(multi_delimiter_test)中,表结构如下:

 

0738-6.2.0-如何在Hive中使用多分隔符

 

 

实现方式

 

1.从CM进入Hive,点击配置搜索aux,在Hive 辅助 JAR 目录 中输入/opt/cloudera/parcels/CDH/lib/hive/contrib,保存更改,重启。

0738-6.2.0-如何在Hive中使用多分隔符

 

 

2.准备多分隔符文件并装载到HDFS对应目录

[root@cdh1~]#ll-hmulti_de.txt-rw-r--r--1rootroot1.1GJan623:14multi_de.txt[root@cdh1~]#tail-10multi_de.txttest2949@#$test2949name@#$test2950valuetest2950@#$test2950name@#$test2951valuetest2951@#$test2951name@#$test2952valuetest2952@#$test2952name@#$test2953valuetest2953@#$test2953name@#$test2954valuetest2954@#$test2954name@#$test2955valuetest2955@#$test2955name@#$test2956valuetest2956@#$test2956name@#$test2957valuetest2957@#$test2957name@#$test2958valuetest2958@#$test2958name@#$test2959value[root@cdh1~]#hadoopfs-putmulti_de.txt/test/[root@cdh1~]#hadoopfs-ls/test/Found1items-rw-r--r--3rootsupergroup10794087722020-01-0623:33/test/multi_de.txt

0738-6.2.0-如何在Hive中使用多分隔符

 

 

3.基于准备好的多分隔符文件建表

createexternaltablemulti_delimiter_test(s1string,s2string,s3string)ROWFORMATSERDE'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'WITHSERDEPROPERTIES("field.delim"="@#$")storedastextfilelocation'/test';

0738-6.2.0-如何在Hive中使用多分隔符

 

 

4.测试

0:jdbc:hive2://localhost:10000/>select*frommulti_delimiter_testlimit10;

0738-6.2.0-如何在Hive中使用多分隔符

 

0:jdbc:hive2://localhost:10000/>selectcount(*)frommulti_delimiter_test;

0738-6.2.0-如何在Hive中使用多分隔符

 

 

常见问题

 

1.在执行HQL时报错

Error:Errorwhilecompilingstatement:FAILED:RuntimeExceptionMetaException(message:java.lang.ClassNotFoundExceptionClassorg.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDenotfound)(state=42000,code=40000)

0738-6.2.0-如何在Hive中使用多分隔符

 

这是由于没有指定Hive 的辅助 JAR 目录,导致找不到类。需要按照在Cloudera Manager中指定Hive的辅助JAR目录,然后重启,再次查询即可。目录的路径为/opt/cloudera/parcels/CDH/lib/hive/contrib

0738-6.2.0-如何在Hive中使用多分隔符

 

0738-6.2.0-如何在Hive中使用多分隔符

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!