发布时间: 2023-03-31 16:06:27
Hadoop是为处理大型文件所设计的,在小文件的处理上效率较低,然而在实际生产环境中,需要Hadoop处理的数据往往存放在海量小文件中。因此,高效处理小文件对于提高Hadoop的性能至关重要。这里的小文件是指小于 HDFS中一个块(Block)大小的文件。
Hadoop处理小文件有两种方法:压缩小文件和创建序列化文件。
Hadoop在存储海量小文件时,需要频繁访问各节点,非常耗费资源。如果某个节点上存放1000万个600Byte大小的文件,那么该节点上至少需要提供4 GB的内存。为了节省资源,海量小文件在存储到HDFS之前,需要进行压缩。
1.Hadoop压缩格式
Hadoop进行文件压缩的作用:减少存储空间占用,降低网络负载。这两点对于Hadoop存储和传输海量数据非常重要。
2.编解码器
编解码器(Codec)是指用于压缩和解压缩的设备或计算机程序。Hadoop中的编压缩解码器主要是通过Hadoop的一些类来实现的
创建序列文件主要是指创建SequenceFile(顺序文件)和MapFile(映射文件)。
1.SequenceFile
(1)SequenceFile简介。
SequenceFile是存储二进制键值(Key-Value)对的持久数据结构。通过SequenceFile可以将若干小文件合并成一个大的文件进行序列化操作,实现文件的高效存储和处理。
(2)SequenceFile的内部结构
SequenceFile由一个文件头(Header)和随后的一条或多条记录(Record)组成(如图所示)。Header的前三个字节SEQ(顺序文件代码),随后的一个字节是SequenceFile的版本号。Header还包括Key类的名称、Value类的名称、压缩细节、Metadata(元数据)、Sync Marker(同步标识)等。Sync Marker的作用在于可以读取SequenceFile任意位置的数据。
记录有无压缩、记录压缩、块压缩三种压缩形式,默认为无压缩。
① 当采用无压缩(No Compress)时,每条记录由记录长度、键长度、键、值组成,将键与值序列化写入SequenceFile。
② 当采用记录压缩(Record Compress)时,只压缩值,不压缩键,其他方面与无压缩类似。
③ 块压缩(Block Compress)利用记录间的相似性进行压缩,一次性压缩多条记录,比单条记录的压缩方法压缩效率更高。
当采用块压缩时,多条记录被压缩成默认1MB的数据块,每个数据块之前插入同步标识。数据块由表示数据块字节数的字段和压缩字段组成,其中,压缩字段包括键长度、键、值长度、值。
上一篇: MyBatis缓存机制介绍
下一篇: 无服务器是什么意思