前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0738-6.2.0-如何在Hive中使用多分隔符

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

作者头像
Fayson
发布2020-02-10 10:12:12
1.2K0
发布2020-02-10 10:12:12
举报
文章被收录于专栏:Hadoop实操

文档编写目的

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

代码语言:javascript
复制
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表中,示例数据如下:

字段分隔符为“@#$”

代码语言:javascript
复制
test1@#$test1name@#$test2value
test2@#$test2name@#$test2value
test3@#$test3name@#$test4value

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

字段名

字段类型

s1

String

s2

String

s3

String

实现方式

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

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

代码语言:javascript
复制
[root@cdh1 ~]# ll -h multi_de.txt 
-rw-r--r-- 1 root root 1.1G Jan  6 23:14 multi_de.txt
[root@cdh1 ~]# tail -10 multi_de.txt 
test2949@#$test2949name@#$test2950value
test2950@#$test2950name@#$test2951value
test2951@#$test2951name@#$test2952value
test2952@#$test2952name@#$test2953value
test2953@#$test2953name@#$test2954value
test2954@#$test2954name@#$test2955value
test2955@#$test2955name@#$test2956value
test2956@#$test2956name@#$test2957value
test2957@#$test2957name@#$test2958value
test2958@#$test2958name@#$test2959value
[root@cdh1 ~]# hadoop fs -put multi_de.txt /test/
[root@cdh1 ~]# hadoop fs -ls /test/
Found 1 items
-rw-r--r--   3 root supergroup 1079408772 2020-01-06 23:33 /test/multi_de.txt

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

代码语言:javascript
复制
create external table multi_delimiter_test(
s1 string,
s2 string,
s3 string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' WITH SERDEPROPERTIES ("field.delim"="@#$")
stored as textfile location '/test';

4.测试

代码语言:javascript
复制
0: jdbc:hive2://localhost:10000/> select * from multi_delimiter_test limit 10;
代码语言:javascript
复制
0: jdbc:hive2://localhost:10000/> select count(*) from multi_delimiter_test;

常见问题

1.在执行HQL时报错

代码语言:javascript
复制
Error: Error while compiling statement: FAILED: RuntimeException MetaException(message:java.lang.ClassNotFoundException Class org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe not found) (state=42000,code=40000)

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档