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

2.3 守护进程

一个标准HDFS集群由3个守护进程组成,如表2-1所示。

数据块可以理解为二进制数据文件的主要组成单元。在HDFS中,负责数据存储和获取的守护进程就是DataNode,简称(DN)。数据节点可以直接访问本地挂载的一个或多个磁盘,通常又称数据磁盘。这些挂载在服务器上的磁盘可以用来存储块数据。在产品系统中,这些磁盘通常为Hadoop独有。通过在集群中增加数据节点或者给现有数据节点添加磁盘,就可以轻松实现系统存储空间的扩容。

HDFS的另一个最显著优点是它存储数据块时并不需要RAID的支持,这就可以达成只需要使用低成本商用硬件的设计目标,减少集群扩容的成本。数据块的安全可以通过在多台机器同时保留多份数据块副本得以保证,而不需要依赖磁盘阵列(RAID)。增加数据块副本的方案可能因安全考量增加了原始数据的存储成本,但也因此提升了处理效率。将数据块的多个副本保存在多台机器上,既避免了数据块因机器故障而丢失,同时又可以在处理数据时使用该数据的任何一个副本。因为有多份数据可供选择,调度器在调度任务时,可以更灵活地将计算任务安排在拥有数据备份的机器上。详细情况,请阅读第3章。

放弃使用RAID是有争议的,很多人认为RAID就像一个神奇的加速按钮,可以让磁盘运行更快。然而,事实并非如此。在Hadoop特定的应用场景中,数量巨大的独立磁盘,搭配独立I/O队列,能承受巨量的顺序I/O操作,其性能往往会比RAID高出许多。通常,DataNodes拥有大量的独立磁盘,每块磁盘都保存着完整的数据块。相关话题的深入讨论请参见4.2.4节“刀片服务器,存储区域网络(SANs)和虚拟化”。

DataNode守护进程负责存储数据块,而NameNode(或简写成NN)守护进程则负责保存文件系统的元数据,并维护文件系统全景图。尽管用户是连接在NameNode上进行文件系统操作的,但正如我们稍后将要看到的那样,数据块是直接流入和流出DataNode的,因此单个节点不会成为整个系统的瓶颈。DataNode通过周期性心跳向NameNode报告各自的状态。因而,在任何时刻,NameNode都掌握着整个集群中每个DataNode的状态:它们是否工作正常,哪些数据块是可用的等。图2-1给出了一个HDFS架构的实例。

在DataNode初始化的过程中,以及之后每隔1小时,都会向NameNode发送一个块报告(block report)。所谓“块报告”,就是一个包含DataNode磁盘中所有数据块信息的列表,这样NameNode就可以跟踪数据块的任何变化。块报告是非常重要的,因为在NameNode磁盘中保存了文件与数据块的映射关系,却并不保存数据块的位置信息。这乍看起来似乎有悖常理,但这种设计的优点就是即便DataNode的IP地址或主机名发生了改变,也不会影响文件系统中元数据的存储。这样做还有一个附带的好处,当一个DataNode的主板发生故障时,管理员只需拆下硬盘,将它们插入新的机箱,然后启动新机器,这依然不会影响元数据的存储,在NameNode中看到的就是数据块迁移到了一个新的DataNode上。当然这样做也有副作用,当全新初始化启动一个集群(在这种情况下,重启集群也是一样的),NameNode必须收集齐所有DataNode的块报告后才能知道所有数据块的存在。

为了快速查找和获取文件信息,NameNode文件系统的元数据全部保存在RAM中。当然这样做就会限制NameNode能处理的元数据的大小。粗略地估计,1GB的内存可以管理大约100万个数据块(更多内容请参见4.2节“硬件选型”)。稍后我们将讨论如何突破这种限制。当然这种突破也不常发生,只有在超大规模的集群中(上万个DataNodes),才有可能需要这种突破。

HDFS第三个守护进程就是次NameNode,它主要负责NameNode内部的维护清理工作。可千万不要受这个名字迷惑,次 NameNode可不是NameNode的备份进程,它的功能与NameNode 也完全不同。

图像说明文字
次NameNode可能是计算机历史上对进程的最糟糕的命名之一。很多Hadoop的初学者可能会受到这个名字的欺骗,误以为在NameNode出现故障而不能正常工作时,次NameNode会自动成为新的NameNode,这样集群就可以继续运作。其实不然,稍后将介绍次 NameNode的功能。这里只是提请读者注意,在关注次NameNode是什么的同时,也要记住它们不是什么。

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

《Hadoop技术详解》一2.3 守护进程的相关文章

《Hadoop技术详解》一导读

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

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

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

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

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

《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.7 NameNode联盟

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

《Hadoop技术详解》一2.2 设计

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

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

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

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

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