HDFS执行负载均衡时的threads quota is exceeded;浅谈HDFS的balancer

【告警现象】本人在使用hadoop2.7.3 执行hdfs balancer的时候,出现了以下告警:

java.io.IOException: Got error, status message Not able to copy block 1073778252 to /172.13.6.52:30810 because threads quota is exceeded

 

【告警原因】

1,在小于hadoop2.6的版本,有一个bug,就是:过早退出balancer的迭代过程。所以从hadoop2.6.0开始就修复了该问题。

2Data nodes会限制负载均衡器的线程数目,以防止耗光hdfs集群的所有资源,这就是产生这个告警的原因(此线程数默认值为5)。在hadoop 2.5及之前的版本,这个线程数目可通过修改dfs.datanode.balance.max.concurrent.moves来配置。

 

【解决办法】

1hadoop2.5版本以及之前的版本

# 调大dfs.datanode.balance.max.concurrent.moves的值,例如改成60

# 修改dfs.datanode.balance.bandwidthPerSec的值,例如改成52428800,即50M,如果带宽允许,可调高到100Mb

# 修改dfs.datanode.max.transfer.threads的值,例如4096 (如果运行hbase的话建议改成16384)

# HDFSweb UI实时查看DataNode的负载状况,可以查看overview页面的Summary里的Data Nodes usages% (Min/Median/Max/stdDev)然后通过调整Balancer上的上述配置值来控制整体速度即可。

 

2hadoop2.6版本及之后的版本,这里附上我的定时脚本,等到集群不忙的时候再执行(注:需要反复执行多次此脚本,以便尽可能地均衡负载、缩小各个data node之间的存储空间使用率差异)

【github代码地址】https://github.com/tonykidkid/MapReduceBackupCodes/tree/master/operateHDFS


-threshold10

此参数表示允许单个节点的存储使用率与集群中各节点平均存储使用率之间有10%的偏差。

“节点的存储使用率”意思是每个数据节点的存储使用率,它表示一个数据节点上已用空间占可用空间的百分比,所谓可用空间指的是分配给HDFS可使用的空间,并非是节点所在机器的全部硬盘空间。比如一个数据节点总共有存储空间2T,分配给HDFS的空间为1T,已经用了600G,那么“节点的存储使用率”就是600/1024=58.6%

理论上,threshold参数设置的值越小,整个集群就越平衡。但是在线上环境中,hadoop集群在进行balance时很可能有同时进行的数据写入和删除,

所以有可能无法到达设定的平衡参数值。

-Ddfs.datanode.balance.bandwidthPerSec

这个参数是设置balancer进程可用的网络带宽。如果不设置这个参数值那么这个balancer会很慢,因为默认不允许balancer占用很大的网络带宽。

 

【查看运行日志】

# 日志显示,Bytes Already Moved是累计计算

# 此次rebalancer运行在name node, 耗时14分钟

[hadoop2@nn1 tmp]$ less balancer-10pct-out.log

Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved
Oct 10, 2017 7:37:24 PM           0             85.39 MB           344.95 GB              40 GB
Oct 10, 2017 7:37:55 PM           1            213.39 MB           344.87 GB              40 GB
Oct 10, 2017 7:38:04 PM           2            213.39 MB           344.74 GB              40 GB
Oct 10, 2017 7:38:50 PM           3            425.78 MB           344.74 GB              40 GB
Oct 10, 2017 7:39:21 PM           4            553.78 MB           344.54 GB              40 GB
Oct 10, 2017 7:39:30 PM           5            553.78 MB           344.41 GB              40 GB
Oct 10, 2017 7:39:39 PM           6            553.78 MB           344.41 GB              40 GB
Oct 10, 2017 7:39:48 PM           7            553.78 MB           344.41 GB              40 GB
Oct 10, 2017 7:39:58 PM           8            553.78 MB           344.41 GB              40 GB
Oct 10, 2017 7:40:50 PM           9            809.78 MB           344.41 GB              40 GB
Oct 10, 2017 7:40:59 PM          10            809.78 MB           344.16 GB              40 GB
Oct 10, 2017 7:41:52 PM          11              1.04 GB           344.16 GB              40 GB
Oct 10, 2017 7:42:01 PM          12              1.04 GB           343.91 GB              40 GB
Oct 10, 2017 7:42:11 PM          13              1.04 GB           343.91 GB              40 GB
Oct 10, 2017 7:42:37 PM          14              1.14 GB           343.91 GB              40 GB
Oct 10, 2017 7:42:46 PM          15              1.14 GB           343.81 GB              40 GB
Oct 10, 2017 7:42:55 PM          16              1.14 GB           343.81 GB              40 GB
Oct 10, 2017 7:43:05 PM          17              1.14 GB           343.81 GB              40 GB
Oct 10, 2017 7:43:36 PM          18              1.26 GB           343.81 GB              40 GB
Oct 10, 2017 7:43:45 PM          19              1.26 GB           343.68 GB              40 GB
Oct 10, 2017 7:43:54 PM          20              1.26 GB           343.68 GB              40 GB
Oct 10, 2017 7:44:04 PM          21              1.26 GB           343.68 GB              40 GB
Oct 10, 2017 7:44:13 PM          22              1.26 GB           343.68 GB              40 GB
Oct 10, 2017 7:45:05 PM          23              1.64 GB           343.68 GB              40 GB
Oct 10, 2017 7:45:36 PM          24              1.76 GB           343.40 GB              40 GB
Oct 10, 2017 7:45:46 PM          25              1.76 GB           343.40 GB              40 GB
Oct 10, 2017 7:46:17 PM          26              1.89 GB           343.40 GB              40 GB
Oct 10, 2017 7:46:26 PM          27              1.89 GB           343.27 GB              40 GB
Oct 10, 2017 7:46:35 PM          28              1.89 GB           343.27 GB              40 GB
Oct 10, 2017 7:46:44 PM          29              1.89 GB           343.27 GB              40 GB
Oct 10, 2017 7:47:37 PM          30              2.14 GB           343.27 GB              40 GB
Oct 10, 2017 7:48:08 PM          31              2.26 GB           343.02 GB              40 GB
Oct 10, 2017 7:48:17 PM          32              2.26 GB           342.90 GB              40 GB
Oct 10, 2017 7:48:47 PM          33              2.39 GB           342.90 GB              40 GB
Oct 10, 2017 7:48:57 PM          34              2.39 GB           342.77 GB              40 GB
Oct 10, 2017 7:49:06 PM          35              2.39 GB           342.77 GB              40 GB
Oct 10, 2017 7:49:15 PM          36              2.39 GB           342.77 GB              40 GB
Oct 10, 2017 7:49:24 PM          37              2.39 GB           342.77 GB              40 GB
Oct 10, 2017 7:49:58 PM          38              2.52 GB           342.77 GB              40 GB
Oct 10, 2017 7:50:07 PM          39              2.52 GB           342.63 GB              40 GB
Oct 10, 2017 7:50:16 PM          40              2.52 GB           342.63 GB              40 GB
Oct 10, 2017 7:50:25 PM          41              2.52 GB           342.95 GB              40 GB
Oct 10, 2017 7:50:35 PM          42              2.52 GB           342.95 GB              40 GB
No block has been moved for 5 iterations. Exiting...
Oct 10, 2017 7:50:44 PM          43              2.52 GB           343.30 GB              40 GB

Oct 10, 2017 7:50:44 PM  Balancing took 13.721266666666667 minutes


# 下面这个rebalancer运行在data node, 耗时只需5分钟,这是因为需要迁移的数据块比刚才少了

Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved

Oct 10, 2017 10:20:43 PM          0            270.75 MB           345.71 GB              40 GB
Oct 10, 2017 10:20:53 PM          1            270.75 MB           345.60 GB              40 GB
Oct 10, 2017 10:21:02 PM          2            270.75 MB           345.60 GB              40 GB
Oct 10, 2017 10:21:11 PM          3            270.75 MB           345.63 GB              40 GB
Oct 10, 2017 10:21:22 PM          4            284.25 MB           345.63 GB              40 GB
Oct 10, 2017 10:21:31 PM          5            284.25 MB           345.70 GB              40 GB
Oct 10, 2017 10:21:40 PM          6            284.25 MB           345.70 GB              40 GB
Oct 10, 2017 10:21:50 PM          7            284.25 MB           345.70 GB              40 GB
Oct 10, 2017 10:21:59 PM          8            284.25 MB           345.70 GB              40 GB
Oct 10, 2017 10:22:34 PM          9            439.11 MB           345.70 GB              40 GB
Oct 10, 2017 10:22:43 PM         10            439.11 MB           345.54 GB              40 GB
Oct 10, 2017 10:22:53 PM         11            439.11 MB           345.54 GB              40 GB
Oct 10, 2017 10:23:02 PM         12            439.11 MB           345.54 GB              40 GB
Oct 10, 2017 10:23:11 PM         13            439.11 MB           345.54 GB              40 GB
Oct 10, 2017 10:23:59 PM         14            665.73 MB           345.54 GB              40 GB
Oct 10, 2017 10:24:08 PM         15            665.73 MB           345.40 GB              40 GB
Oct 10, 2017 10:24:17 PM         16            665.73 MB           345.40 GB              40 GB
Oct 10, 2017 10:24:26 PM         17            665.73 MB           345.40 GB              40 GB
Oct 10, 2017 10:24:36 PM         18            665.73 MB           345.40 GB              40 GB
No block has been moved for 5 iterations. Exiting...
Oct 10, 2017 10:24:45 PM         19            665.73 MB           345.40 GB              40 GB
Oct 10, 2017 10:24:45 PM Balancing took 4.950083333333334 minutes

【建议】

1,执行balancer的建议:尽量不要在Name Node上执行balancer,而是找一台比较空闲的机器去运行(可以从上面的日志中看到运行耗时的对比了)。

2,上传数据到hdfs集群的建议:若从某个dataNode上传数据到集群,会导致上传的数据优先写满该dataNode的磁盘,不利于运行分布式作业;但是从非dataNode上传,比如从nameNode上传数据,也不好,因为会增加namenode负担,同时造成namenode上面的文件杂乱。所以建议搞一个客户端节点,把hadoop的安装目录复制一份到此节点,不在此节点启动任何有关Hadoop的进程,只作为上传数据到hdfs集群的用途。


【相关延伸】

 Hadoop Balancer的执行步骤(HDFS数据负载均衡原理),如图示


 0、为避免给Name Node带来过大负担,整个re-balance过程由Rebalancing Server而不是name node来控制,

也就是说Rebalance程序作为一个独立的进程与name node分开执行

1Rebalance ServerName Node获取每个Data Node上的磁盘使用情况

2Rebalance Server计算哪些节点需要将数据移动,哪些节点可接收移动的数据,Rebalance ServerName Node中获取需要移动的数据分布情况

3Rebalance Server计算出可将哪个节点的文件块移动到另一个节点中去,再执行移动,完成后删除旧的文件块信息

4~6、需要移动文件块的节点把数据移动到目的节点,再删除本节点上的block数据

7Rebalance Server获取到本次数据移动的执行结果,并继续执行这个过程,直到没有数据可以移动或者HDFS集群达到平衡的标准(threshold的值)

<think>嗯,用户遇到了HDFS手动负载均衡出现的“cannot findconfiguration directory”错误,需要解决这个问题。首先,我得回忆一下HDFS负载均衡的相关知识。手动触发负载均衡通常是通过执行balancer命令,而出现配置目录找不到的问题,可能跟环境变量或者路径设置有关。根据错误信息,系统找不到配置目录,这可能是因为Hadoop的配置文件路径没有正确设置。Hadoop的配置文件通常存放在etc/hadoop目录下,这个目录的位置可能在HADOOP_CONF_DIR环境变量中指定。如果这个变量没有被正确设置,balancer命令可能无法找到所需的配置文件,比如hdfs-site.xml或者core-site.xml。接下来,我需要考虑用户可能的操作步骤。用户可能是直接执行hdfsbalancer命令,而没有指定配置目录,或者环境变量未正确配置。这候需要检查HADOOP_CONF_DIR是否存在,并且指向正确的路径。例如,在Hadoop安装目录下,配置文件的路径可能是$HADOOP_HOME/etc/hadoop,所以需要确认HADOOP_CONF_DIR是否指向这里。 另外,用户可能在命令行中忽略了--config选项,这个选项可以手动指定配置目录。例如,使用hdfs --config /path/to/config balancer命令来明确指定配置路径。这也是一个常见的解决方法,特别是当环境变量没有正确设置的候。 还需要检查配置文件是否存在,比如用户可能误删了配置文件,或者安装不完整。这候需要确认指定的配置目录下是否有必要的文件,如hdfs-site.xml、core-site.xml等。如果这些文件缺失,可能需要重新安装或者从备份中恢复。权限问题也是一个可能性,如果Hadoop进程没有读取配置目录的权限,也会导致找不到配置目录的错误。需要检查目录的权限是否正确,通常应该是755,并且所属用户和组与Hadoop运行的用户一致。此外,引用中提到的关于HBase配置错误的例子,虽然和HDFS无关,但思路类似,即配置错误或依赖缺失会导致服务启动失败。所以用户需要确保所有相关的配置都正确无误,并且必要的依赖(如LZO库)已正确安装,尽管这个问题可能不直接涉及第三方库,但配置正确性至关重要。 总结下来,可能的解决步骤包括检查环境变量、使用--config选项指定路径、验证配置文件存在性、检查权限,以及确认Hadoop安装完整性。需要逐步引导用户排查这些方面,确保每个环节都正确配置。同,生成的相关问题可以帮助用户进一步理解负载均衡的其他常见问题和优化方法,提升他们的运维能力。</think>### HDFS手动负载均衡报错'cannot find configuration directory'解决方案 #### 1. 检查环境变量配置 HDFS Balancer需要正确识别Hadoop配置目录(默认路径为$HADOOP_HOME/etc/hadoop)。请执行以下命令验证环境变量: ```bash echo $HADOOP_CONF_DIR ``` 若输出为空或路径错误,请通过以下方式临指定: ```bash export HADOOP_CONF_DIR=/path/to/your/hadoop/etc/hadoop ``` 建议将配置写入~/.bashrc或/etc/profile永久生效[^1]。 #### 2. 显式指定配置路径 在执行Balancer命令强制指定配置目录: ```bash hdfs --config /path/to/your/hadoop/etc/hadoop balancer ``` 此方式优先级高于环境变量设置[^2]。 #### 3. 验证配置文件存在性 检查目标目录是否包含以下核心配置文件: - hdfs-site.xml - core-site.xml - slaves(或workers文件) 若文件缺失,需重新部署Hadoop配置文件或检查安装完整性。 #### 4. 检查目录权限 确保配置目录有正确的访问权限: ```bash ls -ld /path/to/hadoop/etc/hadoop ``` 建议权限设置为755: ```bash chmod 755 /path/to/hadoop/etc/hadoop ``` #### 5. 验证安装完整性 通过Hadoop内置命令检查环境: ```bash hadoop checknative hadoop version ``` 若出现"WARN util.NativeCodeLoader"警告,说明存在依赖库配置问题。 #### 6. 使用完整路径执行 避免相对路径引起的路径解析错误: ```bash /path/to/hadoop/bin/hdfs --config /path/to/hadoop/etc/hadoop balancer ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值