时间: 2020-09-19|58次围观|0 条评论

Hive不同文件的读取对比

stored as textfile

直接查看hdfs
hadoop fs -text

hive> create table test_txt(name string,val string) stored as textfile;

Hive不同文件的读取与序列化插图

stored as sequencefile

hadoop fs -text

hive> create table test_seq(name string,val string) stored as sequencefile;

Hive不同文件的读取与序列化插图1

stored as rcfile

hive –service rcfilecat path

hive>  create table test_rc(name string,val string) stored as rcfile;

Hive不同文件的读取与序列化插图2

stored as inputformat ‘class’自定义

outformat ‘class’
基本步骤:
1、编写自定义类
2、打成jar包
3、添加jar文件,hive> add jar /***/***/***.jar(当前生效)或者拷贝到hive安装目录的lib目录下,重启客户端(永久生效)。
4、创建表,指定自定义的类

Hive使用SerDe

SerDe是”Serializer”和”Deserializer”的简写。
Hive使用SerDe(和FileFormat)来读、写表的行。
读写数据的顺序如下:

HDFS文件-->InputFileFormat--><key,value>-->Deserializer-->Row对象

Row对象-->Serializer--><key,value>-->OutputFileFormat-->HDFS文件

Hive自带的序列化与反序列化
Hive不同文件的读取与序列化插图3

当然我们也可以自己实现自定义的序列化与反序列化
Hive自定义序列化与反序列化步骤
1、实现接口SerDe或者继承AbstractSerDe抽象类
2、重写里面的方法

Demo:

创建表

drop table apachelog;
create table apachelog( host string, identity string, user string, time string, request string, status string, size string, referer string, agent string ) row format serde 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' with serdeproperties( "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([^ ]*) ([^ ]*)" )stored as textfile;

Hive不同文件的读取与序列化插图4

cat serdedata
110.52.250.126 test user -  GET 200 1292 refer agent
27.19.74.143 test root - GET 200 680 refer agent

加载数据

load data local inpath '/liguodong/hivedata/serdedata' overwrite into table apachelog;

查看内容

select * from apachelog;
 select host from apachelog;

原文链接:https://blog.csdn.net/scgaliguodong123_/article/details/46885215

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《Hive不同文件的读取与序列化
   

还没有人抢沙发呢~