Hadoop 升级创建硬链接效率优化
1. 问题描述
Hadoop版本升级过程中,namenode会将元数据信息拷贝一份(fsimage,edits等),而datanode会对所有数据块建立硬链接,以防升级过程中出现问题,进行回滚操作。在databode上,采用了ln命令对每个block文件建立硬链接,而当集群规模非常大时,用ln命令(Apache Hadoop-0.20.2以及之前版本采用的方法)对大量文件建立硬链接的代价非常大,为了提高建立硬链接的效率,本文讨论了几种方法。
2. 方案设计
(1) 采用JDK 1.7
JDK 1.7在很多方面,性能有明显提升,本方法试图检验一下与创建硬链接有关的API性能是否有提升。
(2) 采用JDK 1.7中的createLink操作
JDK1.7中新增加了一个java.nio.file.Files包,里面有个createLink函数可用于创建硬链接。
(3) 采用JDK 1.6+ ln [dir] [dir]
ln命令有四种使用方法,Apache Hadoop-0.20.2以及之前版本采用了第一种方法:遍历目录下的每一个文件,依次调用依次ln,为每个文件建立硬链接;而从Hadoop-0.21.0开始,Hadoop采用了另一种ln用法:ln [OPTION]… TARGET… DIRECTORY,其中,TARGET是一个文件列表,而DIRECTORY是一个目录。
3. 效率比较
采用了4个节点,一个为namenode,三个为datanode,数据备三份,采用脚本往HDFS上加载10万个小文件(每个16 byte),这样,每个datanode上有30万个文件。采用的升级版本是,从Apache Hadoop-0.20.2(layoutversion=-18)升级到Cloudera Hadoop-0.20.2-cdh3u2(layoutversion=-19),测试结果如下:
(1) Jdk 1.7:18 min
(2) Jdk 1.7 createLink:53s
(3) JDK 1.6+ ln [dir] [dir]:50s
4. 参考资料
(2) Apache Hadoop -0.21.0 源代码
原创文章,转载请注明: 转载自 董的博客
本文链接地址: http://dongxicheng.org/mapreduce/hadoop-upgrade-hardlinks/
Copyright © 2008
This feed is for personal, non-commercial use only.
The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:
)