• 一、存储格式行存储和列存储
  • 二、Hive文件存储格式
  • 三、创建语句和压缩

一、存储格式行存储和列存储

  1. 行存储可以理解为一条记录存储一行,通过条件能够查询一整行数据。
  2. 列存储,以字段聚集存储,可以理解为相同的字段存储在一起。

二、Hive文件存储格式

  1. TEXTFILE,
  • Hive数据表的默认格式,存储方式:行存储。
  • 可以使用Gzip压缩算法,但压缩后的文件不支持split
  • 在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比SequenceFile高几十倍。
  1. SEQUENCEFILE
  • 压缩数据文件可以节省磁盘空间,但Hadoop中有些原生压缩文件的缺点之一就是不支持分割。支持分割的文件可以并行的有多个mapper程序处理大数据文件,大多数文件不支持可分割是因为这些文件只能从头开始读。Sequence File是可分割的文件格式,支持Hadoop的block级压缩。
  • Hadoop API提供的一种二进制文件,以key-value的形式序列化到文件中。存储方式:行存储。
  • sequencefile支持三种压缩选择:NONE,RECORD,BLOCK。Record压缩率低,RECORD是默认选项,通常BLOCK会带来较RECORD更好的压缩性能。
  • 优势是文件和hadoop api中的MapFile是相互兼容的
  1. RCFILE
    存储方式:数据按行分块,每块按列存储。结合了行存储和列存储的优点:
  • RCFile 保证同一行的数据位于同一节点,因此元组重构的开销很低
  • 像列存储一样,RCFile 能够利用列维度的数据压缩,并且能跳过不必要的列读取
  • 数据追加:RCFile不支持任意方式的数据写操作,仅提供一种追加接口,这是因为底层的 HDFS当前仅仅支持数据追加写文件尾部。
  • 行组大小:行组变大有助于提高数据压缩的效率,但是可能会损害数据的读取性能,因为这样增加了 Lazy 解压性能的消耗。而且行组变大会占用更多的内存,这会影响并发执行的其他MR作业。 考虑到存储空间和查询效率两个方面,Facebook 选择 4MB 作为默认的行组大小,当然也允许用户自行选择参数进行配置。
  1. ORCFILE
    存储方式:数据按行分块,每块按照列存储。
    压缩快,快速列存取。效率比rcfile高,是rcfile的改良版本。

三、创建语句和压缩

3.1、压缩工具的对比:

Hadoop编码/解码器方式,如下表所示

压缩格式 对应的编码/解码
DEFAULT org.apache.hadoop.io.compress.DefaultCodec
Gzip org.apache.hadoop.io.compress.GzipCodec
Bzip org.apache.hadoop.io.compress.BzipCodec
Snappy org.apache.hadoop.io.compress.SnappyCodec
Lzo org.apache.hadoop.io.compress.LzopCodec

3.2、压缩设置

HiveQL语句最终都将转换成为hadoop中的MapReduce job,而MapReduce job可以有对处理的数据进行压缩。

Hive中间数据压缩

hive.exec.compress.intermediate:默认为false,设置true为激活中间数据压缩功能,就是MapReduce的shuffle阶段对mapper产生中间压缩,在这个阶段,优先选择一个低CPU开销:

set hive.exec.compress.intermediate=true
set mapred.map.output.compression.codec= org.apache.hadoop.io.compress.SnappyCodec
set mapred.map.output.compression.codec=com.hadoop.compression.lzo.LzoCodec

最终输出结果压缩
hive.exec.compress.output:用户可以对最终生成的Hive表的数据通常也需要压缩。该参数控制这一功能的激活与禁用,设置为true来声明将结果文件进行压缩。

mapred.output.compression.codec:将hive.exec.compress.output参数设置成true后,然后选择一个合适的编解码器,如选择SnappyCodec。设置如下(两种压缩的编写方式是一样的):

set hive.exec.compress.output=true
set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec
或者
或者set mapred.output.compress=true
set mapred.output.compression.codec=org.apache.hadoop.io.compress.LzopCodec

3.3、 四种格式的存储和压缩设置(客户端设置压缩格式)

1. TEXTFILE

create table if not exists textfile_table(
site string,
url  string,
pv   bigint,
label string)
row format delimited
fields terminated by '\t'
stored as textfile;
插入数据操作:
set hive.exec.compress.output=true; //输出结果压缩开启
set mapred.output.compress=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;  //压缩和解压缩编码类列表,用逗号分隔,将所用到解压和压缩码设置其中
insert overwrite table textfile_table select * from testfile_table;  

2. SEQUENCEFILE

create table if not exists seqfile_table(
site string,
url  string,
pv   bigint,
label string)
row format delimited
fields terminated by '\t'
stored as sequencefile;
插入数据操作:
set hive.exec.compress.output=true;
set mapred.output.compress=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;
SET mapred.output.compression.type=BLOCK;
insert overwrite table seqfile_table select * from testfile_table;  

3. RCFILE

create table if not exists rcfile_table(
site string,
url  string,
pv   bigint,
label string)
row format delimited
fields terminated by '\t'
stored as rcfile;
插入数据操作:
set hive.exec.compress.output=true;
set mapred.output.compress=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;
insert overwrite table rcfile_table select * from testfile_table;

4. ORCFILE

create table if not exists orcfile_table(
site string,
url  string,
pv   bigint,
label string)
row format delimited
fields terminated by '\t'
stored as orc;
插入数据操作:
set hive.exec.compress.output=true;
set mapred.output.compress=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;
insert overwrite table orcfile_table select * from testfile_table;

总结:

  1. TextFile默认格式,加载速度最快,可以采用Gzip进行压缩,压缩后的文件无法split,无法并行处理了。

  2. SequenceFile压缩率最低,查询速度一般,将数据存放到sequenceFile格式的hive表中,这时数据就会压缩存储。三种压缩格式NONE,RECORD,BLOCK。是可分割的文件格式。

  3. RCfile压缩率最高,查询速度最快,数据加载最慢。
  4. 相比TEXTFILE和SEQUENCEFILE,RCFILE由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE相比其余两种格式具有较明显的优势。

  5. 在hive中使用压缩需要灵活的方式,如果是数据源的话,采用RCFile+bz或RCFile+gz的方式,这样可以很大程度上节省磁盘空间;而在计算的过程中,为了不影响执行的速度,可以浪费一点磁盘空间,建议采用RCFile+snappy的方式,这样可以整体提升hive的执行速度。至于lzo的方式,也可以在计算过程中使用,只不过综合考虑(速度和压缩比)还是考虑snappy适宜。

转载于:https://www.cnblogs.com/skyice/p/10459345.html

Hive文件存储格式和hive数据压缩相关推荐

  1. (转载)hive文件存储格式

    对于hive格式的认识,先转载后实践再加深认识. 转载地址:http://blog.csdn.net/yfkiss/article/details/7787742 hive在建表是,可以通过'STOR ...

  2. linux怎么看文件是否orc格式,hive文件存储格式orc,parquet,avro对比

    orc文件存储格式 ORC文件也是以二进制方式列式存储的,所以是不可以直接读取,ORC文件也是自解析的,它包含许多的元数据,这些元数据都是同构ProtoBuffer进行序列化的.文件结构如下 ORC文 ...

  3. Hadoop Hive概念学习系列之hive的数据压缩(七)

    Hive文件存储格式包括以下几类: 1.TEXTFILE 2.SEQUENCEFILE 3.RCFILE 4.ORCFILE 其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直 ...

  4. hive 数据存储格式详解

    Hive的三种文件格式:TEXTFILE.SEQUENCEFILE.RCFILE中,TEXTFILE和SEQUENCEFILE的存储格式都是基于行存储的,RCFILE是基于行列混合的思想,先按行把数据 ...

  5. hive-02-hive文件存储格式

    1.概述 hive在建表是,可以通过'STORED AS FILE_FORMAT' 指定存储文件格式 例如: > CREATE EXTERNAL TABLE MYTEST(num INT, na ...

  6. 【Hive】hive表的文件存储格式

    在Hive中,文件的存储格式主要有:TEXTFILE.SEQUENCEFILE.ORC.PARQUET. 其中,TEXTFILE.SEQUENCEFILE是基于行存储,ORC.PARQUET基于列存储 ...

  7. 大数据:Hive - ORC 文件存储格式

    一.ORC File文件结构 ORC的全称是(Optimized Row Columnar),ORC文件格式是一种Hadoop生态圈中的列式存储格式,它的产生早在2013年初,最初产生自Apache ...

  8. Hive - ORC 文件存储格式详细解析

    一.ORC File文件结构 ORC的全称是(Optimized Row Columnar),ORC文件格式是一种Hadoop生态圈中的列式存储格式,它的产生早在2013年初,最初产生自Apache ...

  9. hive的四种文件存储格式

    hive分为四种存储格式: 1.TEXTFILE 2.SEQUENCEFILE 3.RCFILE 4.ORCFILE 在其中textfile为默认格式,如果在创建hive表不提及,会默认启动textf ...

最新文章

  1. 特斯拉“撞死”机器人,是炒作还是事故?
  2. 结构主题模型(一)stm包工作流
  3. java新建测试程序_java – 如何创建一个CloseableHttpResponse对象来帮助测试?
  4. linux下find查找带有指定权限的文件(windows下编译的源代码文件)
  5. python多个分隔符分割字符串_Python中带有多个分隔符的拆分字符串
  6. SpringBoot调用RESTful Web服务
  7. CImage类的使用
  8. 【清除office待激活密钥】
  9. 大白菜 U盘系统指南
  10. 全面提高你的搜索技巧
  11. 什么是设计模式,为什么要使用?
  12. Flask实现简单搜索功能
  13. 完整代码及解析!!手写数字识别系统(手写数字测试识别 + pytoch实现 + 完整代码及解析)
  14. 示波器基础知识100问汇总
  15. LOTO 示波器软件功能——文件存储和回读功能
  16. MIPI摄像头工程=7系列FPGA + OV5640(MIPI) + 15 分钟 + VITIS
  17. 科学计数法如何转换成普通的计数方式??
  18. 35岁程序员,早到的中年危机
  19. cad在哪里设置图幅大小_CAD的图纸大小的设置
  20. Spring Cloud Alibaba系列使用(二)----Nacos注册中心

热门文章

  1. c语言三级试题及答案,2013年计算机二级C语言模拟试题五及答案
  2. Javascript框架库漏洞验证
  3. SQLi LABS Less-18
  4. python shell的交互模式和文本编辑模式
  5. 转载在linux下执行java窗口被锁定问题
  6. Centos运行Mysql因为内存不足进程被杀
  7. 基于表的数据字典构造MySQL建表语句
  8. Hibernate学习之createSQLQuery与createQuery的区别及使用
  9. 另一个.NET上的文档数据库Raven[转载]
  10. 孩子们的游戏(圆圈中最后剩下的数)