读取hdfs文件_[知识讲解篇-04]HDFS解决了什么问题(二)

9a9292295351d45e903606471b9121a2.gif

HDFS中两个重要的组件: Namenode 和 Datanode

HDFS 采用 master/slave 架构。一个 HDFS 集群是由一个 Namenode(HA的情况除外) 和多个 Datanodes 组成。Namenode 是一个中心服务器,负责管理文件系统的名字空间(namespace) 以及客户端对文件的访问。集群中的 Datanode 一般是一个节点一个,负责管理它所在节点上的存储。HDFS 暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组 Datanode 上。Namenode 执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体 Datanode 节点的映射。Datanode 负责处理文件系统客户端的读写请求。在 Namenode 的统一调度下进行数据块的创建、删除和复制。

d8bbebcfb1f636ff27cfee0faeb56ced.gif

数据复制(产生了副本)

HDFS旨在可靠地在大型群集中的机器上存储文件。它将每个文件存储为一系列的块。文件的块被复制到多个节点(复制到几个由复制因子控制,hdfs-site.xml的dfs.replication属性)以实现容错。复制因子可以针对生成环境需要进行配置,复制因子可以在文件创建时指定,并可以稍后更改。

一个文件的所有块(文件越大按照块大小切分出来的块越多)中除最后一个块之外的所有块都具有相同的大小(hdfs-site.xml的dfs.blocksize)。HDFS中的文件是一次写入的(附加和截断除外),并且在任何时候都严格限定只有一个writer。

NameNode控制块的复制,它定期从集群中的每个DataNode接收Heartbeat和Blockreport。收到Heartbeat意味着DataNode运行正常,Blockreport包含DataNode上所有块的列表(NameNode即可以知道是否有丢块或多块)。

eb0169c713371e8207e7c278cc46f32f.gif

副本放置策略(决定副本放在哪个节点)

副本的放置对于HDFS的可靠性和性能至关重要。基于机架感知(Namenode知道副本在哪个rack)的副本放置策略的目的是提高数据可靠性,可用性和网络带宽利用率。

如果复制因子为3:

则HDFS的放置策略是在本地机器上放置第一个副本(如果写入器位于datanode上),否则随机放置在一个数据节点上;

第二个副本复制在另一个机架(非第一个副本所在的机架)的节点上;

第三个副本放在与第二个副本存放节点相同的机架上的其他节点上。

这样放置的优势所在:

降低了读取数据时使用的总体网络带宽,因为块仅放置在两个独特的机架中,而不是三个。使用此策略,文件的副本不会均匀分布在机架上。三分之一的副本位于一个节点,三分之二的副本位于一个机架上,另外三分之一均匀分布在其余机架上。此策略可提高写入性能,而不会影响数据可靠性或读取性能。

注意:

如果复制因子大于3,则随机确定第4个副本和后续副本的位置,同时将每个机架的副本数保持在上限以下((replicas - 1) / racks + 2)。

由于NameNode不允许一个DataNode具有同一个块的多个副本,因此创建的最大副本数不应该大于DataNode节点的总数量。

副本选择(即读取的时候优先从哪个节点读取)
为了尽量减少全局带宽消耗和读取延迟,HDFS会尝试选择最接近读请求的块。如果在读节点的同一机架上存在副本,则该副本优先满足读取请求。如果HDFS群集跨越多个数据中心,则驻留在本地数据中心的副本优先于任何远程副本。

c96743b5dc8914a69f6a872423477ad9.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值