官方详解HDFS Balancer工具主要调优参数
作者:阿里云 发布时间:2023-07-24 04:43:47
引言
HDFS Balancer工具可以用来分析块的分布情况,并且可以重新分配DataNode中的数据。本文通过为您介绍如何使用HDFS Balancer工具以及Balancer的主要调优参数。
使用HDFS Balancer
方式一:使用HDFS Balancer命令
HDFS Balancer命令语句如下。
hdfs balancer
[-threshold <threshold>]
[-policy <policy>]
[-exclude [-f <hosts-file> | <comma-separated list of hosts>]]
[-include [-f <hosts-file> | <comma-separated list of hosts>]]
[-source [-f <hosts-file> | <comma-separated list of hosts>]]
[-blockpools <comma-separated list of blockpool ids>]
[-idleiterations <idleiterations>]
Balancer主要参数如下表。
参数 | 描述 |
---|---|
threshold | 磁盘容量的百分数。 默认值为10%,表示上下浮动10%。 当集群总使用率较高时,需要调小Threshold,避免阈值过高。 当集群新增节点较多时,您可以适当增加Threshold,使数据从高使用率节点移向低使用率节点。 |
policy | 平衡策略。支持以下策略:
|
exclude | Balancer排除特定的DataNode。 |
include | Balancer仅对特定的DataNode进行平衡操作。 |
source | 仅选择特定的DataNode作为源节点。 |
blockpools | Balancer仅在指定的blockpools中运行。 |
idleiterations | 最多允许的空闲循环次数。覆盖默认的5次。 |
方式二:使用start-balancer.sh工具
start-balancer.sh实际上是调用hdfs daemon start balancer命令。使用方式如下:
登录待配置集群的任意节点,详情请参见登录集群。
可选:执行以下命令,修改Balancer的最大带宽。
hdfs dfsadmin -setBalancerBandwidth <bandwidth in bytes per second>
说明 <bandwidth in bytes per second>
为设置的最大带宽。例如,如果需要设置最大带宽为20 MB/s,对应值为20971520,则完整代码示例为hdfs dfsadmin -setBalancerBandwidth 20971520
。如果集群负载较高,建议设置为209715200(200 MB/s);如果集群空闲,建议设置为1073741824(1 GB/s)。
执行以下命令,切换到hdfs用户并执行Balancer参数。
DataLake集群
su hdfs
/opt/apps/HDFS/hdfs-current/sbin/start-balancer.sh -threshold 5
Hadoop集群
su hdfs
/usr/lib/hadoop-current/sbin/start-balancer.sh -threshold 5
执行以下命令,进入HDFS安装目录。
DataLake集群
cd /var/log/emr/hadoop/
Hadoop集群
cd /var/log/hadoop-hdfs
执行以下命令,查看Balancer运行情况。
当提示信息包含Successfully
字样时,表示执行成功。
DataLake集群
tailf hadoop-hdfs-balancer-master-1-1.c-xxx.log
Hadoop集群
tailf hadoop-hdfs-balancer-emr-header-1.cluster-xxx.log
说明 命令中的hadoop-hdfs-balancer-master-1-1.c-xxx.log
和hadoop-hdfs-balancer-emr-header-xx.cluster-xxx.log
为上一步骤中获取到的日志名称。
Balancer调优参数
执行Balancer会占用一定的系统资源,建议在业务空闲期执行。默认情况下,不需要对HDFS Balancer参数进行额外调整。当需要对Balancer参数进行额外调整时,您可以在E-MapReduce控制台的HDFS服务页面,选择配置 > hdfs-site.xml,调整以下两类配置。
客户端配置
参数 | 描述 |
---|---|
dfs.balancer.dispatcherThreads | Balancer在移动Block之前,每次迭代时查询出一个Block列表,分发给Mover线程使用。 说明 dispatcherThreads是该分发线程的个数,默认为200。 |
dfs.balancer.rpc.per.sec | 默认值为20,即每秒发送的RPC数量为20。 因为分发线程调用大量getBlocks的RPC查询,所以为了避免NameNode由于分发线程压力过大,需要控制分发线程RPC的发送速度。 例如,您可以在负载高的集群调整参数值,减小10或者5,对整体移动进度不会产生特别大的影响。 |
dfs.balancer.getBlocks.size | Balancer会在移动Block前,每次迭代时查询出一个Block列表,给Mover线程使用,默认Block列表中Block的大小为2 GB。因为getBlocks过程会对RPC进行加锁,所以您可以根据NameNode压力进行调整。 |
dfs.balancer.moverThreads | 默认值为1000。 Balancer处理移动Block的线程数,每个Block移动时会使用一个线程。 |
DataNode配置
参数 | 描述 |
---|---|
dfs.datanode.balance.bandwidthPerSec | 指定DataNode用于Balancer的带宽,通常推荐设置为100 MB/s,您也可以通过dfsadmin -setBalancerBandwidth 参数进行适当调整,无需重启DataNode。 例如,在负载低时,增加Balancer的带宽。在负载高时,减少Balancer的带宽。 |
dfs.datanode.balance.max.concurrent.moves | 默认值为5。 指定DataNode节点并发移动的最大个数。通常考虑和磁盘数匹配,推荐在DataNode端设置为4 * 磁盘数作为上限,可以使用Balancer的值进行调节。 例如:一个DataNode有28块盘,在Balancer端设置为28,DataNode端设置为28 * 4。具体使用时根据集群负载适当调整。在负载较低时,增加concurrent数;在负载较高时,减少concurrent数。 |
常见问题
Q:为什么Balancer的threshold设置为10(%),但是平衡以后看到差值为20%左右?
A:threshold的含义是控制每个DataNode的使用率不高于或者不低于集群平均的使用率,所以使用率最多和最少的DataNode在平衡后可能差值为20%。要减少这种差距,可以尝试把差值调节到5(%)。
来源:https://help.aliyun.com/document_detail/449686.html


猜你喜欢
- Activity是Android组件中最基本也是最为常见用的四大组件之一,在 android开发中 ,运用极为广泛,作为初学者需要熟练掌握,
- 可以不用经过 Html.fromHtml 因为我的数据里面含有一点 html的标签。所以经过html转换了。 实现方法: TextView
- 前言今天有一个需求,把之前的判断逻辑进行修改,之前我是用大于(>)小于(<)进行对比的,但是今天让改成大于等于(>=)和小
- 前文由于经常用到串口调试, 尽管有现成的软件, 因为前端时间涉及一个二次开发, 就因为一个RtsEnable设置, 折腾半天, 网上各种版本
- 面试官:请问StringBuffer和StringBuilder有什么区别?这是一个老生常谈的话题,笔者前几年每次面试都会被问到,作为基础面
- 最近在搭建springmvc的框架,遇到的这样的问题:在地址栏访问登陆界面访问不了,http://localhost/XXXX/WEB-IN
- Java包装类基本类型大小包装器类型boolean/Booleanchar16bitBooleanbyte8bitByteshort/16b
- 概述常用的弹窗有菜单,或者Dialog,但更加人性化和可自定义的还是PopupWindow如果只是展示列表数据或者弹窗列表选择,直接使用Li
- 调整数组顺序使奇数位于偶数之前1. 题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的
- 什么是slf4jSLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务
- 1、不必要的自动装箱。自动装箱是将基础数据类型转换为相应的复杂类型,在HashMap的追加删除调查中充满了自动装箱问题,因此尽量避免Hash
- 前言Stream是一个来自数据源的元素队列并支持聚合操作,其中具有以下特性:Stream只负责计算,不存储任何元素,元素是特定类型的对象,形
- ButterKnife的最新版本是8.4.0。首先,需要导入ButterKnife的jar包。在AndroidStudio中,File-&g
- Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为fi
- 参考了一下网上别人写的,再使用的时候是放在新开的线程中来播放音乐的,后来发现每次进入Activity后就会重复开始一个音乐播放的声音。为了避
- 本文主要讨论C#开发使用百度语音合成API在线将文本内容合成语音,保存为 MP3 文件,本文最后会提供本安全源代码以及运行软件包,
- 应用程序初始化时需要批量的向sqlite中插入大量数据,单独的使用for+Insert方法导致应用响应缓慢,因为 sqlite插入数据的时候
- 今天小编来手写一个自定义圆形进度条:先看效果:首先我们在attrs属性文件中增加几个自定义属性<?xml version="
- 一、简介WorkManager 用于处理 Android 后台任务。我们只需要设置好任务内容、何时执行,剩下的工作就可以完全交给系统处理。它
- 一个围绕统计分析功能的系统,在最后制作统计分析时需要一个批量点击的功能,用以批量制作echarts图形后生成图片并保存图形和图片。方便后续导