《Hadoop技术详解》一2.5 管理文件系统元数据

简介:

本节书摘来异步社区《Hadoop技术详解》一书中的第2章,第2.5节,作者: 【美】Eric Sammer 译者: 刘敏 , 麦耀锋 , 李冀蕾 , 等,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 管理文件系统元数据

NameNode将文件系统的元数据以不同的文件保存在本地磁盘中,其中最重要的两个文件是fsimage和edits。和数据库一样,fsimage包含文件系统元数据的完整快照,而edits仅包含元数据的增量修改。对高吞吐率的数据存储而言,一个常用方法是使用预写日志(WAL),如edits文件,实现顺序增加操作来减少I/O操作(在NameNode中,所有操作都在RAM中完成),从而避免高消耗的查找操作,获取更好的整体性能。NameNode启动后,直接加载fsimage到RAM,再通过回放引入edits的增量变化,最终在内存中建立拥有最新信息的文件系统视图。

在Hadoop较新的几个版本中(具体地说,就是Apache Hadoop 2.0和CDH4;有关Hadoop更多版本信息,请参见4.1节“挑选Hadoop的发行版本”),底层元数据的存储拥有更好的可恢复性和支持NameNode的高可用性。在概念上,元数据的存储和以前的版本是类似的,除了事务不再保存在单一的edits文件中以外。在新版本中,NameNode周期性轮换edits文件(关闭一个文件,然后打开一个新文件),用事务ID号来标识。这样就提供了一种可能:NameNode可以保留旧的fsimage和edits文件备份,从而可以更好地支持数据的回滚功能。大部分的这类改变对使用者几乎没有什么影响。之所以在这里提起是为了让读者能更好地理解磁盘上这些文件的用途,同时提醒读者不要轻易改动这些文件,除非你十分清楚你在干什么。本书接下来的章节提到这些文件的时候会使用它们的名字,分别用fsimage和edits来表明它们的功能。

NameNode只将改动内容写入WAL,即edits。随着时间的推移,edits文件会像其他的日志系统文件一样变得越来越大,当服务器发生故障时就需要很长的时间来回放。所以像传统的关系数据库那样,需要定期将edits文件引入到fsimage文件中。这样就带来了新的问题,NameNode在为集群提供服务时可能无法提供足够的资源——CPU或RAM来支持此运算。为了解决这一问题,引入了次NameNode。

NameNode和次NameNode之间的交互如图2-4所示。[1]

1. 次NameNode引导NameNode滚动更新edits文件,并开始将新的内容写入edits.new。

2.次NameNode将NameNode的fsimage和edits文件复制到本地的检查点目录。

3.次NameNode载入fsimage文件,回放edits内容,将其合并到fsimage,将新的fsimage文件压缩后写入磁盘。

4.次NameNode将新的fsimage文件送回NameNode,NameNode在接收新的fsimage文件后,直接加载和应用该文件。

5.NameNode将edits.new更名为edits。


4


默认情况下,该过程每小时发生一次,或者当NameNode的edits文件大小达到默认的64MB时也会被触发。尽管后面我们会研究如何改变这些配置,但通常来说无需改变。在新版本的Hadoop中,通过使用预定义的事务次数而不是文件大小来触发该过程。

相关文章
|
17天前
|
存储 分布式计算 Hadoop
Hadoop数据块分散存储NameNode管理
【4月更文挑战第17天】Hadoop是一个开源的分布式计算框架,依赖HDFS进行分布式存储。文件被分割成数据块分散在DataNode上,NameNode负责元数据管理和协调,确保数据可靠性。NameNode的高可用性配置能防止单点故障,保证系统稳定性。这套机制支持高效、可靠和可扩展的大数据存储与访问。
16 3
|
28天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
6月前
|
存储 分布式计算 Hadoop
【大数据】Hadoop技术解析:大数据处理的核心引擎
【大数据】Hadoop技术解析:大数据处理的核心引擎
206 0
|
6月前
|
分布式计算 Hadoop
hadoop进程启停管理
hadoop进程启停管理
43 0
|
5月前
|
消息中间件 分布式计算 大数据
【大数据技术Hadoop+Spark】Flume、Kafka的简介及安装(图文解释 超详细)
【大数据技术Hadoop+Spark】Flume、Kafka的简介及安装(图文解释 超详细)
77 0
|
5月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
87 0
|
5月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
83 0
|
5月前
|
分布式计算 Java 大数据
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
268 0
|
7月前
|
分布式计算 大数据 Hadoop
【大数据开发技术】实验03-Hadoop读取文件
【大数据开发技术】实验03-Hadoop读取文件
121 0
|
5月前
|
SQL 分布式计算 大数据
【大数据技术Hadoop+Spark】Spark SQL、DataFrame、Dataset的讲解及操作演示(图文解释)
【大数据技术Hadoop+Spark】Spark SQL、DataFrame、Dataset的讲解及操作演示(图文解释)
72 0