HDFS负载均衡

HDFS负载平衡

HDFS的数据可能并不总是被均匀的置于所有的DataNode中,最常见的原因是向一个已经存在的集群添加一个新的节点。
当放置新的块时(块:一个文件的数据会被存储为一系列的块)。NameNode 在选择DataNode节点存储这些块之前会考虑多方面参数。一些注意事项如下:

策略保证一个块的其中之一个副本在同一个节点(这个节点是块写的节点)
需要将一个块的副本分配到不同的机架上 ,这样可以确保集群丢失整个机架也没有影响
众多副本中的其中之一通常放在文件写入节点的同一个机架上,这样可以减少跨机架的网络I/O
HDFS的数据均匀的分步到一个集群的所有节点中

由于多个相互竞争的考虑,整个datanode数据可能不是均匀放置。HDFS为管理员提供了一个工具,分析整个DataNode的块 位置和平衡数据。

Hadoop HDFS数据负载均衡原理

数据均衡过程的核心是一个数据均衡算法,该数据均衡算法将不断迭代数据均衡逻辑,直至集群内数据均衡为止。该数据均衡算法每次迭代的逻辑如下:
HDFS负载均衡_第1张图片

步骤分析如下:
数据均衡服务(Rebalancing Server)首先要求 NameNode 生成 DataNode 数据分布分析报告,获取每个DataNode磁盘使用情况
Rebalancing Server汇总需要移动的数据分布情况,计算具体数据块迁移路线图。数据块迁移路线图,确保网络内最短路径
开始数据块迁移任务,Proxy Source Data Node复制一块需要移动数据块
将复制的数据块复制到目标DataNode上
删除原始数据块
目标DataNode向Proxy Source Data Node确认该数据块迁移完成
Proxy Source Data Node向Rebalancing Server确认本次数据块迁移完成。然后继续执行这个过程,直至集群达到数据均衡标准

详细的DataNode归类策略
在第2步中,HDFS会把当前的DataNode节点,根据阈值的设定情况划分到Over、Above、Below、Under四个组中。在移动数据块的时候,Over组、Above组中的块向Below组、Under组移动。四个组定义如下:
HDFS负载均衡_第2张图片

Over组:此组中的DataNode的均满足
DataNode_usedSpace_percent > Cluster_usedSpace_percent + threshold
Above组:此组中的DataNode的均满足
Cluster_usedSpace_percent + threshold > DataNode_ usedSpace _percent > Cluster_usedSpace_percent
Below组:此组中的DataNode的均满足
Cluster_usedSpace_percent > DataNode_ usedSpace_percent > Cluster_ usedSpace_percent – threshold
Under组:此组中的DataNode的均满足
Cluster_usedSpace_percent – threshold > DataNode_usedSpace_percent
Hadoop HDFS 数据自动平衡脚本使用方法

在Hadoop中,包含一个start-balancer.sh脚本,通过运行这个工具,启动HDFS数据均衡服务。该工具可以做到热插拔,即无须重启计算机和 Hadoop 服务。$HADOOP_HOME/sbin/目录下的start−balancer.sh脚本就是该任务的启动脚本。启动命令为:$HADOOP_HOME/sbin/start-balancer.sh
查看shell脚本发现其实就是启动了如下这个命令
$HADOOP_HOME/bin/hdfs balancer

more  $HADOOP_HOME/sbin/start-balancer.sh

....省略....
"$HADOOP_PREFIX"/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script "$bin"/hdfs start balancer $@

参数如下

Usage: hdfs balancer
        [-policy ]      the balancing policy: datanode or blockpool
        [-threshold ]        Percentage of disk capacity
        [-exclude [-f file> | <comma-separated list of hosts>]]  Excludes the specified datanodes.
        [-include [-f file> | <comma-separated list of hosts>]]  Includes only the specified datanodes.
        [-idleiterations ]      Number of consecutive idle iterations (-1 for Infinite) before exit.

常用参数是-threshold 指定阀值

注: 在实际操作中发现 默认的负载均衡复制block的速度很慢 在集群压力较小时可考虑调整如下配置提高速度
hdfs-site.xml

<property>
    <name>dfs.balance.bandwidthPerSecname>
    1048576
     Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. 
    property>

默认1048576 是 1M/s

你可能感兴趣的:(hadoop)