HDFS的设计

1.         设计目标

Ø  容错性  对错误的检测以及快速自动的恢复是HDFS文件系统的主要架构目标

Ø  流式数据的访问、批处理、高吞吐量

Ø  大数据集、大文件、高聚合数据

Ø  write once read many

Ø  移动计算比移动数据更划算,当数据量很大时,把计算工作移到本地完成

Ø  HDFS很方便从一个平台移植到另一个平台

2.         namenodedatanode

HDFS文件系统采用master/slave结构:

一个namenode:管理文件系统的命名空间以及管理客户端对文件的访问。执行文件系统的命名空间的操作,比如打开、关闭、重命名文件的请求。

多个datanode:通常一个节点上运行一个datanode,管理它们所在节点的存储文件,datanode负责处理读写请求,datanode还处理来自于namenode的建立、删除、复制块的指令。

 

3.         数据复制

每个数据块被复制几份存储,datanode定时向namenode发送心跳和分块信息。心跳表示该节点工作正常,分块信息包含了这个节点上包含的所有块。

(1)       副本存放

数据块复制的存放位置需要考虑到可靠性、可用性以及网络带宽。通常HDFS文件存放在很多机架的机器上,同一机架上的机器之间的网络带宽远远高于不同机架之间的网络带宽。通过机架感知(Rack awareness)来确定每个机架的id

一种简单情况是把同一个数据块的副本存放在不同机架的datanode上,这样可以保证在一个机架全部失效了之后数据不至于丢失,但是增加了写操作的代价。

常见的情况是,如果数据要复制3份,则把2份放在本地机架,另一份复制到其它机架。这种策略在不损失数据可靠性和读操作性能的前提下,显著的提高了写操作的性能。

读操作会选择尽量选择最近的副本返回,以便节省带宽和读延迟。

 

(2)       安全模式:

一旦HDFS启动,就立即进入安全模式,安全模式下不能复制数据块。然后datanodenamenode发送心跳包和块信息,块信息包含了这个datanode所拥有的块,每个块包含了这个块的所必须的最小副本数,namenode检查一个块的副本数是否达到最小副本数,一旦达到,就认为这个块是副本安全的,副本安全的块达到一定比例之后,namenode就退出安全模式,然后判断所有块仍然没有达到最小副本数的,再对它们进行复制。

 

4.         文件系统元数据的一致性

hdfs文件系统的命名空间保存在Namenode上,namenode使用Editlog文件来保存所有对元数据的修改的操作。命名空间以及文件块的映射和文件系统属性都保存在FsImage中。

namenode启动后,它把EditlogFsImage中的信息全部读到内存中,checkpoint程序不断读取Editlog的信息,讲Editlog中的事务作用到FsImage中,然后把内存中的FsImage写入磁盘并删除旧的Editlog

datanode不在同一个文件夹下面建立所有的文件,而是采用启发式决定一个文件夹下面文件的最佳数量,然后建立子文件夹。datanode启动后,扫描所有文件,生成一个数据块与本地文件的对应表发给namenode,这就是Blockreport

5.         健壮性

Ø  namenode在一段时间内收不到datanode的心跳包,则认为这个datanode死掉了,存储在这个datanode上的数据块无法访问,namenode开始不断查询哪些数据块需要复制。一旦出现datanode死掉或者副本中断或者datanode磁盘故障,都要开始进行数据重新复制。

Ø  负载均衡。一旦某个datanode存的数据量低于某个阈值,rebalancer程序自动的把其它节点上的数据拷贝过来。

Ø  数据完整性。当一份HDFS文件建立的时候,会生成这份文件的校验和,保存在hdfs命名空间的一个独立的隐藏文件夹中,客户端拷贝文件时,收到文件后就去匹配这些校验和看文件是否完整。如果不完整,则从另外一个datanode重新拷贝。

Ø  元数据文件的容错。namenode可以配置成维护多份FsImageEditlog文件副本,任何对FsimageEditlog文件的更新都同步到其它副本上,每次namenode启动,都会去读最近一次保存的FsImageEditlog副本。如果namenode死掉了,需要人工干预它。自动重启或者是namenode故障转移还没实现。

Ø  快照(snapshots HDFS暂不支持

6.         数据组织

Ø  数据块 64MB

Ø  分阶段存储  客户端创建文件的请求不是直接发送给namenode的,而是在一个datanode上建立一个临时的本地文件,当文件大小达到一个数据块的大小时,clientnamenode发送请求,namenode把文件名插入文件系统并为这个文件分配数据块,返回给client的信息包括datanode的标识和目标数据块,client再把临时文件中的数据放到datanode特定位置。然后通知namenode如果这个过程中namenode死掉了,文件将丢失。

Ø  多节点存储  上面讲的是存储到单个节点的过程,如果要求数据有多个副本,那么采用管道的方式,以4KB大小的数据为一个片进行传输,第一个节点收到4KB数据后,继续接收下一片数据,同时把这个小片数据通过管道传给第二个节点。依此类推。

7.         可访问性

HDFS上的数据可以通过File System Java API在应用程序中进行访问,也可以通过shell命令行方式访问,DFSAdmin方式访问,通过浏览器查看。

8.         文件删除与回收

     被删除的文件在一定时间内保存在/trash中,可以随时回收。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HDFS EC设计文档指的是对Hadoop分布式文件系统(HDFS)中的错误纠正(EC)功能进行设计的文档。EC功能的目的是在大规模数据存储环境中提高数据的可靠性和容错性。 在设计这个文档时,需要考虑的几个重要因素包括: 1. 容错性:HDFS EC功能可以通过在文件块之间进行冗余和编码来提高数据的容错能力。通过采用错误纠正编码算法,可以将原始的数据块转换为一系列编码数据块,并使得其中一部分编码数据块即可用于还原原始数据块。因此,文档需要定义EC算法的选择与实施方式,以确保数据的完整性和可靠性。 2. 存储效率:EC功能可以通过减少冗余度来提高存储效率。文档需要详细描述如何对数据进行编码和解码,以减少存储开销和带宽消耗。例如,可以使用Reed-Solomon编码或Erasure Code来实现这一功能。 3. 性能考虑:EC功能对系统性能有一定的影响。在设计文档时,需要评估EC功能对数据读写操作的性能影响,并根据用户需求和应用场景来选择合适的EC算法。例如,可以根据文件的重要性和可靠性需求,选择相应的恢复速度和存储开销的折中方案。 4. 配置和管理:文档需要讨论如何配置和管理EC功能。包括如何设置EC编解码策略、调整EC参数以及监控EC模块的运行状态等。这将有助于管理员和开发人员更好地理解和利用HDFS EC功能。 综上所述,HDFS EC设计文档需要详细描述对HDFS分布式文件系统中的EC功能的设计和实现方式。文档应该覆盖到容错性、存储效率、性能以及配置和管理等多个方面,以帮助用户和管理员更好地理解和应用这一功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值