设为首页 加入收藏

TOP

hive:textfile,sequencefile和rcfile的使用与区别详解
2019-05-02 01:03:11 】 浏览:53
Tags:hive textfile sequencefile rcfile 使用 区别 详解

hive在创建表时默认存储格式是textfile,或者显示自定义的stored as textfile.很多人知道hive常用的存储格式有三种,textfile,sequencefile,rcfile.但是却说不清楚这三种格式的干什么用的,本质有有什么区别?适合什么时候用?
为什么hive会有多种存储格式?因为hive是文本批处理系统,所以就存在一个往hive中导入数据的问题,首先数据的存储格式有多种,比如数据源是二进制格式, 普通文本格式等等,而hive强大之处不要求数据转换成特定的格式,而是利用hadoop本身InputFormat API来从不同的数据源读取数据,同样地使用OutputFormat API将数据写成不同的格式。所以对于不同的数据源,或者写出不同的格式就需要不同的对应的InputFormat和Outputformat类的实现。

以stored as textfile(其实这就是下面stored as inputformat -outputformat的缩减写法)为例,其在底层java API中表现是输入InputFormat格式:TextInputFormat以及输出OutputFormat格式:HiveIgnoreKeyTextOutputFormat.这里InputFormat中定义了如何对数据源文本进行读取划分,以及如何将切片分割成记录存入表中。而Outputformat定义了如何将这些切片写回到文件里或者直接在控制台输出。

STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
实际上hive使用一个TextInputFormat对象将输入流分割成记录,然后使用一个HiveIgnoreKeyTextOutputFormat对象来将记录格式化为输出流(比如查询的结果),再使用Serde在读数据时将记录解析成列。在写数据时将列编码成记录。所以stored as ''只是决定了行级别(记录级别 )的存储格式,而实际将记录解析成列依靠的则是Serde对象,比如hive默认的ROW FORMAT SERDE'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'。或者用户自定义的Serde格式。

textfile,sequencefile和rcfile的三种存储格式的本质和区别

虽然hive中常见的有3种存储格式,但是这三种存储格式的数据可以相互转化,而且不需要对应的转换工具。具体如何转换,参考下面博客。

原文参考:https://blog.csdn.net/qq_26442553/article/details/80300714

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hive字段中文注释乱码解决办法 下一篇hive函数,hive自定义函数,hive..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目