外文翻译资料
2022-07-26 20:53:17
英语原文共 10 页,剩余内容已隐藏,支付完成后下载完整资料
Hadoop分布式文件系统
摘要:Hadoop分布式文件系统(HDFS)旨在可靠地存储海量数据集,并在高带宽下流式传输这些数据集到用户应用程序。在一个很大的集群中,成千上万的服务器主机直接连接并存储执行用户应用程序任务。通过分配存储和跨越多服务器计算,资源可以在每个计算规模都保持经济性的同时随之增长。我们描述HDFS架构并作出使用HDFS在Yahoo!上管理25 PB的企业数据的经验报告。
关键词:Hadoop,HDFS,分布式文件系统
1.引言和相关工作
Hadoop 提供了一个分布式文件系统和一个使用MapReduce 范例的海量数据集的转型和分析框架。Hadoop一个重要的的特点是数据和计算的划分跨越许多(数千)主机,并行计算应用程序数据。Hadoop集群通过简单添加商品服务器来缩放计算能力,存储容量和IO带宽。
表1. Hadoop项目组件
Hadoop是一个Apache项目;所有组件都可通过Apache开源许可证获得。雅虎已经开发并贡献了Hadoop(HDFS和MapReduce)核心的80%。HBase最初是在Powerset开发的,Powerset现在是微软的一个部门。Hive 由Facebook起源并开发。Pig,ZooKeeper 和Chukwa由雅虎发起并发展,Avro起源于雅虎,由雅虎与Cloudera共同开发。
HDFS是Hadoop的文件系统组件。虽然HDFS的接口在UNIX文件系统之后形成,牺牲了对标准的忠实度,但有利于改善现有应用程序的性能。
HDFS分别存储文件系统元数据和应用程序数据。与其他分布式文件系统一样,如PVFS,Luste和GFS,HDFS将元数据存储在名为NameNode的专用服务器上。应用程序数据存储在称为DataNodes的其他服务器上。所有服务器都完全连接,并使用基于TCP的协议相互通信。
与Luster和PVFS不同,HDFS中的DataNodes不使用数据保护机制(如RAID)来使数据持久。相反,像GFS一样,文件内容被复制在多个DataNodes上以获得可靠性。在确保数据持久性的同时,该策略还具有数据传输带宽倍增的优点,并且在所需数据附近存在更多的定位计算机会。
几个分布式文件系统已经或正在探索命名空间的真正分布式实现。Ceph 具有一组命名空间服务器(MDS),并使用动态子树分区算法,以将命名空间树均匀地映射到MDS。GFS也在演变成一个分布式的命名空间实现。新的GFS将拥有数百名命名空间服务器(主机),每个主机拥有1亿个文件。Lustre 在Lustre 2.2发行版的路线图上实现了集群命名空间。目的是在多个元数据服务器(MDS)上分割目录,每个元数据服务器(MDS)都包含命名空间的不相交部分。使用散列函数以将文件分配给特定的MDS。
2.体系结构
A.名称节点
HDFS命名空间的层次结构是文件和目录。文件和目录在NameNode上由inodes表示,它记录诸如权限,修改和访问时间,命名空间和磁盘空间配额等属性。文件内容分为块(通常为128兆字节,但用户可选择逐个文件),并且文件的每个块都会在多个DataNodes(通常为三个,但用户可选择逐个文件)中独立复制。NameNode维护命名空间树和文件块到DataNodes 2的映射(文件数据的物理位置)。想要读取文件的HDFS客户机首先与NameNode联系,找出包含该文件的数据块的位置,然后从最靠近客户端的DataNode读取块内容。在编写数据时,客户端请求NameNode提名一组三个DataNodes来托管块副本。然后客户端以数据流方式将数据写入DataNodes。当前设计下每个集群都有一个NameNode。由于每个DataNode可以执行多个应用程序,所以集群可以拥有数千个DataNodes和每个集群数以万计的HDFS客户机。
HDFS将整个命名空间保留在RAM中。inode数据和属于每个文件的块列表构成称为映像的系统元数据。存储在本地主机的本机文件系统中的映像的持久记录称为检查点。NameNode还将名为日志的映像的修改日志存储在本地主机的本机文件系统中。为了改善耐用性,冗余副本检查点和日志可以在其他服务器上进行。在重新启动期间,NameNode通过读取命名空间并重播日志来恢复命名空间。 块副本的位置可能会随时间而变化,而不是持久检查点的一部分。
B.数据节点
DataNode上的每个块副本由两个本地主机的本机文件系统中的文件表示。第一个文件包含数据本身,第二个文件是块的元数据,包括块数据和块生成标记的校验和。数据文件的大小等于块的实际长度,并且不像传统文件系统那样需要额外的空间将其缩小到标称块大小。因此,如果块已满,则只需要本地驱动器上完整块的空间的一半。
在启动期间,每个DataNode连接到NameNode并执行握手。握手的目的是验证DataNode的名称空间ID和软件版本。如果与NameNode不匹配,DataNode自动关闭。
命名空间ID格式化时分配给文件系统实例。命名空间ID永久存储在群集的所有节点上。具有不同命名空间ID的节点将无法加入群集,从而保留文件系统的完整性。
一个新初始化并且没有任何命名空间ID的DataNode被允许加入群集并接收群集的命名空间ID。
握手后DataNode注册NameNode。DataNodes持续存储其唯一的存储ID。存储ID是DataNode的内部标识符,即使使用不同的IP地址或端口重新启动,也可以识别它。存储ID首次注册到NameNode时分配给DataNode,之后不会更改。
DataNode通过发送块报告将名称节点的块副本标识在NameNode上。块报告包含服务器主机的块ID,生成标记和每个块副本的长度。DataNode注册后,第一个块报告立即发送。随后的块报告每小时发送一次,并为NameNode提供一个最新的块副本位于集群上的视图。
在正常操作期间,DataNodes向NameNode发送心跳以确认DataNode正在运行,并且其主机的块副本可用。默认的心跳间隔为3秒。如果NameNode在十分钟内没有从DataNode接收到心跳,NameNode会将DataNode视为停止服务,并且该DataNode托管的块副本将不可用。NameNode再通过调度在其他DataNodes上创建这些块的新副本。
来自DataNode的心跳也携带有关总存储容量,正在使用的存储部分数量和当前正在进行的数据传输数量的信息。这些统计信息用于NameNode的空间分配和负载平衡决策。
NameNode不直接调用DataNodes。它使用对心跳的回复将指令发送到DataNodes。说明包括以下命令:
bull;将块复制到其他节点;
bull;删除本地块副本;
bull;重新注册或关闭节点;
bull;发送即时封锁报告。
这些命令对于维护整个系统的完整性非常重要,因此即使在大型集群上也能保持频繁的心跳是至关重要的。NameNode可以每秒处理数千个心跳,而不影响其他NameNode操作。
C. HDFS客户端
用户应用程序使用HDFS客户端访问文件系统,HDFS客户端是导出HDFS文件系统界面的代码库。
与大多数常规文件系统类似,HDFS支持读取,写入和删除文件以及创建和删除目录的操作。用户通过命名空间中的路径引用文件和目录。用户应用程序通常不需要知道文件系统元数据并且存储在不同的服务器上,或者该块具有多个副本。
当应用程序读取文件时,HDFS客户端首先向NameNode询问托管文件块的副本的DataNodes列表。然后它直接与DataNode联系,并请求传输所需的块。当客户端写入时,它首先要求NameNode选择DataNodes来托管该文件的第一个块的副本。客户端从节点到节点组织流水线并发送数据。当第一个块被填充时,客户端请求新的DataNodes被选择来托管下一个块的副本。组织一个新管道,客户端发送文件的更多字节。DataNodes的每个选择都有可能不同。客户端,NameNode和DataNodes之间的交互如图1所示。
图1. HDFS客户端通过给出NameNode的路径创建一个新文件。对于文件的每个块,NameNode返回一个DataNode的列表来托管它的副本。 然后,客户端将数据管线到所选的DataNodes,最终确认创建了NameNode的块副本。
与传统文件系统不同,HDFS提供了一个暴露文件块位置的API。这样,像MapReduce框架这样的应用程序可以安排一个任务数据位于哪里,从而提高读取性能。它还允许应用程序设置文件的复制因子。默认情况下,文件的复制因子为3。对于经常访问的关键文件或文件,具有更高的复制因子可提高其对故障的容忍度并增加读取带宽。
D.映像与日志
命名空间映像是将应用程序数据描述为目录和文件的文件系统元数据。写入磁盘的映像的持久记录称为检查点。该日志是一个预先提交日志,用于对必须持续的文件系统进行更改。对于每个客户端启动的事务,更改记录在日志中,并且在更改提交到HDFS客户端之前,日志文件被刷新并同步。该检查点文件不会被NameNode更改;当在重新启动期间创建新的检查点时,由管理员请求或由下一节中描述的CheckpointNode,它将被全部替换。在启动期间,NameNode从检查点初始化命名空间映像,然后从日志中重新显示更改,直到图像与文件系统的最后一个状态保持同步。在新的检查点和空日志将返回到存储目录之前,NameNode开始为客户端提供服务。
如果检查点或日志丢失或损坏,命名空间信息将部分或全部丢失。为了保存这个关键信息,HDFS可以配置为将检查点和日志存储在多个存储目录中。 推荐的做法是将目录放在不同的卷上,一个存储目录位于远程NFS服务器上。第一个选择可防止单卷故障丢失,第二选择可防止整个节点发生故障。如果NameNode遇到将日志写入其中一个存储目录的错误,它将自动从存储目录列表中排除该目录。如果没有存储目录可用,NameNode自动关闭自己。
NameNode是一个多线程系统,同时从多个客户端处理请求。因为所有其他线程都需要等待,直到由其中一个线程启动的同步刷新和同步过程完成,将事务保存到磁盘成为了瓶颈。为了优化此过程,NameNode批处理由不同客户端发起的多个事务。当其中一个NameNode的线程启动一个flush-and-sync(刷新和同步)操作时,当时批处理的所有事务都被一起提交。剩余的线程只需要检查它们的事务是否已被保存,并且不需要启动刷新和同步操作。
E. CheckpointNode
HDFS中的NameNode除了提供客户端请求的主要角色外,还可以执行CheckpointNode或BackupNode两个角色之一。角色在节点启动时指定。
CheckpointNode定期组合现有的检查点和日志,以创建新的检查点和空日志。 CheckpointNode通常运行在与NameNode不同的主机上,因为它具有与NameNode相同的内存要求。 它从NameNode下载当前的检查点和日志文件,将它们本地合并,并将新的检查点返回到NameNode。
创建定期检查点是保护文件系统元数据的一种方法。如果命名空间图像或日志的所有其他持久性副本不可用,则系统可以从最近的检查点开始。
创建检查点时,当新的检查点上传到NameNode时,NameNode会截断日志的尾部。 当日志不断增长时,HDFS集群长时间运行,而不会重新启动。 如果日志增长过大,则日志文件丢失或损坏的可能性增加。另外,一个过大的日志会增加重新启动NameNode所需的时间。 对于一个大集群,处理一周长的日志需要一个小时。 良好的做法是创建一个每日检查点。
F.备份节点
HDFS最近推出的一个功能就是BackupNode。与CheckpointNode一样,BackupNode能够创建定期的检查点,但是它还维护着一个内存,更新与NameNode状态同步的文件系统命名空间映像。
BackupNode从活动的NameNode接受命名空间事务的日志流,将其保存到其自己的存储目录中,并将这些事务应用于内存中自己的命名空间映像。 NameNode将BackupNode视为与存储目录中的日记文件相同的日记存储。 如果NameNode失败,BackupNode在内存中的映像和磁盘上的检查点就是最新命名空间状态的记录。
BackupNode可以创建一个检查点,而不会从活动的NameNode下载检查点和日志文件,因为在其记忆中它已经具有最新的命名空间映像。这使得BackupNode上的检查点进程更有效率,因为它只需要将命名空间保存到其本地存储目录中。
BackupNode可以被视为只读NameNode,它包含除块位置之外的所有文件系统元数据信息。它可以执行不涉及修改命名空间或块位置知识的常规NameNode的所有操
全文共19910字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[144517],资料为PDF文档或Word文档,PDF文档可免费转换为Word