HDFS性能优化

来源:互联网 发布:扎克拉文数据 编辑:程序博客网 时间:2024/05/12 05:30

分布式文件系统是在多个节点上做的数据文件的部署,所以,当多个节点之间要做数据的传输通信时,就要有一个文件目录的管理者和网络带宽的使用。当namenode的可使用的内存空间和网络带宽可使用率非常大时,实现节点之间的数据快速传输通信是非常可观的。这里,就对如何提高hdfs性能做如下优化介绍。

1.Hdfs存档/归档,减少namenode内存空间的使用

存档是用来备份的时候标识用的,说白就是做个标记,表示这个文档在上次备份之后有没有被修改过,比如当月1号,你给全盘做了一次备份,那么所有的文档的存档属性都会被清除,表示备份过了。此后,如果你修改了某个文件,那么这个文件的存档属性就会被加上。当几天后,你再做“增量”备份时候,系统就会只备份那些具有“存档”属性的文件

每个文件均按块方式存储,每个块的元数据存储在namenode的内存中,因此hadoop存储小文件会非常低效。因为大量的小文件会耗尽namenode中的大部分内存(文件大小为5kb,产生的元数据为150kb,得不偿失)。一个1MB的文件以大小为128MB的块存储,使用的是1MB的磁盘空间,而不是128MB

Hadoop存档文件或HAR文件,是一个更高效的文件存档工具,它将文件存入HDFS块,在减少namenode内存使用的同时,允许对文件进行透明的访问。具体说来,Hadoop存档文件可以用作MapReduce的输入。

Hdfs归档相当于把所有文件归档在一个文件夹里面了,该文件夹以.har命名的

当有很多的小文件时,可以通过归档来解决

归档指令:

Hadoop archive–archiveName myhar.har –p /user/Ubuntu /user/my

【查看归档】

Hdfs dfs –lsrhar:///user/my/myhar.har

【解归档】

Hdfs dfs –cphar:///user/my/my.har /user/your

1.1       压缩解压缩

获取编码器有三种方式:

1)      通过工厂CompressionCodecFactory获取:工厂根据默认文件扩展名按照配置文件来找到对应的编码器类

2)      根据映射来获取ReflectionUtils.newInstance(codecClass,configuration)

3)      根据编码器池来获取:

文件压缩有两大好处,减少存储文件所需要的磁盘空间,并加速数据在网络和磁盘上的传输。调用java的解码器做压缩和解压是比较慢的,当调用linux自带的deflategzip等这些编码器时,效率就上来了,hadoop提供了调用这些解码器的API

ZipInputStream//解压缩

ZipOutputStream//压缩

ZipEntry//压缩条目

压缩格式:-1时间优先  -9 空间优先

Codec实现了一种压缩-解压缩算法。在hadoop中,一个对CompressionCodec接口的实现代表一个codec

如下表所示,Java和本地提供的每个压缩格式的实现。井不是所有的格式都有本地实现(例如bzip2压缩),而另一些则仅有本地实现(例如 LZO)。

压缩格式

hadoopCompressionCodec

deflate

org.apache.hadoop.io.compress.defaultcodec

gzip

org.apache.hadoop.io.compress.gzipcodec

bzip2

org.apache.hadoop.io.compress.bzip2codec

lzo

com.hadoop.compression.lzo.lzopcodec

lz4

org.apache.hadoop.io.compress.lz4codec

snappy

org.apache.hadoop.io.compress.snappycodec

 

压缩codec

考虑到性能,最好使用一个本地库(nativelibrary)来压缩和解压。

1.2       Snappy解码器

linux上安装配置snappy

1.      特点:

1)      速度快: Snappy压缩速度大概可以达到250MB/s或者更快,解压缩可以达到大约500MB/s或更快

2)      稳定性好,google在生成环境下使用snappy进行压缩解压缩超过PB级数据,字节流格式在版本之间不会改变

3)      鲁棒性,在恶意输入时解压缩不会出现崩溃

 

1.3       CodecPool---压缩/解压缩池

使用的是原生代码库并且需要在应用中执行大量压缩和解压缩操作,可以考虑使用CodecPool,它支持反复使用压缩和解压缩,以分摊创建这些对象的开销

原创粉丝点击