您的位置:

HDFS中block默认保存几个备份

一、HDFS中block备份的概念和作用

副本(Replication)是Hadoop HDFS中的一个非常重要的特性,作为分布式文件系统的一种实现方式, HDFS的数据是被切分成一个个固定大小的block,而这些block默认情况下会被分别保存在不同的DataNode上, 并且会有若干备份数来保证数据的安全性,防止因为Node失效而引发的数据丢失。 一般而言,HDFS为每个block副本数建议设为3个,即默认情况下,每个block会被保存三个副本。

为了更好的理解副本的作用,在HDFS架构中可以分为三种角色:Client、NameNode和DataNode, 可以通过下面伪代码中的示例了解副本的实现方式。

    Client ----> NameNode     ----> DataNode
    write 10 blocks ------> choose 3 DN for each block ------> receive block written ok 
    Client ----> NameNode ------> choose 3 DN for each block ------> read 10 blocks ------> return block data to client

当客户端向HDFS写入数据时,数据会被分割成若干个block,然后分别将每个block的副本写入不同的DataNode中。 当客户端读取数据时,NameNode会查询HDFS元数据信息,然后返回包含block副本位置信息的响应, 然后客户端可以通过与DataNode交互,获取数据块的副本,以此实现数据读取的目的。

二、3个备份数的优劣分析

那么,为什么在HDFS中,block默认保存三个备份呢?其实,这是一个数字的折中考虑。 当副本数过多时,HDFS存储的空间和网络带宽的消耗就会剧增,而副本数过少可能会面临DataNode失效导致数据丢失的风险, 所以副本数为3是为了在数据可靠性和性能资源方面做一个平衡,也是经过很多实践总结出来的一个较为理想的取值。

具体来说,对于3个备份的优劣分析可以从以下角度入手:

1. 数据可靠性

当HDFS中的某一台机器失效时,NameNode会查询block副本信息并将该副本从DataNode上删除,然后将它从其他的副本恢复过来, 以此保持数据的可靠性。如果HDFS中只有一个副本的话,那么如果该副本所在的机器挂掉,数据就会丢失。 如果副本过多,数据的可靠性就会变得更高,但是这样会牺牲存储空间和网络带宽,而3个副本的情况能够在存储空间和带宽消耗上做到一定的平衡。

2. 数据可用性

当HDFS中的某一台机器失效时,它所存储的数据块会由其他机器提供服务以保证数据可用性。由于副本数比较少,这个过程可能会比较耗费时间, 这样就会导致一定程度上的停滞。当副本数目增加到比较多时,如果一台机器挂掉,剩余机器将被迅速调度以继续服务, 当副本数目过多时,即使几个机器同时挂掉,整个集群依然有足够的数据副本来提供服务,这样可以防止停滞。 而3个副本的情况再次在可用性和可靠性之间做到了平衡。

3. 数据存储容量

随着副本数目的增加,占用的磁盘和存储空间也会随之增加,所以副本数目不能太多,否则就会消耗太多的资源。 当然,若副本数目过低,数据即不能保证可靠性。三个副本的情况比较适宜。

三、更改HDFS中block备份数的方法

如果默认的3个备份数满足不了业务需求,用户也可以自行更改HDFS中block的备份数目,这里提供两种方法:

1. 通过配置文件更改备份数目

Hadoop将配置文件分为 core-site.xml 和 hdfs-site.xml 配置文件,其中 hdfs-site.xml 文件用于配置 HDFS 相关参数。 在这个文件中,有一个参数 dfs.replication 确定了 block 的副本数。可以通过修改这个参数重新设置HDFS中block的备份数目。 其配置信息如下所示:

    <property>
      <name>dfs.replication</name>
      <value>3</value>
    </property>

2. 通过命令更改备份数目

另外一种方法是通过hadoop fs命令修改备份数目。下面的命令将会修改目录 /path/to/file 的文件副本数为5:

    hadoop fs -setrep -w 5 /path/to/file

结论

在HDFS中,block默认的备份数目为3。这个数目的取值是经过很多实践总结出来的一个较为理想的取值,可以在数据可靠性和性能资源方面做到一定的平衡。 同时,如果需要修改备份数目,用户可以通过配置文件或者命令行等多种方式来更改,以满足不同业务需求。