Hdfs的机架感知与副本放置策略

1.介绍

Apache hadoop 机架感知

        Hadoop分布式文件系统(Hdfs)作为Apache Hadoop生态系统的的核心组件之一,通过机架感知和副本放置策略来优化数据的可靠性,可用和性能.

        Hdfs的机架感知和副本放置策略是其设计的关键组成部分,有效地提高了数据的可靠性,可用性和性能,使其成为处理大规模数据的理想选择.

2. 机架感知

2.1 什么是机架感知

        Hadoop组件时机架感知的.例如,hdfs块放置将通过将一个块副本放置在不同的机架上来使用机架感知来实现容错.这在网络交换机发生故障或集群内发生分区时提供数据可用性.

       假设有客户端要读取一份数据A,其中他离datanode2的距离最近,数据A有3个碎片分别是碎片1,2,3(这是原数据),然后我根据分布式存储分别存储在datanode1,datanode2和datanode3里,然后由于Hdfs默认会备份3份.所以以下是各datanode里面存在的数据存储情况.

datanode1 碎片1 备份碎片2 备份碎片3
datanode2 碎片2 备份碎片1 备份碎片3
datanode3 碎片3 备份碎片1 备份碎片2

        客户端向Namenode发起读请求的时候,Namenode会给客户端返回datanode2的地址,因为在距离上datanode2离客户端是最近(机架感知会考虑节点之间的物理距离,并选择最近的节点来提供数据,这样可以减少数据传输的延迟和网络开销)的,且datanode2里面包含了一份完整的数据A(因为备份碎片1+碎片2+备份碎片3=一份完整的数据A),所以客户端只要读取datanode2就可以了.

2.2 为什么分布式系统中需要机架感知 

        1.降低数据访问的延迟:通过考虑节点之间的物理距离,机架感知可以将数据放置在距离客户端更近的节点上,从而减少数据访问的延迟.这对于需要快速读取数据的应用场景非常重要,例如实时数据分析,在线服务等.

        2.提高网络带宽的利用率:将数据放置在相同机架内的节点上可以利用机架内高速网络通信,从而提高数据传输的速率和带宽利用率.这样可以减少跨机架的数据传输,降低网络拥塞和瓶颈.

        3.增强系统的容错和可靠性: 通过将数据的副本机制在不同的机架上,机架感知可以防止由于机架级别的故障导致数据不可用.即使某个机架发生故障,系统任然可以从其他机架上的副本获取数据,保证系统的可靠性和容错性.

        4.提高系统的整体性能:通过机架感知,系统可以更提高数据访问的效率,降低延迟,增强系统的容错性,从而使系统更适合处理大规模数据和高并发访问的场景.

2.3 hdfs如何实现机架感知

        Apache Hadoop 3.3.6 – 机架感知官方给出解释Hdfs如何通过调用外部脚本或Java类来获取集群工作线程的机架ID,实现机架感知。

        1.机架ID的格式必须遵循"/myrack/myhost"的格式,其中/是拓扑分隔符,myrack是机架标识符,myhost是单个主机。

        2.Hadoop可以通过Java类或外部脚本来获取机架ID

                2.1.如果使用Java类,需要实现org.apache.hadoop.net.DNSToSwitchMapping 接口,并在配置文件中指定net.topology.node.switch.mapping.impl 参数;

                2.2.如果使用外部脚本,则需要在配置文件中指定net.topology.script.file.name 参数。对于外部脚本,可以通过net.topology.script.number.args参数控制每次调用脚本时传递的IP地址数量,默认为100。将该参数设置为1时,将为每个IP地址分叉一个拓扑脚本,以提高精度和灵活性;(我的理解是:如果是100时候,就是将ip地址作为参数传给总服务器的让总服务器的运行脚本,而1的时候就是将脚本分发给每个服务器运行)

         3.如果未设置相应的参数,则默认机架ID为"/default-rack"。但是,这可能会导致HDFS块复制出现问题,因为默认行为是在同一机架上写入副本,而默认机架ID只有一个。

3.副本放置策略

3.1 什么是副本放置策略

3.1.1唯一机架上的副本策略

        唯一机架上的副本策略是一种简单但非最佳的策略,它将所有副本都放置在同一个机架上。这样做可以防止在整个机架发生故障时丢失数据,并允许在读取数据时利用来自多个机架的带宽。此策略在群集中均匀分布副本,从而可以轻松平衡组件故障的负载。然而,这种策略会增加写入成本,因为写入需要将块传输到多个机架。(我是这么理解的:同一个机架里面有2个节点也就是2台服务器的意思然后如果我要上传一个文件A那么服务器1和服务器2中都会有文件A的备份而且当你要读取文件A时Hdfs可以从这2个节点获取文件的不同块以提高读取熟读和利用宽带)

3.1.2 复制因子为3时的放置策略

当复制因子为 3 时,HDFS 的放置策略是,如果写入器位于数据节点上,则将一个副本放在本地计算机上,否则将一个副本放在与写入器位于同一机架的随机数据节点上,将另一个副本放在不同(远程)机架中的节点上,最后一个副本放在同一远程机架中的不同节点上。

假设现在我有3个机架各有3个节点此时备份会有2种情况:

1.如果写操作发生在机架1的1号节点上,那么根据这个放置策略,在机架1的1号节点上放置一个副本,在机架1的其他节点上随机选择一个节点放置第二个副本,在机架2或机架3的任意一个节点上随机选择一个节点放置第三个副本。

2.如果写操作在机架1上但不发生在任意节点上,首选在机架1上的一个随机数据节点上放置一个副本,第二个副本放置在不同机架(比如机架3)的一个随机节点上(比如机架3节点2),而第三个副本在同一机架(机架3)的另一个节点上,比如节点1或者节点3。

3.1.3复制因子大于3时的放置策略

制因子大于 3,则随机确定第 4 个及后续副本的位置,同时将每个机架的副本数保持在上限以下(基本上是(副本数 - 1)/机架数 + 2)。除此之外,HDFS 还支持 4 种不同的可插拔块放置策略

还是以3个机架各有3个节点来举例子
如果我在机架1的节点1上进行写操作 副本为4 是:
1.将第一个副本放置在机架1的节点1上(本地机架)

2.将第二个副本放置在不同机架上的随机节点上,例如机架2的节点2

3.将第三个副本放置在不同机架上的另一个随机节点上,例如机架3的节点3

4.将第四个副本放置在随机机架上的另一个随机节点上,例如机架3的节点1

注意:对于第二个、第三个和第四个副本,它们将放置在不同机架上的随机节点上。这意味着除了第一个副本外,其余的副本将随机选择其他机架和节点,以增加数据的冗余性和可靠性。因此,确实有可能出现第二到第四个副本都位于同一个机架的不同节点上(即2-4副本均保存在机架3的节点3和架3的节点1和架3的节点2),这是由随机选择决定的。

3.2 为什么在分布式存储系统中需要有效的副本放置策略?

        1.数据冗余和容错性: 分布式存储系统通常会在多个节点上存储数据的副本,以增加数据的冗余度,从而提高系统的容错性。有效的副本放置策略可以确保数据的多个副本被合理地分布在不同的节点和机架上,以降低数据丢失的风险。

        2.读取性能优化:良好的副本放置策略可以优化数据的读取性能。通过将数据的副本放置在就近的节点或机架上,可以减少数据读取时的网络传输延迟,提高数据的访问速度。

        3.写入性能优化:有效的副本放置策略也可以优化数据的写入性能。合理地分布数据的副本可以减少写入操作时的网络传输负载,并且可以降低数据写入的延迟。

        4.负载均衡:副本放置策略还可以帮助实现负载均衡。通过将数据的副本均匀地分布在整个存储集群中,可以避免某些节点或机架上的负载过重,从而提高系统的整体性能和稳定性。

3.3 Hdfs副本放置策略的工作原理和实现方式

        Hdfs中常用的副本放置策略是基于机架感知的副本放置策略。这种策略考虑了数据节点所在的机架信息,以确保副本在分布式环境中的合理分布,同时保证了数据的可靠性、读取性能和写入性能。

        1.机架感知:副本放置策略考虑了数据节点所在的机架信息,尽量将副本放置在不同的机架上,以提高系统的容错性和可用性。这样即使某个机架发生故障,数据仍然可通过其他机架的副本访问。

        2.本地化:尽可能将数据的副本放置在同一个机架上的不同节点,以减少数据读取时的网络传输延迟,提高数据的访问速度。特别是对于写入操作,尽量将数据的副本放置在写入节点所在的机架上,以减少网络传输负载和写入延迟。

        3.均衡性:副本放置策略还会考虑整个存储集群的负载均衡情况,尽可能地将数据的副本均匀地分布在不同的节点和机架上,以提高系统的整体性能和稳定性。

4. 机架感知与副本放置策略的关系

        机架感知为副本放置策略提供了重要的信息基础。通过了解集群的物理结构,HDFS可以更好地决定数据副本的放置位置,以提高数据的可用性和性能。

        副本放置策略依赖于机架感知来确定节点的位置和网络距离,从而选择合适的节点进行数据复制。

        机架感知和副本放置策略共同作用于HDFS系统,确保数据的可靠性和性能,并根据集群的状态和负载情况进行动态调整。

4.1 机架感知如何与副本相互作用?

        1.副本放置策略:机架感知是制定副本放置策略的重要考虑因素之一。通过了解集群的物理网络拓扑结构,系统可以确定最佳的副本放置位置,以提高数据的容错性和可用性。

        2.副本数量和位置:机架感知也影响副本的数量和位置。系统可以根据机架的数量和数据的重要性等因素来确定副本的数量,并将这些副本分布在不同的机架上,以增强数据的可靠性和可用性。副本的数量和位置是通过机架感知算法来确定的,该算法考虑了集群的物理拓扑结构和网络距离,以确保数据能够在集群中的不同节点和机架上进行复制和存储。

        3.数据可靠性和性能:机架感知和副本放置策略的相互作用可以提高数据的可靠性和性能。通过在不同的机架上存储副本,系统可以在机架级别实现容错性,从而防止在整个机架发生故障时丢失数据。同时,通过合理放置副本并考虑网络拓扑结构,系统可以优化数据的读取和写入性能,减少网络传输延迟,并提高系统的整体性能。

4.2 解释机架感知如何影响副本的位置和数量?

        根据网络拓扑结构来决定副本的位置是为了实现数据可靠性和网络带宽的最佳利用。这种方法利用了网络拓扑的物理结构和距离信息,以确保数据的高可靠性和最佳性能。

        具体来说,通过了解集群中节点和机架之间的物理连接方式,系统可以决定最佳的副本放置位置。一般而言,系统会将副本放置在不同的机架上,以防止在整个机架发生故障时丢失数据。同时,考虑到网络带宽的利用,系统会尽量将副本放置在距离较近的节点上,以减少数据传输时的网络延迟和拥塞。

        这种基于网络拓扑结构的副本放置策略可以最大限度地利用集群中的资源,提高数据的可靠性和性能。通过合理地利用网络带宽和节点资源,并考虑到机架级别的容错性,系统可以有效地管理数据的存储和复制,从而满足用户对数据可靠性和性能的需求。

你可能感兴趣的:(hdfs,hadoop,大数据)