HDFS数据平衡:节点间平衡与节点内平衡

前面某篇文章已经说过,HDFS容易发生数据不平衡的问题。这其中包括各个DataNode之间存储的数据量差异,以及一个DataNode内部各磁盘之间存储的数据量差异。HDFS专门提供了对应的机制来解决。

节点间平衡:Balancer

CDH在HDFS中提供了Balancer角色,使我们可以免于用命令行执行start-balancer.sh来手动配置。Cloudera Manager里与Balancer有关的配置项有以下这些。

  • Balancing Threshold:Balancer平衡的阈值。平衡过程结束后,所有节点的磁盘占用率与集群的平均占用率之差必须小于threshold(按百分比计)。默认值是10,我们设成了5。
  • Rebalancing Policy:计算平衡度的策略,有DataNode和BlockPool两种。前者是按节点级别来算,后者是按块池级别来算。后者只有对HDFS Federation才有效,所以我们选前者。
  • Included/Excluded Hosts:分别用来指定参与平衡的节点和被排除的节点。这样可以先人为判断数据分布情况,然后只让我们认为需要平衡的节点来操作。
  • dfs.balancer.moverThreads/dispatcherThreads:分别表示移动数据的线程池大小,和调度数据移动方案的线程池大小,默认值1000和200。
  • dfs.datanode.balance.max.concurrent.moves:表示能够同时移动的块(英文说法叫in-flight)数量,默认值50。
  • dfs.balancer.max-size-to-move:表示在Balancer的一次迭代(下面会提到)中,一个DataNode的最大数据交换量,默认值10G。
  • 另外,还有一个出现在DataNode参数但又与平衡相关的:dfs.datanode.balance.bandwidthPerSec,即每个节点可以用来做平衡的最大带宽,默认1MB/s。这个值在多数情况下是偏小的,可以适当增大,如10甚至20。千万注意不能挤占太多带宽,以保证正常业务的运行。

CDH Balancer的用法很简单,只需要设定好上述参数,再点击Actions→Rebalance菜单项,就会自动开始平衡了。


那么Balancer内部是如何执行的呢?Balancer类的源码位于org.apache.hadoop.hdfs.server.balancer包中,限于篇幅,就不贴出来了,只简单叙述一下。
Balancer是迭代执行的,也就是说每次平衡都只移动一定量的数据,然后检查集群是否符合平衡的标准。迭代的大致步骤是:

  1. 根据平衡度策略,计算出集群使用量均值,并与平衡阈值作比较,将节点按使用量从高到低划分为4类。
  2. 根据划分的4类节点,确认出需要平衡的源节点与目标节点对,并计算每对节点之间的数据交换量。
  3. 构造Dispatcher(这是与Balancer在同一个包中的类),初始化mover和dispatcher线程池。mover用来移动块,dispatcher用来调度节点对。
  4. 对每个节点上的块,确认它是否可以成为一个好的候选块。如果可以,那么它就会被移动到目标节点上去。

从宏观上看,就是这张图。


节点间数据平衡的流程

节点内平衡:DiskBalancer

如果想要解决节点内多块磁盘数据不均衡的现象,就要借助DiskBalancer。在CDH 5.8.2+版本中,可以通过在CM中配置进行开启。如果使用的Hadoop版本是3.0+,就直接在hdfs-site.xml中加入相关项。
在HDFS配置项中找到“DataNode Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml”,中文为“hdfs-site.xml的HDFS服务⾼级配置代码段(安全阀)”,加入:

<property>
  <name>dfs.disk.balancer.enabled</name>
  <value>true</value>
</property>
<property>
  <name>dfs.disk.balancer.max.disk.throughputInMBperSec</name>
  <value>50</value>
</property>
<property>
  <name>dfs.disk.balancer.plan.threshold.percent</name>
  <value>2</value>
</property>
<property>
  <name>dfs.disk.balancer.block.tolerance.percent</name>
  <value>5</value>
</property>
  • dfs.disk.balancer.max.disk.throughputInMBperSec:指定磁盘间平衡时占用的最大磁盘带宽,默认值10MB/s。在不影响读写性能的情况下可以适当调大。
  • dfs.disk.balancer.plan.threshold.percent:各盘之间数据平衡的阈值。DiskBalancer中采用一种叫volume data density(卷数据密度)的度量来确定占用率的偏差值,该值越大,表明磁盘间的数据越不均衡。平衡过程结束后,每个盘的卷数据密度与平均密度之差必须小于threshold(按百分比计)。默认值是10,我们设成了5。
  • dfs.disk.balancer.block.tolerance.percent:在每次移动块的过程中,移动块的数量与理想平衡状态之间的偏差容忍值(按百分比计)。一般也设成5。

DiskBalancer的运行流程与Balancer类似,不过对象由节点变成了磁盘。它分为Discover、Plan与Execute三个阶段,分别是计算磁盘不平衡度、生成平衡计划与执行平衡计划。关于它的设计细节,可以参考JIRA中的HDFS-1312:https://issues.apache.org/jira/browse/HDFS-1312
配置完成后,重启DataNode,然后SSH到该节点上,手动执行即可:

  • 生成平衡计划(hadoop1为主机名)
    hdfs diskbalancer -plan hadoop1
  • 执行平衡计划
    hdfs diskbalancer -execute /system/diskbalancer/hadoop1.plan.json
  • 查看执行状态
    hdfs diskbalancer -query hadoop1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • 翻译: http://hadoop.apache.org/docs/stable/hadoop-project-d...
    金刚_30bf阅读 490评论 0 0
  • 上一篇:082-BigData-10HDFS上传与下载机制 一、DataNode工作机制 1、NameNode &...
    AncientMing阅读 697评论 0 1
  • 原文 介绍 Hadoop分布式文件系统( HDFS )是一种分布式文件系统,设计用于在商品硬件上运行。它与现有...
    公子小水阅读 1,119评论 0 0
  • 这本书如果有佳能950D我应该能理解的更为透彻,关于设置参数我更多的了解概念,也对美女姿势如何摆稍微留心,最后毕业...
    你好乔纳森阅读 419评论 0 5
  • 我们所了解的“平行世界”是科幻片中与穿越有关的情节,它类似于一个与我们所生存的世界相平行的空间,在那里也许也有着一...
    狸三郎阅读 731评论 0 1