1.存储格式
(1) SequenceFile
以二进制键值对的形式存储数据,支持三种记录存储方式。.
➢无压缩: io效率较差,相比压缩,不压缩的情况下没有什么优势。
➢记录级压缩:对每条记录都压缩,这种压缩效率比较一 般。
➢块级压缩: 这里的块不同于HDFS中的块的概念.这种方式会将达到指定块大小的二进制数据压缩为一个块。
(2) Avro
将数据定义和数据- -起存储在一条消息中, 其中数据定义以JSON格式存储,数据以二
进制格式存储。Avro 标记用于将大型数据集分割成适合MapReduce处理的子集。
(3) RCFile
以列格式保存每个行组数据。它不是存储第一行 然后是第二行,而是存储所有行上的第
1列,然后是所行 上的第2列,以此类推。
(4) Parquet
是Hadoop的一种列存储格式,提供了高效的编码和压缩方案。
2.压缩算法
(1) Gzip 压缩
优点:压缩率比较高,而且压缩/解压速度也比较快; Hadoop 本身支持,在应用中处
理gzip格式的文件就和直接处理文本- -样:大部分linux 系统都自带gzip 命令,使用方便.
缺点:不支持split。
应用场景:当每个文件压缩之后在130M以内的(1个块大小内),都可以考虑用gzip
压缩格式。例如说一天或者一个小时的日志压缩成-一个gzip文件,运行MapReduce程序
的时候通过多个gzip 文件达到并发。Hive 程序,streaming 程序,和Java 写的
MapReduce程序完全和文本处理-一样, 压缩之后原来的程序不需要做任何修改。
(2) Bzip2 压缩
优点:支持split; 具有很高的压缩率,比gzip 压缩率都高; Hadoop 本身支持,但不
支持native; 在linux 系统下自带bzip2 命令,使用方便。
缺点:压缩/解压速度慢;不支持native.
应用场景:适合对速度要求不高,但需要较高的压缩率的时候,可以作为MapReduce
作业的输出格式:或 者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空
间并且以后数据用得比较少的情况:或者对单个很大的文本文件想压缩减少存储空间,同时
又需要支持split, 而且兼容之前的应用程序(即应用程序不需要修改)的情况。
(3) Lzo压缩
优点:压缩/解压速度也比较快,合理的压缩率:支持split, 是Hadoop 中最流行的压
缩格式:可以在linux 系统下安装lzop 命令,使用方便。
缺点:压缩率比gzip要低-一些; Hadoop 本身不支持,需要安装;在应用中对lzo 格
式的文件需要做一些特殊处理(为了 支持split 需要建索引,还需要指定inputformat 为lzo格式)
应用场景: - 个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个
(4) Snappy 压缩
优点:高速压缩速度和合理的压缩率。
缺点:不支持split; 压缩率比gzip 要低; Hadoop 本身不支持,需要安装;
应用场景:当MapReduce 作业的Map 输出的数据比较大的时候,作为Map到
Reduce的中间数据的压缩格式:或者作为一个MapReduce作业的输出和另外一个
MapReduce作业的输入。