2/15-Hadoop文件格式学习
hdfs文件格式主要有哪些,优点是什么,每个文件格式的压缩比?是什么情况
link
hdfs文件格式可以分为面向行和面向列两大类:
有SequenceFile、MapFile、Avro Datafile形式
面向行的文件是将同一行的数据存储在一起,如果只需要访问行的一小部分数据,也需要将整行读入内存。该方式适合于整行数据需要同时处理的情况。
优点:
具备快速数据加载和动态负载的高适应能力,因为行存储保证了相同记录的所有域都在同一个集群节点
缺点:它不太满足快速的查询响应时间的要求,特别是在当查询仅仅针对所有列中的少数几列时,它就不能直接定位到所需列而跳过不需要的列,由于混合着不同数据值的列,行存储不易获得一个极高的压缩比。 3.1.2 面向列
有Parquet、RCFile、ORCFile形式
面向列的文件被切割为若干列数据,每一列数据一起存储,读取数据时可以跳过不需要的列。
优点:
这种结构使得在查询时能够直接读取需要的列而避免不必要列的读取,并且对于相似数据也可以有一个更好的压缩比。
缺点:它并不能提供基于Hadoop系统的快速查询处理,也不能保证同一记录的所有列都存储在同一集群节点之上,也不适应高度动态的数据负载模式。 3.2 常用文件格式
常用文件格式包括以下几类:
TEXTFILESEQUENCEFILERCFILEORCFILEParquet
其中TEXTFILE为默认格式,sequencefile,rcfile,orcfile格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中, 然后再从表中用insert导入sequencefile,rcfile,orcfile表中。 3.2.1 TEXTFILE
默认格式,数据不做压缩,磁盘开销大,数据解析开销大。
可结合Gzip、Bzip2使用?(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。
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.codes=org.apache.hadoop.io.compress.GzipCodec;insert overwrite table textfile_table select * from textfile_table;
3.2.2 SEQUENCEFILE SequenceFile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。
SequenceFile支持三种压缩选择:none,record,block。Record压缩率低,一般建议使用BLOCK压缩。
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 textfile_table;
3.2.3 RCFile文件格式 1)概述历史: RCFile全称Record Columnar File,列式记录文件,是一种类似于SequenceFile的键值对(Key/Value Pairs)数据文件。在当前的基于Hadoop系统的数据仓库中,数据存储格式是影响数据仓库性能的一个重要因素。Facebook于是提出了集行存储和列存储的优点于一身的RCFile文件存储格式。为了提高存储空间利用率,Facebook各产品线应用产生的数据从2010年起均采用RCFile结构存储,按行存储(SequenceFile/TextFile)结构保存的数据集也转存为RCFile格式。此外,Yahoo公司也在Pig数据分析系统中集成了RCFile,RCFile正在用于另一个基于Hadoop的数据管理系统Howl。而且,根据Hive开发社区的交流,RCFile也成功整合加入其他基于MapReduce的数据分析平台。有理由相信,作为数据存储标准的RCFile,将继续在MapReduce环境下的大规模数据分析中扮演重要角色。 2)RCFile设计思想: RCFile结合列存储和行存储的优缺点,Facebook于是提出了基于行列混合存储的RCFile,该存储结构遵循的是“先水平划分,再垂直划分”的设计理念。先将数据按行水平划分为行组,这样一行的数据就可以保证存储在同一个集群节点;然后在对行进行垂直划分。
RCFile是在Hadoop HDFS之上的存储结构,该结构强调:
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;
3.2.4 ORC文件格式ORC File,它的全名是Optimized Row Columnar (ORC) file,其实就是对RCFile做了一些优化。据官方文档介绍,这种文件格式可以提供一种高效的方法来存储Hive数据。它的设计目标是来克服Hive其他格式的缺陷。运用ORC File可以提高Hive的读、写以及处理数据的性能。
1)ORC File格式的优点:每个task只输出单个文件,这样可以减少NameNode的负载;
支持各种复杂的数据类型,比如: datetime, decimal, 以及一些复杂类型(struct, list, map, and union);
在文件中存储了一些轻量级的索引数据;
基于数据类型的块模式压缩:a、integer类型的列用行程长度编码(run-length encoding);b、String类型的列用字典编码(dictionary encoding);
用多个互相独立的RecordReaders并行读相同的文件;
无需扫描markers就可以分割文件;
绑定读写所需要的内存;
metadata的存储是用 Protocol Buffers的,所以它支持添加和删除一些列
ORC File包含一组组的行数据,称为stripes,
除此之外,ORC File的file footer还包含了该ORC File文件中stripes的信息,每个stripe中有多少行,以及每列的数据类型。当然,它里面还包含了列级别的一些聚合的结果,比如:count, min, max, and sum
在ORC File文件的最后,有一个被称为postscript的区,它主要是用来存储压缩参数及压缩页脚的大小。
在默认情况下,一个stripe的大小为250MB。大尺寸的stripes使得从HDFS读数据更高效。
2)使用create table Addresses ( name string, street string, city string, state string, zip int) stored as orc tblproperties ("orc.compress"="NONE");
3.2.5 Parquet文件格式 1)概述Apache Parquet是Hadoop生态圈中一种新型列式存储格式,它可以兼容Hadoop生态圈中大多数计算框架(Mapreduce、Spark等),被多种查询引擎支持(Hive、Impala、Drill等),并且它是语言和平台无关的。
2)Parquet数据模型Parquet支持嵌套的数据模型,类似于Protocol Buffers,每一个数据模型的schema包含多个字段,每一个字段有三个属性:重复次数、数据类型和字段名,重复次数可以是以下三种:
required(只出现1次)repeated(出现0次或多次)optional(出现0次或1次)每一个字段的数据类型可以分成两种:group(复杂类型)和primitive(基本类型)
通过Striping/Assembly算法,parquet可以使用较少的存储空间表示复杂的嵌套格式,并且通常Repetition level和Definition level都是较小的整数值,可以通过RLE算法对其进行压缩,进一步降低存储空间。 3.2.6 五种文件格式的优缺点
上图中原始的TEXT文本文件为585GB,使用Hive早期的RCFILE压缩后为505GB,使用Impala中的PARQUET压缩后为221GB,而Hive中的ORC压缩后仅为131GB,压缩比最高。