1. HDFS压缩与分片
-
HDFS压缩
文件压缩有两大好处: [1] 减少存储文件所需要的磁盘空间,节约硬件成本; [2] 减少读取的时间和在网络上传输的带宽需求。 由于大数据的场景下,数据量比较大,高效率的压缩就显得更为重要。
Hadoop支持的压缩格式包括:
选则压缩方法的时候,还需要考虑压缩方法的时间效率和空间效率,也就是压缩速度的快慢与压缩的比率。
注:LZO可以通过建索引的方式来支持切分。
-
HDFS分片
MapReduce在处理数据的时候,如果数据经过了压缩,那么了解这些压缩格式是否支持切分(splitting)是很重要的。
比如,一个压缩完之后为1G的文件,根据128M的默认块大小,文件会被存储为8个块。如果该压缩格式支持切分,那么MapReduce就可以将每个数据单独作为一个分片让map来工作,这样就可以有8个map任务同时运行。但是如果该压缩格式不支持切分,那么单个数据块就无法让map支持工作,它需要将8个数据块都读到一起才能工作。
如果压缩文件不支持分片这样有两个缺点:
- 8个数据块通常存储在不同的DataNode节点上,读取到一起会牺牲数据的本地性,减缓处理速度;
- map任务数减少了,作业的粒度变大,整体运行的时间变长。
2.HDFS文件格式
-
文件格式简介
HDFS支持多种文件格式,如:Text Files、CSV Files、JSON Records、Sequence Files,Avro Files、Parquet Files、RC Files、ORC Files等。
文件格式根据内容的组织形式可分为两类:
- 面向行Sequence Files,Avro Files
- 面向列Parquet Files、RC Files、ORC Files
-
常见格式
- Sequence/Map Files
Sequence 文件就是顺序文件,由文件头和随后的一条或多条记录组成。
下面是采用块压缩的结构,块压缩就是一次性压缩多条记录。
Map Files就是排过序的Sequence Files,有索引,可以按键查找。
- Avro
Apache Avro是一个编程语言无关的数据序列化系统。创建它的目的是为了解决Hadoop中Writable类型缺乏语言移植性的不足。
Avro数据文件支持压缩,并且是可切分的,这有利于MapReduce任务的执行。
- RC/ORC Files
RC是Record Columnar的缩写,是Hadoop中第一个面向列的文件格式,目前已经被Hive的ORCFile(Optimized Record Columnar File)及Parquet取代了。
- Parquet
Apache Parquet是一种能够有效存储嵌套数据的列式存储格式。列式存储的优势:
类型相同,压缩率更高,占用空间就更少Parquet源自于Google发表的一篇关于Dremel的论文,它以扁平的列式存储格式和很小的额外开销来存储嵌套的结构,从而带来 了性能上的很大提升。