借鉴:https://blog.csdn.net/mnasd/article/details/80369603?utm_source=blogxgwz2

参考文档:

1.快速入门

当前存储集群的DN的空间占用率很不均衡,最大的使用率接近100%,最小的使用率不到35%。
为了平衡空间的占用率,我们在CDH上开启了“重新平衡”。
调用的脚本实际如下:
hdfs/hdfs.sh ["balancer","-threshold","10.0","-policy","DataNode”]
查看当前的进度条:
Successfully moved blk_1255414776_181709174 with size=134217728 from 172.16.16.66:50010:DISK to 172.16.16.39:50010:DISK through 172.16.16.219:50010
重新平衡并没有将空间占用率最高的DN优先执行。

2.命令行优化办法

查看hdfs balancer的命令如下:
[root@R720ip39 ~]# hdfs balancer -help
Usage: java Balancer
    [-policy <policy>]    the balancing policy: datanode or blockpool
    [-threshold <threshold>]    Percentage of disk capacity
    [-exclude [-f <hosts-file> | comma-sperated list of hosts]]    Excludes the specified datanodes.
    [-include [-f <hosts-file> | comma-sperated list of hosts]]    Includes only the specified datanodes.
为了更高效率的执行balancer操作,建议如下:
-threshold 30  设置越大,越快结束,并且优先解决DN占用率高的
参数含义:判断集群是否平衡的目标参数,每一个 datanode 存储使用率和集群总存储使用率的差值都应该小于这个阀值 ,理论上,该参数设置的越小,整个集群就越平衡,但是在线上环境中,hadoop集群在进行balance时,还在并发的进行数据的写入和删除,所以有可能无法到达设定的平衡参数值。
-include       包含如下的DN列表
dfs.balance.bandwidthPerSec  300MB(我们计算集群的设置)
参数含义:设置balance工具在运行中所能占用的带宽,设置的过大可能会造成mapred运行缓慢。


执行命令如下:
hdfs balancer -policy datanode -threshold 30 -include -f /tmp/hdfs-blancer.txt

3.CDH中优化balancer实例

在CDH中,balancer是通过如下实例实现的。

几个优化项:


优化一:Balancer阈值越高,需要平衡的量越少,DN占用率不够均衡;阈值越低,需要平衡的量越大, DN占有率越均衡;


优化二:增大Balancer的Java堆大小


优化三:高级配置:hdfs-site.xml 高级配置代码段(安全阀)

#在DataNode和balancer实例都需要配置
<property>
  <name>dfs.datanode.balance.max.concurrent.moves</name>
  <value>50</value>
</property>

#在balancer实例配置
<property>
  <name>dfs.balancer.moverThreads</name>
  <value>5000</value>
</property>
<property>
  <name>dfs.balancer.dispatcherThreads</name>
  <value>5000</value>
</property>
<property>
  <name>dfs.balancer.max-size-to-move</name>
  <value>53687091200</value>
</property>

均衡block,执行start-balancer.sh

这个会非常耗时,但启动后不中断datanode服务执行,会占用带宽和资源。可调整balance执行性能:

1)如果不balance,那么cluster会把新的数据都存放在新的node上,这样会降低mapred的工作效率
2)设置平衡阈值,默认是10G[dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold=10737418240]。该属性表示当各datanode的空闲空间差异达到10G时,就认为不平衡,将触发datanode之间的balance,将空闲空间少的datanode的block向空闲空间多的datanode迁移,直到差异处于10G范围内。

值越低各节点越平衡,但消耗时间也更长。例如:start-balancer.sh -threshold 5

3)设置balance的带宽,默认只有1M/s [dfs.datanode.balance.bandwidthPerSec=1048576]

(转)hadoop balancer(重新平衡)的更多相关文章

  1. 优化Hadoop Balancer运行速度

    (如果运行hbase的话建议为16384),指定用于在DataNode间传输block数据的最大线程数,老版本的对应参数为dfs.datanode.max.xcievers 2.修改dfs.datan ...

  2. hadoop balancer

    一.balancer是当hdfs集群中一些datanodes的存储要写满了或者有空白的新节点加入集群时,用于均衡hdfs集群磁盘使用量的一个工具.这个工具作为一个应用部署在集群中,可以由集群管理员在一 ...

  3. Hadoop hadoop balancer配置

    hadoop版本:2.9.2 1.带宽的设置参数: dfs.datanode.balance.bandwidthPerSec   默认值 10m 2.datanode之间数据块的传输线程大小:dfs. ...

  4. Hadoop Balancer源代码解读

    前言 近期在做一些Hadoop运维的相关工作,发现了一个有趣的问题,我们公司的Hadoop集群磁盘占比数值參差不齐,高的接近80%.低的接近40%.并没有充分利用好上面的资源,可是balance的操作 ...

  5. hadoop balancer 二

    1.每次迭代一个datanode会移动不超过如下两者中较小的一个的数据量 1)10G 2)能力阈值 dfs.datanode.balance.bandwidthPerSec 每次迭代时间不会超过20分 ...

  6. HADOOP命令介绍

    一.用户命令1.archive命令 (1).什么是Hadoop archives?Hadoop archives是特殊的档案格式.一个Hadoop archive对应一个文件系统目录. Hadoop ...

  7. Hadoop 2.0命令手册

    1.       FS Shell 1.1     简介 调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式. 所有的的FS shell命令使用URI ...

  8. 大数据测试之hadoop命令大全

    1.列出所有Hadoop Shell支持的命令 $ bin/hadoop fs -help2.显示关于某个命令的详细信息 $ bin/hadoop fs -help command-name3.用户可 ...

  9. hadoop shell 详解

    概述  所有的hadoop命令均由bin/hadoop脚本引发.不指定参数运行hadoop脚本会打印所有命令的描述.  用法: hadoop [--config confdir] [COMMAND] ...

随机推荐

  1. Python之(matplotlib、numpy、pandas)数据分析

    一.Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形. 它主要用来回事图形,用来展现一些数据,更加直观的展示,让你第一眼就只要数 ...

  2. DevExtreme学习笔记(一) DataGrid中js分析

    1.overviewjs采用 $(function() { $("#gridContainer").dxDataGrid({ dataSource: { store: { type ...

  3. 拦截器中获取不到controller注解问题

    刚刚在测试接口的时候发现一个奇怪的问题:通过拦截器获取 controller 类注解,有些能获取到,有些又不能获取到,见鬼了. [环境]: 1. springboot :2.2.0.RELEASE [ ...

  4. 用D3js的区域生成器实现简单波浪图

    最近做控件遇到含有波浪图的图表,一开始用Echarts虽然很快完成了,但Echarts的波浪图与其他图表的响应式不同步,于是学习了D3js,D3js写起来确实复杂一些,但能够实现的效果也更丰富,做的时 ...

  5. mysql中常用的数据类型

    MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语 ...

  6. GitLab初识以及代码迁移

    目录 一.理论概述 1.什么是gitlib 2.GitLab服务构成 3.Git对比SVN 二.部署 1.简单操作GitLab 三.项目实践:SVN代码迁移至GitLab 环境 1.Linux下部署S ...

  7. Android笔记(二十三) Android中的ProgressBar(进度条)

    圆形进度条和水平进度条 进度条也是UI界面一种非常实用的组件,通常用于向用户显示某个耗时操作完成的百分比,进度条可以动态的显示进度,避免长时间的执行某个耗时操作时,让用户感觉程序失去了相应,从而更好的 ...

  8. HTML基础之HTML常用标签

    下面小编为大家整理一些HTML的常用标签 a.布局标签 div标签定义文档中的分区或节(division/section),可以把文档分割为独立的.不同的部分,主要用于布局. aside标签的内容可用 ...

  9. python字典添加元素和删除元素

    1. 添加字典元素 方法一:直接添加,给定键值对 #pycharm aa = {'人才':60,'英语':'english','adress':'here'} print(aa) # {'人才': 6 ...

  10. linux下的缓存机制buffer、cache、swap - 运维总结 ["Cannot allocate memory"问题]

    一.缓存机制介绍 在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果 ...