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

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。

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

时间: 2024-07-30 23:54:26

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

《Hadoop技术详解》一第1章 简介

第1章 简介 Hadoop技术详解 在过去的几年里,数据的存储.管理和处理发生了巨大的变化.各个公司存储的数据比以前更多,数据来源更加多样,数据格式也更加丰富.这不是因为我们变成了林鼠(译注:林鼠喜欢收集各种物品),而是因为我们想要创造出可以让我们进一步了解某一领域的产品.功能以及对其智能预测(这个领域可以是指用户.数据搜索.机器日志或者是某机构的任何信息).为了更好地服务其成员,各组织正在寻找新的方式来使用那些曾经被认为没有什么价值或者存储起来过于昂贵的数据.采集和存储数据只是其中的一部分工作

《Hadoop技术详解》一导读

前 言 Hadoop技术详解本书采用的约定本书采用以下排版约定. 斜体 用于表明新的术语.URL.电子邮件地址.文件名和文件扩展名. 等宽字体 用于程序清单,正文段落中有关的程序元素,如变量及函数名.数据库.数据类型.环境变量.语句和关键字等. 等宽加粗字体 用于显示命令或应由用户输入的其他文本. 等宽斜体字体 表明这里的文本需要被替换成用户提供的值或由其他上下文确定的值. 目 录 第1章 简介第2章 HDFS 2.1 目标和动机2.2 设计2.3 守护进程2.4 读写数据2.5 管理文件系统元

《Hadoop技术详解》一2.7 NameNode联盟

2.7 NameNode联盟 很多Hadoop用户心里一直不爽:对存储在NameNode内存中的元数据大小有限制.为了冲破单个NameNode服务器中物理内存的限制,需要一种大规模系统来取代之前的按比例增长模式.正如HDFS的块存储一样,可以将文件系统元数据分布存储在多台主机上,这一技术被称之为命名空间联盟(Namespace Federation),即通过一组自治系统来组织一个逻辑名字空间.Linux文件系统是一个例子:多个设备被动态地配置在一个名字空间下,客户端可以方便地通过寻址访问就该名字

《Hadoop技术详解》一2.8 访问与集成

2.8 访问与集成 本地访问HDFS的唯一方式是通过其提供的Java应用程序接口,其他的访问方式都是经过定义并建立在这些应用程序接口之上的,而且只能提供这些接口所允许的功能.为了使应用更容易使用和开发,HDFS借用了大量像Java I/O流这样的概念,因而HDFS 应用程序接口对开发者来讲非但不陌生,而且还非常简单.当然HDFS也对这些应用程序接口做了一些改动,以确保提供其所宣称的那些功能,但大部分的改动很容易理解,而且有很详细的文档. 为了访问HDFS,客户端--也就是用应用程序接口编写的应用

《Hadoop技术详解》一2.2 设计

2.2 设计 HDFS在很多方面都遵循了传统文件系统的设计思想.譬如文件以不透明的数据块形式存储,通过元数据管理文件名和数据块的映射关系.目录树结构.访问权限等信息.这些和普通的Linux文件系统(如ext3)是非常相似的.那么,HDFS又有什么与众不同的地方呢? 传统文件系统是内核模块(至少在Linux中是这样的)和用户空间工具,然后通过挂载的形式提供给终端用户使用.但是HDFS却是一种用户空间文件系统.具体来说,文件系统代码以OS进程和扩展的形式运行在内核之外,而无须注册在Linux VFS

《Hadoop技术详解》一2.1 目标和动机

2.1 目标和动机 Apache Hadoop的重要组成部分是Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem).HDFS的设计初衷是为了支持高吞吐和超大文件的流式读写操作.传统的大型存储区域网络(Storage Area Network, SAN)和网络附加存储(Network Attached Storage, NAS)给TB级的块设备或文件系统提供了一种集中式的低延时数据访问解决方案.因为SAN和NAS支持全功能POSIX语法,具有很好的存储

《Hadoop技术详解》一2.6 NameNode的高可用性

2.6 NameNode的高可用性 因为管理员的主要职责是确保大规模系统的服务质量和可用性,单点故障(single point of failure)可能会给我们带来麻烦,甚至带来非常糟糕的后果.不幸的是,长期以来,HDFS的NameNode就是困扰我们的单点故障问题.近来,Hadoop社区投入大量的人力来提升NameNode的高可用性,使Hadoop可以在更多重要应用场景下部署. NameNode 高可用性(或称HA)是通过部署一对主/备NameNode的方式来实现的.主/备NameNode都

《Hadoop技术详解》一2.3 守护进程

2.3 守护进程 一个标准HDFS集群由3个守护进程组成,如表2-1所示. 数据块可以理解为二进制数据文件的主要组成单元.在HDFS中,负责数据存储和获取的守护进程就是DataNode,简称(DN).数据节点可以直接访问本地挂载的一个或多个磁盘,通常又称数据磁盘.这些挂载在服务器上的磁盘可以用来存储块数据.在产品系统中,这些磁盘通常为Hadoop独有.通过在集群中增加数据节点或者给现有数据节点添加磁盘,就可以轻松实现系统存储空间的扩容. HDFS的另一个最显著优点是它存储数据块时并不需要RAID

《Hadoop技术详解》一2.4 读写数据

2.4 读写数据 客户端可以通过多种不同的工具和应用程序接口(参见2.8节"访问与集成")对HDFS进行读写操作,这些操作都遵循着同样的流程.在某些层面,客户端可能要使用到Hadoop库函数,因为只有Hadoop库函数才清楚知道HDFS的具体细节和相关语法.函数库封装了大部分与NameNode 和DataNode通信相关的细节,同时也考虑了分布式文件系统在诸多场景中的错误处理机制. 2.4.1 数据读取流程 首先,我们来看一下HDFS数据读取操作的处理逻辑.假设,HDFS中已经存储了一