必威体育Betway必威体育官网
当前位置:首页 > IT技术

textfile,sequencefile和rcfile的使用与区别详解

时间:2019-06-18 07:44:12来源:IT技术作者:seo实验室小编阅读:77次「手机版」
 

file

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的三种存储格式的本质和区别

 文件存储编码格式建表时如何指定优点弊端
textfile     

文件存储就是正常的文本格式,将表中的数据在hdfs上 以文本的格式存储

,下载后可以直接查看,也可以使用cat命令查看

1.无需指定,默认就是

2.显示指定stored as textfile

3.显示指定 

STORED AS INPUTFORMAT 

 'org.apache.hadoop.mapred.TextInputFormat' 

OUTPUTFORMAT           'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

1.行存储使用textfile存储文件默认每一行就是一条记录,

2.可以使用任意的分隔符进行分割。

3.但无压缩,所以造成存储空间大。可结合Gzip、Bzip2、Snappy等使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。

sequencefile   

在hdfs上将表中的数据以二进制格式编码,并且将数据压缩了,下载数据

以后是二进制格式,不可以直接查看,无法可视化。

1.stored as sequecefile

2.或者显示指定:

STORED AS INPUTFORMAT 

'org.apache.hadoop.mapred.SequenceFileInputFormat' 

OUTPUTFORMAT 

'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat'

1.sequencefile存储格有压缩,存储空间小,有利于优化磁盘和I/O性能

2.同时支持文件切割分片,提供了三种压缩方式:none,record,block(块级别压缩效率跟高).默认是record(记录)

3.基于行存储

rcfile   在hdfs上将表中的数据以二进制格式编码,并且支持压缩。下载后的数据不可以直接可视化。

1.stored as rcfile 

2.或者显示指定:

STORED AS INPUTFORMAT 

'org.apache.hadoop.hive.ql.io.RCFileInputFormat' 

OUTPUTFORMAT 

'org.apache.hadoop.hive.ql.io.RCFileOutputFormat'

1.行列混合的存储格式,基于列存储。

2.因为基于列存储,列值重复多,所以压缩效率高。

3.磁盘存储空间小,io小。

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

相关阅读

认购与申购的区别是什么

基金首次募集期购买基金的行为称为认购; 在基金成立后购买基金的行为称为申购; 一般情况下,认购期购买基金的费率相对来说要比申

Axure RP 9 教程—全局变量的使用

继上一篇文章中继器实现筛选和新增的教学后,本篇文章将用一个案例来详细地介绍全局变量的使用方法。前言应广大网友要求,本次教程取

消费和生产--from-beginning 带和没带区别

[wangshumin@centoshostnameKL1 kafka_2.11-0.9.0.1]$ kafka-console-producer.sh --broker-list centoshostnameKL1:9092,centos

DNS协议详解及报文格式分析

DNS协议详解及报文格式分析 Posted on 2017-06-18 by Jocent — No Comments ↓ 目录一. DNS协议理论知识 1.1. 域名结构1.2. 域

Android:layout_weight的使用和坑

问题今天做项目有一个需求,一个TextView单行显示,多出来的字使用跑马灯效果,然后一个TextView后面要跟一个图片,当时想着怎么弄好呢,文

分享到:

栏目导航

推荐阅读

热门阅读