HDFS 集群的机架感知

1、背景

1.1、Hadoop 的设计目的

解决海量大文件的处理问题,主要指大数据的存储和计算问题。
其中,HDFS 解决数据的存储问题;MapReduce 解决数据的计算问题。

1.2、Hadoop 的设计考虑

设计分布式的存储和计算解决方案架构在廉价的集群之上,所以,服务器节点出现宕机的情况是常态。数据的安全是重要考虑点。HDFS 的核心设计思路就是对用户存进 HDFS 里的所有数据都做冗余备份,以此保证数据的安全。

那么 Hadoop 在设计时考虑到数据的安全,数据文件默认在 HDFS 上存放三份。显然,这三份副本肯定不能存储在同一个服务器节点。那怎么样的存储策略能保证数据既安全也能保证数据的存取高效呢?

1.3、副本存放策略

HDFS 分布式文件系统的内部有一个副本存放策略:以默认的副本数=3 为例:
(1)第一个副本块存本机;
(2)第二个副本块存跟本机同机架内的其他服务器节点;
(3)第三个副本块存不同机架的一个服务器节点上;

好处:
(1)如果本机数据损坏或者丢失,那么客户端可以从同机架的相邻节点获取数据,速度肯定要比跨机架获取数据要快。
(2)如果本机所在的机架出现问题,那么之前在存储的时候没有把所有副本都放在一个机架内,这就能保证数据的安全性,此种情况出现,就能保证客户端也能取到数据。

HDFS 为了降低整体的网络带宽消耗和数据读取延时,HDFS 集群一定会让客户端尽量去读取近的副本,那么按照以上头解释的副本存放策略的结果:
(1)如果在本机有数据,那么直接读取;
(2)如果在跟本机同机架的服务器节点中有该数据块,则直接读取;
(3)如果该 HDFS 集群跨多个数据中心,那么客户端也一定会优先读取本数据中心的数据。

但是 HDFS 是如何确定两个节点是否是统一节点,如何确定的不同服务器跟客户端的远近呢?答案就是机架感知。!!!!

在默认情况下,HDFS 集群是没有机架感知的,也就是说所有服务器节点在同一个默认机架中。那也就意味着客户端在上传数据的时候,HDFS 集群是随机挑选服务器节点来存储数据块的三个副本的。

那么假如,datanode1 和 datanode3 在同一个机架 rack1,而 datanode2 在第二个机架 rack2,那么客户端上传一个数据块 block_001,HDFS 将第一个副本存放在 dfatanode1,第二个副本存放在 datanode2,那么数据的传输已经跨机架一次(从 rack1 到 rack2),然后 HDFS 把第三个副本存 datanode3,此时数据的传输再跨机架一次(从 rack2 到 rack1)。显然,当 HDFS 需要处理的数据量比较大的时候,那么没有配置机架感知就会造成整个集群的网络带宽的消耗非常严重。

下图是没有配置机架感知的 HDFS 集群拓扑:

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值