失效链接处理 |
HDFS体系架构汉化文档 PDF 下载
本站整理下载:
提取码:nuqp
相关截图:
主要内容:
介绍
Hadoop 分布式文件系统(HDFS)是一种旨在在商品硬件上运行的分布式文件系统。它
与现有的分布式文件系统有许多相似之处。但是,与其他分布式文件系统的区别很明显。
HDFS 具有高度的容错能力,旨在部署在低成本硬件上。HDFS 提供对应用程序数据的高吞
吐量访问,并且适用于具有大数据集的应用程序。HDFS 放宽了一些 POSIX 要求,以实现对
文件系统数据的流式访问。HDFS 最初是作为 Apache Nutch Web 搜索引擎项目的基础结构
而 构 建 的 。 HDFS 是 Apache Hadoop Core 项 目 的 一 部 分 。 项 目 URL 是
http://hadoop.apache.org/。
NameNode 和 DataNodes
HDFS 具有主/从体系结构。 HDFS 群集由单个 NameNode 和管理文件系统名称空间并
控制客户端对文件的访问的主服务器组成。 此外,还有许多数据节点,通常是集群中每个
节点一个,用于管理与它们所运行的节点相连的存储。 HDFS 公开了文件系统名称空间,并
允许用户数据存储在文件中。 在内部,文件被分成一个或多个块,这些块存储在一组
DataNode 中。 NameNode 执行文件系统名称空间操作,例如打开,关闭和重命名文件和
目录。 它还确定块到 DataNode 的映射。 数据节点负责处理来自文件系统客户端的读写请
求。 DataNode 还根据 NameNode 的指令执行块创建,删除和复制。
NameNode 和 DataNode 是为在普通机器上运行而设计的软件。这些机器通常运行
GNU/Linux 操作系统(OS)。HDFS 是使用 Java 语言构建的;任何支持 Java 的机器都可以运行
NameNode 或 DataNode 软件。使用高度可移植的 Java 语言意味着 HDFS 可以部署在各种
机器上。一个典型的部署有一个专用的机器,它只运行 NameNode 软件。集群中的其他每
台机器都运行 DataNode 软件的一个实例。该体系结构不排除在同一台机器上运行多个
datanode,但在实际部署中很少会出现这种情况。
集群中单个 NameNode 的存在极大地简化了系统的体系结构。NameNode 是所有 HDFS 元
数据的仲裁程序和存储库。系统的设计方式是,用户数据永远不会流经 NameNode。
文件系统命名空间
HDFS 支持传统的分层文件组织。用户或应用程序可以创建目录并将文件存储在这些目录
中。文件系统名称空间层次结构与大多数其他现有文件系统相似;可以创建和删除文件,将文件
从一个目录移动到另一个目录,或者重命名文件。HDFS 支持用户配额和访问权限。HDFS 不支
持硬链接或软链接。但是,HDFS 体系结构并不排除实现这些特性。
虽然 HDFS 遵循文件系统的命名约定,但某些路径和名称(例如/.reserved 和.snapshot)
被保留。 透明加密和快照等功能使用保留的路径。
NameNode 维护文件系统名称空间。 对文件系统名称空间或其属性的任何更改均由
NameNode 记录。 应用程序可以指定 HDFS 应该维护的文件副本的数量。 文件的副本数称为
该文件的复制因子。 此信息由 NameNode 存储。
数据复制
HDFS 旨在在大型群集中的计算机之间可靠地存储非常大的文件。 它将每个文件存储为一
系列块。 复制文件的块是为了容错。 块大小和复制因子是每个文件可配置的。
文件中除最后一个块外的所有块都具有相同的大小,而在添加了对可变长度块的支持后,用
户可以在不填充最后一个块的情况下开始新的块,而不用配置的块大小。
应用程序可以指定文件的副本数量。复制因子可以在文件创建时指定,以后可以更改。HDFS
中的文件只能写入一次(除了追加和截断之外),并且每次只能写一个。
NameNode 做出有关块复制的所有决定。 它定期从群集中的每个 DataNode 接收心跳信号
和 Blockreport(块报告)。 收到心跳信号表示 DataNode 正常运行。 Blockreport(块报告)包 含 DataNode 上所有块的列表。
复制品放置
在常见情况下,当复制因子为 3 时,HDFS 的放置策略是:如果写入器(Client node)位
于数据节点上,则将一个副本放置在本地计算机上;否则,将与写入器位于同一机架的随机数
据节点放置在本地计算机上,将另一个副本放置在本地计算机上。 一个节点(位于不同(远
程)机架中),最后一个节点位于同一远程机架中的另一个节点上。 该策略减少了机架间的写
流量,通常可以提高写性能。 机架故障的机会远小于节点故障的概率。 此策略不会影响数据
的可靠性和可用性保证。 但是,由于一个块仅放置在两个唯一的机架中,而不是三个,因此它
确实减少了读取数据时使用的总网络带宽。 使用此策略,文件的副本不会均匀分布在机架上。
三分之一的副本位于一个节点上,三分之二的副本位于一个机架上,其余三分之一则均匀分布
在其余机架上。 此策略可提高写入性能,而不会影响数据可靠性或读取性能。
如果复制因子大于 3,则在确定每个机架的副本数量低于上限(基本上是(副本-1)/机架
+ 2)以下的同时,随机确定第 4 个及以下副本的位置。
由于 NameNode 不允许 DataNode 具有同一块的多个副本,因此创建的副本的最大数量
是当时 DataNode 的总数。
将对存储类型和存储策略的支持添加到 HDFS 后,除了上述机架描述之外,NameNode
还考虑了该策略的副本放置位置。 首先,NameNode 基于机架识别来选择节点,然后检查候
选节点是否具有与文件关联的策略所需的存储。 如果候选节点不具有存储类型,则
NameNode 将寻找另一个节点。 如果在第一条路径中找不到足够的节点来放置副本,则
NameNode 将在第二条路径中查找具有备用存储类型的节点。
这里描述的当前默认副本放置策略是一项正在进行的工作。
副本的选择
为了最大程度地减少全局带宽消耗和读取延迟,HDFS 尝试满足最接近读取器的副本的读
取请求。 如果在与读取器节点相同的机架上存在一个副本,则该副本应优先满足读取请求。 如 果 HDFS 群集跨越多个数据中心,那么驻留在本地数据中心的副本优于任何远程副本。
安全模式
启动时,NameNode 进入一个特殊的状态,称为安全模式。 当 NameNode 处于安全模式
状态时,不会发生数据块的复制。 NameNode 从数据节点接收心跳和 Blockreport 消息。
Blockreport 包含 DataNode 托管的数据块列表。 每个块都有指定的最小副本数。当该数据块的
最小副本数量通过 NameNode 检测时,一个块就被认为是安全复制的。在使用可配置百分比的
安全复制数据块通过 NameNode 检入(再加上 30 秒)后,NameNode 退出安全模式状态。然
后它确定数据块的列表(如果有的话),这些数据块的数量仍然少于指定的副本数量。 然后,
NameNode 将这些块复制到其他 DataNode。
文件系统元数据的持久性
HDFS 命名空间由 NameNode 存储。NameNode 使用名为 EditLog 的事务日志持久地记录
文件系统元数据发生的每个更改。例如,在 HDFS 中创建一个新文件将导致 NameNode 将一条
记录插入到 EditLog 中,以表明这一点。同样,更改文件的复制因子会导致将新记录插入到
EditLog 中。NameNode 使用本地主机 OS 文件系统中的一个文件来存储 EditLog。整个文件系
统命名空间(包括块到文件和文件系统属性的映射),都存储在一个名为 FsImage 的文件中。
FsImage 也作为一个文件存储在 NameNode 的本地文件系统中。
NameNode 在内存中保留整个文件系统名称空间和文件 Blockmap 的映像。或者一个检查
点被一个可配置的阈值触发时,它会从磁盘读取 FsImage 和 EditLog,将来自 EditLog 的所有事
务应用到 FsImage 的内存中表示,并将此新版本刷新为 磁盘上的新 FsImage。然后它可以截断
旧的 EditLog,因为它的事务已经应用于持久 FsImage。检查点的目的是通过对文件系统元数据
进行快照并将其保存到 FsImage 来确保 HDFS 对文件系统元数据具有一致性。即使读取
FsImage 效率很高,但直接对 FsImage 进行增量编辑效率也不高。我们无需为每个编辑修改
FsImage,而是将编辑保留在Editlog中。在检查点期间,来自Editlog的更改将应用于FsImage。 可以在以秒为单位的给定时间间隔(dfs.namenode.checkpoint.period)或累积一定数量的文件
系统事务之后(dfs.namenode.checkpoint.txns)触发检查点。
DataNode 将 HDFS 数据存储在其本地文件系统中的文件中。 DataNode 不了解 HDFS 文
件。 它将每个 HDFS 数据块存储在其本地文件系统中的单独文件中。 DataNode 不会在同一目
录中创建所有文件。 而是使用启发式方法确定每个目录的最佳文件数,并适当创建子目录。 在
同一目录中创建所有本地文件不是最佳选择,因为本地文件系统可能无法有效地支持单个目录
中的大量文件。 当 DataNode 启动时,它将扫描其本地文件系统,生成与每个本地文件相对应
的所有 HDFS 数据块的列表,并将此报告发送到 NameNode。 该报告称为 Blockreport。
|