对于生产集群,含有上千万文件,每次启动时间将会长达几十分钟,缩小启动时间将大大提高生产力。所以对启动时的各个环节进行分析并提出相应的解决方案用于减少启动时间。
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
分享到:
相关推荐
图1HDFSHAwithQJM架构图示在HDFS的整个运行期里,所有元数据均在NameNode的内存集中管理,但是由于内存易失特性,一旦出现进程退出、宕机等异常情况,所有元数据都会丢失,给整个系统的数据安全会造成不可恢复的灾难...
每次NameNode启动时,会读取Fsimage并结合Edits文件更新内存中的元数据。 - **Edits**:记录了所有对文件系统的更新操作,即自上次检查点以来的所有变更。每次有新的编辑操作,NameNode就会在Edits文件中添加一条...
【HDFS篇07】NameNode和SecondearyNameNode的工作机制详解 HDFS(Hadoop Distributed File System)是Apache Hadoop项目的核心组件之一,它为大数据...理解和优化这一机制对于高效管理和维护大规模HDFS集群至关重要。
ADFS(Ali Distributed File System)是基于hadoop开源分布式系统HDFS的一种优化 实现,能够将HDFS中单点master namenode节点中的内存数据结构利用高速存储介质同步到磁盘中,同时能够提供很高的吞吐和性能 。...
NameNode是HDFS的核心组件,负责管理文件系统的命名空间和客户端对文件的访问。日志级别决定了记录日志的详细程度,不同的值代表了不同的日志级别: - "INFO":一般信息性的日志。 - "DEBUG":可以记录命名空间变化...
- 在启动HDFS Explorer后,选择“Manual connection”选项来手动配置HDFS的连接设置。 2. **配置Hadoop访问地址和端口** - 需要填写Hadoop集群的NameNode地址,通常格式为`http://master:50070`,这里的`master`是...
它定期合并fsimage和editlogs,减少NameNode启动时间。 #### 三、HDFS数据存储机制 - **数据块**:HDFS将文件分割成固定大小的数据块进行存储,默认的数据块大小为128MB(Hadoop 2.x版本之后)。较小的文件会被...
- **启动过程**:当NameNode启动时,它会从磁盘读取FsImage文件并将其中的内容加载到内存中。接着,NameNode会读取EditLog文件中的所有事务,并将这些更改应用到内存中的FsImage表示中。 - **检查点**:检查点是一种...
1. **NameNode**:NameNode的启动过程涉及初始化文件系统的元数据,包括加载fsimage(持久化的命名空间镜像)和edit logs(记录所有变更操作的日志)。NameNode通过合并fsimage和edit logs来保持元数据的最新状态。...
### HDFS高可用机制与Hive兼容性问题详解 #### 一、背景介绍 Hadoop分布式文件系统(HDFS)是...综上所述,通过合理的配置调整和技术优化,可以有效解决HDFS HA与Hive之间的兼容性问题,保障大数据平台的稳定运行。
五、HDFS优化 1. 副本系数调整:根据实际需求和集群资源,可以适当调整数据块的副本系数。 2. 写入策略:可以选择合适的写入策略,如写入最近使用的DataNode,以减少网络传输。 3. Balancer工具:使用HDFS Balancer...
当Namenode启动时,会把最新的fsimage加载到内存中。 **Namenode与Datanode目录结构**:Namenode和Datanode各自具有特定的目录结构,用于存储不同的元数据和数据块。 #### HDFS的数据复制 HDFS被设计成能够在一个...
其中,Namenode启动优化、并行加载fsimage、RPC优化等措施显著提升了系统的响应速度和稳定性;而块复制机制的改进则进一步增强了数据的安全性和冗余度。此外,针对跨机房作业提交和数据传输的优化,通过调整socket...
在HDFS启动过程中,系统会进入安全模式,此时NameNode仅接受读请求,直到所有DataNode报告并确认其存储的数据块。安全模式结束后,HDFS才能正常对外提供服务。可以通过`hdfs dfsadmin -safemode`命令进入、离开或...
- **数据均衡**:使用 `start-balancer.sh` 脚本启动数据均衡器,帮助优化数据分布。数据均衡可能因为多种原因而失败,如集群已平衡、无块可移动、通信异常等。 2. **适合批处理**:HDFS 设计用于支持批处理作业,...
1. 在进行HDFS操作时,必须确保Hadoop服务已启动,并且客户端可以正确连接到NameNode。 2. 文件上传和下载时要考虑文件权限,确保客户端有足够的权限进行操作。 3. 对于大数据文件,应合理设置缓冲区大小、复制因子...
当活动NameNode 出现故障时,备份NameNode 可以迅速接管其职责,从而保证了HDFS服务的连续性和稳定性。 #### 三、ViewFS 的作用 ViewFS 是HDFS的一个特性,它提供了一种逻辑视图来访问HDFS中的文件。通过ViewFS,...
4. Secondary NameNode的作用:它不是NameNode的热备份,而是协助NameNode周期性地合并编辑日志,减少NameNode启动时的恢复时间。 5. HDFS的扩展性:随着数据量的增长,如何扩展NameNode和DataNode以应对更大的文件...