Hive输入输出记录的过程

转:http://blog.csdn.net/wyc09/article/details/20036917?utm_source=tuicool&utm_medium=referral

 

Hive作为一款构建于Hadoop之上的数据仓库系统,具有良好的异构数据源普遍适用性。Hive内部处理的是记录(Row),任何数据在被Hive处理之前都需要经过Hive的输入接口转成记录(Row)。在Hive中创建表后,Hive在MetaStore中为表存储了必要的元信息,其中有三项元信息用于指定外部数据的输入输出方式。

1)InputFormat。这项元信息是一个实现了Hadoop的数据输入接口(org.apache.hadoop.mapred.InputFormat)的Java类的名称。该实现类将来自外部数据源的数据转换成一系列的Key-Value对,这些Key-Value对的Value部分在后面被Hive用来生成记录。

2)SerDe。这项元信息是一个实 现了Hive中的org.apache.hadoop.hive.serde2.SerDe接口的Java类的名称。Hive从InputFormat获得的各个Key-Value对的Value部分是原始的Writable对象。而由SerDe指定的Java类负责将这些Writable对象转换成可在Hive内部处理的记录(Row),还负责将记录(Row)还原为原始的Writable对象。

3)OutputFormat。这项元信息是一个实现了Hadoop的数据输出接口(org.apache.hadoop.mapred.OutputFormat)的Java类的名称。从记录(Row)还原而来的Writable对象被进一步封装成Key-Value对,然后经过OutputFormat指定的Java类输出到外部数据源。

以上三项信息要么在建表时显式指定,要么由Hive赋缺省值。Hive用来存储记录数据的两种常用文件格式:文本文件和RCFile。

若按文本文件存储,元信息为:

SerDe Library:          org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
InputFormat:            org.apache.hadoop.mapred.TextInputFormat
OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

如果按RCFile存储,元信息为:

SerDe Library:          org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe
InputFormat:            org.apache.hadoop.hive.ql.io.RCFileInputFormat
OutputFormat:           org.apache.hadoop.hive.ql.io.RCFileOutputFormat

文本文件是按行存储,RCFile是按列存储。对于只涉及记录中的少数列的查询,如果记录存放在文本文件中,则不太容易跳过各条记录中不需要的列;而如果记录存在于RCFile中,则可以为RCFileInputFormat设定参数,指定只读取需要的列。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值