`
ld_hust
  • 浏览: 170269 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hadoop分布式文件系统:架构和设计要点Ⅱ(转)

阅读更多

五、文件系统元数据的持久化
    Namenode存储HDFS的元数据。对于任何对文件元数据产生修改的操作,Namenode都使用一个称为Editlog的事务日志记录下来。例如,在HDFS中创建一个文件,Namenode就会在Editlog中插入一条记录来表示;同样,修改文件的replication因子也将往 Editlog插入一条记录。Namenode在本地OS的文件系统中存储这个Editlog。整个文件系统的namespace,包括block到文件的映射、文件的属性,都存储在称为FsImage的文件中,这个文件也是放在Namenode所在系统的文件系统上。
    Namenode在内存中保存着整个文件系统namespace和文件Blockmap的映像。这个关键的元数据设计得很紧凑,因而一个带有4G内存的 Namenode足够支撑海量的文件和目录。当Namenode启动时,它从硬盘中读取EditlogFsImage,将所有Editlog中的事务作用(apply)在内存中的FsImage ,并将这个新版本的FsImage从内存中flush到硬盘上,然后再truncate这个旧的Editlog,因为这个旧的Editlog的事务都已经作用在FsImage上了。这个过程称为checkpoint。在当前实现中,checkpoint只发生在Namenode启动时,在不久的将来我们将实现支持周期性的checkpoint
    Datanode并不知道关于文件的任何东西,除了将文件中的数据保存在本地的文件系统上。它把每个HDFS数据块存储在本地文件系统上隔离的文件中。 Datanode并不在同一个目录创建所有的文件,相反,它用启发式地方法来确定每个目录的最佳文件数目,并且在适当的时候创建子目录。在同一个目录创建所有的文件不是最优的选择,因为本地文件系统可能无法高效地在单一目录中支持大量的文件。当一个Datanode启动时,它扫描本地文件系统,对这些本地文件产生相应的一个所有HDFS数据块的列表,然后发送报告到Namenode,这个报告就是Blockreport

六、通讯协议
    所有的HDFS通讯协议都是构建在TCP/IP协议上。客户端通过一个可配置的端口连接到Namenode,通过ClientProtocolNamenode交互。而Datanode是使用DatanodeProtocolNamenode交互。从ClientProtocolDatanodeprotocol抽象出一个远程调用(RPC),在设计上,Namenode不会主动发起RPC,而是是响应来自客户端和 Datanode RPC请求。

七、健壮性
    HDFS的主要目标就是实现在失败情况下的数据存储可靠性。常见的三种失败:Namenode failures, Datanode failures和网络分割(network partitions)
1、硬盘数据错误、心跳检测和重新复制
    每个Datanode节点都向Namenode周期性地发送心跳包。网络切割可能导致一部分DatanodeNamenode失去联系。 Namenode通过心跳包的缺失检测到这一情况,并将这些Datanode标记为dead,不会将新的IO请求发给它们。寄存在dead Datanode上的任何数据将不再有效。Datanode的死亡可能引起一些block的副本数目低于指定值,Namenode不断地跟踪需要复制的 block,在任何需要的情况下启动复制。在下列情况可能需要重新复制:某个Datanode节点失效,某个副本遭到损坏,Datanode上的硬盘错误,或者文件的replication因子增大。

2、集群均衡
   HDFS支持数据的均衡计划,如果某个Datanode节点上的空闲空间低于特定的临界点,那么就会启动一个计划自动地将数据从一个Datanode搬移到空闲的Datanode。当对某个文件的请求突然增加,那么也可能启动一个计划创建该文件新的副本,并分布到集群中以满足应用的要求。这些均衡计划目前还没有实现。

3、数据完整性
从某个Datanode获取的数据块有可能是损坏的,这个损坏可能是由于Datanode的存储设备错误、网络错误或者软件bug造成的。HDFS客户端软件实现了HDFS文件内容的校验和。当某个客户端创建一个新的HDFS文件,会计算这个文件每个block的校验和,并作为一个单独的隐藏文件保存这些校验和在同一个HDFS namespace下。当客户端检索文件内容,它会确认从Datanode获取的数据跟相应的校验和文件中的校验和是否匹配,如果不匹配,客户端可以选择从其他Datanode获取该block的副本。

4、元数据磁盘错误
    FsImageEditlogHDFS的核心数据结构。这些文件如果损坏了,整个HDFS实例都将失效。因而,Namenode可以配置成支持维护多个FsImageEditlog的拷贝。任何对FsImage或者Editlog的修改,都将同步到它们的副本上。这个同步操作可能会降低 Namenode每秒能支持处理的namespace事务。这个代价是可以接受的,因为HDFS是数据密集的,而非元数据密集。当Namenode重启的时候,它总是选取最近的一致的FsImageEditlog使用。
   NamenodeHDFS是单点存在,如果Namenode所在的机器错误,手工的干预是必须的。目前,在另一台机器上重启因故障而停止服务的Namenode这个功能还没实现。

5、快照
   快照支持某个时间的数据拷贝,当HDFS数据损坏的时候,可以恢复到过去一个已知正确的时间点。HDFS目前还不支持快照功能。

八、数据组织
1、数据块
    兼容HDFS的应用都是处理大数据集合的。这些应用都是写数据一次,读却是一次到多次,并且读的速度要满足流式读。HDFS支持文件的write- once-read-many语义。一个典型的block大小是64MB,因而,文件总是按照64M切分成chunk,每个chunk存储于不同的 Datanode
2、步骤
    某个客户端创建文件的请求其实并没有立即发给Namenode,事实上,HDFS客户端会将文件数据缓存到本地的一个临时文件。应用的写被透明地重定向到这个临时文件。当这个临时文件累积的数据超过一个block的大小(默认64M),客户端才会联系NamenodeNamenode将文件名插入文件系统的层次结构中,并且分配一个数据块给它,然后返回Datanode的标识符和目标数据块给客户端。客户端将本地临时文件flush到指定的 Datanode上。当文件关闭时,在临时文件中剩余的没有flush的数据也会传输到指定的Datanode,然后客户端告诉Namenode文件已经关闭。此时Namenode才将文件创建操作提交到持久存储。如果Namenode在文件关闭前挂了,该文件将丢失。
   上述方法是对通过对HDFS上运行的目标应用认真考虑的结果。如果不采用客户端缓存,由于网络速度和网络堵塞会对吞估量造成比较大的影响。

3、流水线复制
    当某个客户端向HDFS文件写数据的时候,一开始是写入本地临时文件,假设该文件的replication因子设置为3,那么客户端会从Namenode 获取一张Datanode列表来存放副本。然后客户端开始向第一个Datanode传输数据,第一个Datanode一小部分一小部分(4kb)地接收数据,将每个部分写入本地仓库,并且同时传输该部分到第二个Datanode节点。第二个Datanode也是这样,边收边传,一小部分一小部分地收,存储在本地仓库,同时传给第三个Datanode,第三个Datanode就仅仅是接收并存储了。这就是流水线式的复制。

九、可访问性
    HDFS给应用提供了多种访问方式,可以通过DFSShell通过命令行与HDFS数据进行交互,可以通过java API调用,也可以通过C语言的封装API访问,并且提供了浏览器访问的方式。正在开发通过WebDav协议访问的方式。具体使用参考文档。
十、空间的回收
1、文件的删除和恢复
    用户或者应用删除某个文件,这个文件并没有立刻从HDFS中删除。相反,HDFS将这个文件重命名,并转移到/trash目录。当文件还在/trash目录时,该文件可以被迅速地恢复。文件在/trash中保存的时间是可配置的,当超过这个时间,Namenode就会将该文件从namespace中删除。文件的删除,也将释放关联该文件的数据块。注意到,在文件被用户删除和HDFS空闲空间的增加之间会有一个等待时间延迟。
    当被删除的文件还保留在/trash目录中的时候,如果用户想恢复这个文件,可以检索浏览/trash目录并检索该文件。/trash目录仅仅保存被删除文件的最近一次拷贝。/trash目录与其他文件目录没有什么不同,除了一点:HDFS在该目录上应用了一个特殊的策略来自动删除文件,目前的默认策略是删除保留超过6小时的文件,这个策略以后会定义成可配置的接口。

2Replication因子的减小
    当某个文件的replication因子减小,Namenode会选择要删除的过剩的副本。下次心跳检测就将该信息传递给DatanodeDatanode就会移除相应的block并释放空间,同样,在调用setReplication方法和集群中的空闲空间增加之间会有一个时间延迟。

参考资料:
HDFS Java API: http://hadoop.apache.org/core/docs/current/api/
HDFS source code: http://hadoop.apache.org/core/version_control.html

分享到:
评论

相关推荐

    Hadoop分布式文件系统:架构和设计要点

    《Hadoop分布式文件系统:架构和设计要点》 Hadoop分布式文件系统(HDFS)是为处理大规模数据而设计的一种可扩展、可靠的分布式文件系统。本文将深入探讨其架构和设计的核心要点。 首先,HDFS的设计目标是针对硬件...

    Hadoop分布式文件系统:架构和设计要点.pdf

    ### Hadoop分布式文件系统:架构和设计要点 #### 一、前提和设计目标 Hadoop分布式文件系统(HDFS)的设计初衷是为了解决大规模数据处理的问题,特别是针对那些需要处理TB甚至PB级别数据的应用程序。为了实现这一...

    Hadoop分布式文件系统-架构和设计要点

    "Hadoop分布式文件系统架构和设计要点" Hadoop分布式文件系统(HDFS)是一种专门为大数据存储和处理而设计的分布式文件系统。它的架构和设计要点是基于以下几点考虑: 1. 硬件错误是常态,而非异常情况。HDFS 可能...

    Hadoop分布式文件系统-架构和设计要点(翻译).pdf

    "Hadoop分布式文件系统-架构和设计要点" Hadoop分布式文件系统(HDFS)是Hadoop生态系统中的核心组件之一,负责存储和管理大规模数据。HDFS的架构和设计要点主要体现在以下几个方面: 1. 硬件错误是常态,而非异常...

    Hadoop分布式文件系统-架构和设计要点[定义].pdf

    Hadoop分布式文件系统架构和设计要点 Hadoop分布式文件系统(HDFS)是一种高度可靠、可扩展、可维护的分布式文件系统,专门为大规模数据处理和存储而设计。下面是HDFS的架构和设计要点: 一、前提和设计目标 1. ...

    Hadoop分布式文件系统架构和设计要点.pdf

    《Hadoop分布式文件系统架构和设计要点》 Hadoop分布式文件系统(HDFS)是大数据处理领域中的核心组件,其设计目标主要针对大规模数据集的存储和处理。首先,HDFS设计的前提是硬件错误频繁发生,因此系统必须具备...

    流式实时分布式计算系统的设计要点.pdf

    流式实时分布式计算系统的设计要点主要涉及如何处理和分析在极短时间内产生的海量数据,以支持在线或近线系统对实时数据的处理需求。流式计算已经成为互联网公司处理大数据的关键技术,它支持多样的业务场景,包括...

    [Hadoop权威指南(第2版)].(Hadoop:The.Definitive.Guide).文字版.pdf

    - **分布式文件系统**:介绍了Hadoop分布式文件系统(HDFS)的关键特性,如数据冗余、故障恢复机制等。 - **MapReduce框架**:深入探讨了MapReduce的架构设计原理,包括任务调度、资源管理等方面。 - **性能优化**:...

    计算机-后端-Hadoop架构在政府采购系统中的研究与应用.pdf

    数据库使用Hadoop分布式数据库,能够存储和处理大量数据。 4. 系统测试和验证 本文通过测试,验证了Hadoop平台在政府采购系统中的可行性。测试结果表明,基于Hadoop平台的政府采购系统能够满足政府数据处理的需求...

    Hadoop海量级分布式存储

    为了更好地理解Hadoop,本文将重点介绍其核心概念、架构设计和应用场景,并对HDFS和MapReduce的工作机制进行详细的阐释,同时提供一个部署Hadoop分布式存储集群的案例,帮助读者全面掌握Hadoop的知识要点和实施技巧...

    Hadoop架构实验ppt

    ### Hadoop架构实验知识点概述 #### 一、Hadoop安装部署模式详解 Hadoop支持三种主要的部署模式:单机模式、伪分布式模式以及分布式模式。 1. **单机模式**: - **定义**:这是Hadoop默认的运行模式,无需额外...

    云计算环境下分布式文件系统的应用性能分析

    本文标题《云计算环境下分布式文件系统的应用性能分析》以及描述中提到的内容,主要聚焦于在云计算环境中,分布式文件系统如Lustre和Hadoop分布式文件系统(HDFS)的性能比较。该研究提出了一种基于Hadoop的Lustre...

    基于Hadoop平台的分布式搜索引擎.zip

    "SearchEngine-master"项目为我们提供了一个实践平台,通过学习和研究,我们可以更好地理解和掌握在Hadoop上构建搜索引擎的技术要点。在面对不断增长的数据量和日益复杂的查询需求时,这样的技术方案无疑具有重要的...

Global site tag (gtag.js) - Google Analytics