首页 > 其他 > 详细

Hive输入输出记录的过程

时间:2014-02-28 13:06:11      阅读:562      评论:0      收藏:0      [点我收藏+]

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设定参数,指定只读取需要的列。

Hive输入输出记录的过程,布布扣,bubuko.com

Hive输入输出记录的过程

原文:http://blog.csdn.net/wyc09/article/details/20036917

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!