HDFS负载均衡

7 篇文章 0 订阅
4 篇文章 0 订阅

1. 前言

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

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

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

2. Hadoop HDFS数据负载均衡原理

数据均衡过程的核心是一个数据均衡算法,该数据均衡算法将不断迭代数据均衡逻辑,直至集群内数据均衡为止。该数据均衡算法每次迭代的逻辑如下:
在这里插入图片描述
步骤分析如下:

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

在第2步中,HDFS会把当前的DataNode节点,根据阈值的设定情况划分到Over、Above、Below、Under四个组中。在移动数据块的时候,Over组、Above组中的块向Below组、Under组移动。四个组定义如下:
在这里插入图片描述

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

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

常用参数是-threshold 指定阀值

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

# 默认1048576 是 1M/s

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

转自:https://blog.csdn.net/xinganshenguang/article/details/55810047
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值