阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop HDFS负载均衡

146次阅读
没有评论

共计 3132 个字符,预计需要花费 8 分钟才能阅读完成。

Hadoop HDFS

Hadoop 分布式文件系统(Hadoop Distributed File System),简称 HDFS,被设计成适合运行在通用硬件上的分布式文件系统。它和现有的分布式文件系统有很多的共同点。HDFS 是一个高容错性的文件系统,提供高吞吐量的数据访问,非常适合大规模数据集上的应用。

HDFS 副本摆放策略

第一副本:放置在上传文件的 DataNode 上;如果是集群外提交,则随机挑选一台磁盘不太慢、CPU 不太忙的节点上;
第二副本:放置在于第一个副本不同的机架的节点上;
第三副本:与第二个副本相同机架的不同节点上;
如果还有更多的副本:随机放在节点中;
Hadoop HDFS 负载均衡

需要注意的是:

  • HDFS 中存储的文件的副本数由上传文件时设置的副本数决定。无论以后怎么更改系统副本系数,这个文件的副本数都不会改变;
  • 在上传文件时优先使用启动命令中指定的副本数,如果启动命令中没有指定则使用 hdfs-site.xml 中 dfs.replication 设置的默认值;

HDFS 负载均衡

Hadoop 的 HDFS 集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,例如:当集群内新增、删除节点,或者某个节点机器内硬盘存储达到饱和值。当数据不平衡时,Map 任务可能会分配到没有存储数据的机器,这将导致网络带宽的消耗,也无法很好的进行本地计算。
当 HDFS 负载不均衡时,需要对 HDFS 进行数据的负载均衡调整,即对各节点机器上数据的存储分布进行调整。从而,让数据均匀的分布在各个 DataNode 上,均衡 IO 性能,防止热点的发生。进行数据的负载均衡调整,必须要满足如下原则:

  • 数据平衡不能导致数据块减少,数据块备份丢失
  • 管理员可以中止数据平衡进程
  • 每次移动的数据量以及占用的网络资源,必须是可控的
  • 数据均衡过程,不能影响 namenode 的正常工作

Hadoop HDFS 数据负载均衡原理

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

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 确认本次数据块迁移完成。然后继续执行这个过程,直至集群达到数据均衡标准

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

Hadoop HDFS 负载均衡

  • 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 H ome/binstartbalancer.sh  HadoopHome/bin 目录下的 start−balancer.sh 脚本就是该任务的启动脚本。启动命令为:‘ Hadoop_home/bin/start-balancer.sh –threshold`

影响 Balancer 的几个参数:

  • -threshold
    • 默认设置:10,参数取值范围:0-100
    • 参数含义:判断集群是否平衡的阈值。理论上,该参数设置的越小,整个集群就越平衡
  • dfs.balance.bandwidthPerSec
    • 默认设置:1048576(1M/S)
    • 参数含义:Balancer 运行时允许占用的带宽

示例如下:

# 启动数据均衡,默认阈值为 10%
$Hadoop_home/bin/start-balancer.sh

# 启动数据均衡,阈值 5%
bin/start-balancer.sh –threshold 5

# 停止数据均衡
$Hadoop_home/bin/stop-balancer.sh

在 hdfs-site.xml 文件中可以设置数据均衡占用的网络带宽限制

<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>

Hadoop 如何修改 HDFS 文件存储块大小  http://www.linuxidc.com/Linux/2013-09/90100.htm

将本地文件拷到 HDFS 中 http://www.linuxidc.com/Linux/2013-05/83866.htm

从 HDFS 下载文件到本地 http://www.linuxidc.com/Linux/2012-11/74214.htm

将本地文件上传至 HDFS http://www.linuxidc.com/Linux/2012-11/74213.htm

HDFS 基本文件常用命令 http://www.linuxidc.com/Linux/2013-09/89658.htm

Hadoop 中 HDFS 和 MapReduce 节点基本简介 http://www.linuxidc.com/Linux/2013-09/89653.htm

《Hadoop 实战》中文版 + 英文文字版 + 源码【PDF】http://www.linuxidc.com/Linux/2012-10/71901.htm

Hadoop: The Definitive Guide【PDF 版】http://www.linuxidc.com/Linux/2012-01/51182.htm

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/130624.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计3132字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中