HDFS设计思想-阿里云开发者社区

开发者社区> 安全> 正文

HDFS设计思想

简介:

硬件故障是常态

HDFS的目标是在有机器故障时仍能保证数据可靠,并自动进行故障恢复。

流式数据访问

HDFS主要为批处理应用设计,而非交互式应用,看重数据访问的吞吐量而非访问延迟。

海量大文件存储

HDFS主要针对大文件存储设计,一个典型的HDFS文件大小在数G到数T之间,由多个64Mblock组成,一个集群内能支持海量的文件(百万至千万级别)。

简单的一致性模型

HDFS提供一次写多次读(write-once-read-many)的访问模型,文件只允许在末尾追加数据,这种模型简化了多副本一致性问题,提供高的数据访问吞吐量,非常适合做map/reduce

迁移计算vs迁移存储

【把计算调度到数据所在的位置远】比【把数据迁移到计算所在位置】成本低,HDFS提供了接口将应用移到离数据近的位置。

支持异构软硬件

 HDFS基于跨平台的java语言开发,能方便的兼容各种异构的软硬件。

全局中心节点

NameNodeNN)是HDFS里的中心管理节点,NN上的元数据全内存化,元数据主要分为两个部分:(1) 文件的元信息,如大小、时间戳、包含的block等;(2) blockDataNode(DN)的映射关系。前者持久化在NN本地,而后者则是在集群里DN启动时,由DN汇报上来。

元数据持久化

NNfsimage的形式将集群内所有文件的元数据存储到本地,成,运行过程中NN会将文件系统的更改(如创建新的文件)记录到editlogNN启动时,加载fsimage,并合并editlog的更改日志,在内存里建立整个文件系统的目录树结构;

存储节点管理

DN在启动时,会向NN汇报存储的block信息,并周期性的向NN发送心跳信息,NN超过一定时间没有收到DN的心跳,就认为DN发生故障。 

副本放置策略

HDFS通常配置3个副本,在创建block时,会将其中二个副本存储到离客户端近的机架里,将第三个副本存储到另外的机架;由于机架内部的网络带宽远大于机架间的网络带宽,HDFS的策略实际上是数据安全(所有副本分散在不同机架)与写数据效率(所有副本分散在同一机架)的折中方案。

故障恢复

DN机器发生故障时(通常是磁盘坏掉),该磁盘上存储block的副本都会出现副本不足,NN会复制这批block,让其副本达到安全值。

安全模式

HDFS集群刚启动时,所有的DN都会向NN汇报block,当集群规模较大时汇报时间也会较长。NN启动后会先以安全模式运行一段时间(如30s),等待DN汇报block完毕,待安全模式时间过后,一旦NN检测到block副本数不足,就会对block进行复制。

负载均衡

当集群内某个DN空闲的存储空间太少时,NN会主动将该DN的一些数据(block)迁移到其他的DN上;另外,当某个block的数据访问量较大时,NN会主动创建该block额外的副本,用于分担访问请求。

数据完整性

用户从DN读取文件数据时,因DN磁盘或网络问题、软件bug等原因,客户端可能读到错误的数据。HDFS在写入文件时,为文件的每个block计算校验和,当读取文件数据时,客户端通过对数据计算校验和来确认读到数据的完整性。

流水线复制

客户端在写入时,为保证最大吞吐量,客户端会将数据先缓存到本地文件,当客户端缓存的数据超过一个block大小时,会向NN申请创建block,将数据写到block里。在往block的多个副本写入数据时,HDFS采用流水线复制的方式,比如block的三个副本在ABC上,客户端将数据推送给最近的AA收到数据后立即推送给BB推送给C,等所有副本写入成功后,向客户端返回写入成功,当文件所有的block都写入成功后,客户端向NS请求更新文件的元信息。

参考资料

http://hadoop.apache.org/docs/r0.18.0/hdfs_design.pdf

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
+ 订阅

云安全开发者的大本营

其他文章