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菜单项,就会自动开始平衡了。
如果之前有运行,需要先中止掉,如果起不来,需要kill 掉

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

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

节点内平衡: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**在生产上面,由于有业务,不能停止,只能调节,数据平衡的阈值。**

HDFS数据平衡:节点间平衡与节点内平衡相关推荐

  1. 电气:6机30节点经济调度(考虑负荷平衡、线路容量、斜坡约束)代码实现

    个人电气博文目录: 学好电气全靠它,个人电气博文目录(持续更新中-) 提示:专栏解锁后,可以查看该专栏所有文章. 文章目录 一.数据 二.转移因子法求解线路容量约束 三.粒子群 求解 6机30节点经济 ...

  2. 电气:6机30节点经济调度(考虑负荷平衡和线路容量,不考虑斜坡)代码实现

    个人电气博文目录: 学好电气全靠它,个人电气博文目录(持续更新中-) 提示:专栏解锁后,可以查看该专栏所有文章. 文章目录 一.数据 二.转移因子法求解线路容量约束 三.粒子群 求解 6机30节点经济 ...

  3. hdfs数据节点分发什么协议_分布式文件系统HDFS解析

    Hadoop 主要由HDFS和MapReduce 引擎两部分组成.最底部是HDFS,它存储Hadoop 集群中所有存储节点上的文件.HDFS 的上一层是MapReduce 引擎,该引擎由JobTrac ...

  4. Apache Hadoop HDFS数据节点Apache Mesos框架

    介绍 该项目允许在Mesos上运行HDFS. 您应该熟悉HDFS和Mesos基础知识: http://mesos.apache.org/documentation/latest/ https://ha ...

  5. ros 坐标系间位姿变换节点pose2pose,线程处理数据python示例

    ros 坐标系间位姿变换节点pose2pose,线程处理数据python示例 #!/usr/bin/env python # coding=utf-8 #coding:utf-8import rosp ...

  6. 树中数据间关系整理~节点关系及用途解析及常用术语整理

    下文中如果没有详尽说明,则树指二叉树 1.二叉树上度为0的节点总比度为2的节点多一个! 据此关系,可以通过较少的二叉树条件判断二叉树构成 2.普通树中节点数=树中所有节点总度数+1 3.第i层节点数最 ...

  7. 如何在NEO共识节点间分配任务

    作者:Alexey Vanin 任何计算机系统都有监控操作,可能会发送心跳信息.校验和查询及哈希请求等.这些操作在本文中都被统称为任务.在中心化系统中,通常会有一个受认证的节点或节点群组来完成任务.而 ...

  8. 集群节点间的延迟问题

    集群节点间的延迟问题 mongoDB 一个弱点,就是最终一致性,这也是所有NoSQL 的一个问题. 在CAP 理论中,数据库在 (C)onsistency.(A)vailability和(P)arti ...

  9. ZooKeeper实战(一):ZooKeeper原理,详细安装步骤,基本命令,节点间通信原理

    回顾Redis 用redis实现分布式锁比较复杂,使用zookeeper会比较简单. 一.ZooKeeper介绍 官网 https://zookeeper.apache.org/ 概览文档 https ...

最新文章

  1. Linq查询语法(2)
  2. 转载一篇NAT实验,备忘
  3. (四)新建Maven项目
  4. 通过java api操作hdfs(kerberos认证)
  5. SAP Fiori 应用里图标(Icon)的渲染原理和使用技巧
  6. linux 安装mongodb 64,在CentOS 6.x 64bit上安装MongoDB 3.2社区版
  7. 前端学习(2456):文章列表
  8. pgsql thinkphp5_thinkphp 连接postgresql
  9. c语言文件读写_学生信息管理系统(C语言\单向链表\文件读写)
  10. 了解 64 位 Office
  11. 模型ks_风控建模 模型指标篇
  12. 小辣椒p60手机怎么样_专坑手机小白的两大品牌,起售价3599,谁交了“智商税”...
  13. 7 vsphere 分配许可_外企公司员工Office 365权限是否已分配
  14. Barcode模块管理条码扫描识别
  15. 全面质量管理 TQM、六西格玛、CMMI、ISO9000 关系
  16. 个人设计web前端大作业——HTML+CSS华为官网首页
  17. 有什么软件可以提升视频画质,将模糊视频修复清晰?
  18. [ERROR] [FATAL] InnoDB: Over 95 percent of the buffer pool is occupied by lock heaps or the adaptive
  19. 【十】比例尺添加以及调整
  20. 揭开LiteOS的神秘面纱

热门文章

  1. 页面全部按钮变成disabled=true_手机也能制作大片!只需轻松几步就能把照片变成视频。...
  2. Halcon缺陷检测——机器学习1
  3. Halcon Blob分析(二值化图像分割)
  4. .net面向对象学习笔记(二)
  5. 7.15 HTMl + CSS 笔记整理(一)
  6. 【转】你用什么手机,你就是什么人品!!
  7. 时序分析基本概念介绍——时钟sdc
  8. linux m530显卡,M530显卡和MX150哪个好(AMD Radeon M530)
  9. ISE使用中RAM IP核配置及ram测试(两种测试)
  10. Verilog实现的多个按键消抖(具体模块可用)