对于生产集群,含有上千万文件,每次启动时间将会长达几十分钟,缩小启动时间将大大提高生产力。所以对启动时的各个环节进行分析并提出相应的解决方案用于减少启动时间。
1. NameNode启动中对fsimage加载过程解析
Hadoop在对NameNode进行启动时,首先会从映像文件(fsimage)中读取HDFS的状态,即系统目录树,同时将日志文件(edits)与fsimage进行合并,这样保证了内存中目录树是最新的,随后系统会将最新的目录树持久化到映像文件(fsimage)中,并使用一个空的edits文件开始正常操作。
因为NameNode只有在启动阶段才会合并fsimage和edits,所以久而久之edits文件将会十分庞大,尤其是对于大型的集群,这样将导致下一次NameNode启动会花很长时间。为此,secondary NameNode根据相应条件来合并fsimage和edits,在合并结束后也将最新的目录树持久化写入到fsimage。
对NameNode进行持久化存储的路径是由dfs.name.dir参数控制的。
dfs.name.dir, NameNode持久存储映像文件(fsimage)及日志文件(edits)的本地文件系统路径,当这个值是一个逗号分隔的目录列表时,系统实时目录树会被复制到所有目录中做冗余备份。
在Hadoop的版本中,持久化fsimage调用的函数为FSImage类中的saveFSImage()函数, 在函数内部首先读取dfs.name.dir中设置的多个目录列表,随后按照目录列表按顺序存储。
以下是NameNode加载fsimage过程的流程图:
2. 加载过程优化
如果NameSpace 存在大量文件,那么fsimage文件将会十分巨大,fsimage会达到上百兆甚至上G,如果在dfs.name.dir中定义了多个目录,那么采用按顺序存储势必会消耗一定时间。
为解决这一问题,对fsimage的持久化操作采用多线程技术,为目录列表中的每个目录存储开辟一个线程,用来存储fsimage文件。主线程等待所有存储的子线程完毕后完成对fsimage加载。这样,存储时间将取决于存储最慢的那个线程,达到了提高fsimage加载速度的目的,从而在一定程度上提升了NameNode启动速度。
其流程图如下:
3. 测试结果
测试采用利用hadoop 自带的nnbench,向NameNode写入大量小文件,写入文件总数为 200万 ;相关的命令为 hadoop jar hadoop-test.jar nnbench –operation create_write –maps 24 –bytesToWrite 1 –numberOfFiles 2000000 –baseDir /test/nnbench1。
目前测试集群有12个节点,总共200万文件,约200万块,dfs.name.dir设置了3个本地路径,其中两个本地路径用来模拟远程文件路径,fsimage大小为240M。
测试结果如下:
FSImage存储时间 顺序存储 多线程存储
第一次测试 22142msec 12709msec
第二次测试 17043msec 15813msec
第三次测试 20587msec 12286msec
平均时间 19924msec 13602msec
改动后时间缩短了1-13602/19924=32%
4. 结论
采用多线程写入fsimage,能够有效的提升fsimage加载速度,从而缩短NameNode启动速度。如果NameSpace存在大量文件,使得fsimage文件巨大,则这种时间缩短会更加明显。
这是我打的第一个patch,期望以后在hadoop业界继续努力。
- 大小: 30.7 KB
- 大小: 38.6 KB
分享到:
相关推荐
最新的hdfs namenode主备安装文档,详细,命令只需要copy执行即可
图1HDFSHAwithQJM架构图示在HDFS的整个运行期里,所有元数据均在NameNode的内存集中管理,但是由于内存易失特性,一旦出现进程退出、宕机等异常情况,所有元数据都会丢失,给整个系统的数据安全会造成不可恢复的灾难...
在12月1日“Hadoop生态系统”主题分论坛,华为电信与核心网产品线BigData团队的架构师Uma Maheshwara Rao G,负责HDFS项目整体技术开发。对电信领域有深刻理解,从2010年起从事HDFS开发,是HDFS的核心设计人员。他的...
详细讲解了Hdfs中NameNode节点的配置,备份和恢复,以及secondNamenode的配置
其中一个问题是报but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes 直接解决 在Hadoop安装目录下找到sbin文件夹 在里面修改四个文件 1、对于start-dfs.sh和stop-dfs.sh文件,...
HDFS 存储和优化技术研究综述.pdf
大家都知道HDFS的架构由NameNode,SecondaryNameNode和DataNodes组成,其源码类图如下图所示:正如上图所示,NameNode和DataNode继承了很多的protocol用于彼此间的通信,其实nameNode还实现了...实现了ClientProtocol...
False ) hdfs_namenode_host - HDFS NameNode 的主机名(默认: localhost ) hdfs_namenode_port - HDFS NameNode 的端口(默认: 8020 ) hdfs_disks - HDFS DataNode 上可用的磁盘列表(默认值: [] ) hdfs_...
(1)第一次启动 NameNode 格式化后,创建 fsimage 和 edits 文件 (2)客户端对元数据进行增删改的请求 (3)NameNode 记录操作
利用Zookeeper对HDFS中Namenode单点失败的改进方法,鲁阳,郑岩,在大数据时代分布式处理的已经成为潮流,而Hadoop是一种应用十分广泛的分布式处理框架。但在Hadoop的使用中,Namenode的单点失败问题一�
Ansible角色和流浪汉文件使用WebHDFS创建本地HDFS Lab跑步光盘回购无所事事流浪ssh namenode-1 须藤-s 苏哈杜普光盘/ opt / hadoop / bin / hdfs namenode -format(仅一次!!!) /opt/hadoop/sbin/start-dfs.sh &...
在Hadoop1.0时代,Hadoop的两大核心组件HDFS ...NameNode保存了整个HDFS的元数据信息,一旦NameNode挂掉,整个HDFS就无法访问,同时 Hadoop生态系统中依赖于HDFS的各个组件,包括MapReduce、Hive、Pig以及
NameNode职责
HDFS体系结构(NameNode、DataNode详解)
一、 HDFS前言 设计思想 分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析; 在大数据系统中作用: 为各类分布式运算框架(如:mapreduce,spark,...
HDFS读写流程&NameNode;工作机制流程图原件,用于修改和调整
HDFS HA 配置、启动与验证;HDFS HA 配置、启动与验证;任务一 修改core-site.xml配置文件;任务二 修改hdfs-site.xml配置文件(一);任务二 修改hdfs-site.xml配置文件(二);任务二 修改hdfs-site.xml配置文件(三);...
ADFS(Ali Distributed File System)是基于hadoop开源分布式系统HDFS的一种优化 实现,能够将HDFS中单点master namenode节点中的内存数据结构利用高速存储介质同步到磁盘中,同时能够提供很高的吞吐和性能 。...