hadoop balance均衡datanode存储不起作用问题分析
前段时间因为hadoop集群各datanode空间使用率很不均衡,需要重新balance(主要是有后加入集群的2台机器磁盘空间比较大引起的),在执行如下语句:
bin/start-balancer.sh -threshold 10
后,日志输出如下:
Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved
Mar , :: AM KB 614.5 GB GB
Mar , :: AM KB 614.5 GB GB
Mar , :: AM KB 614.5 GB GB
Mar , :: AM KB 614.5 GB GB
Mar , :: AM 891.85 KB 614.5 GB GB
Mar , :: AM 891.85 KB 614.5 GB GB
Mar , :: AM 891.85 KB 614.5 GB GB
Mar , :: AM 891.85 KB 614.49 GB GB
Mar , :: AM 891.85 KB 614.49 GB GB
No block has been moved for iterations. Exiting...
Balancing took 10.023 seconds
很明显,balancer已经计算出要移动的数据量,但是就是没有移动,这是为什么呢?
查看hadoop-mysql-balancer-master.log并没有发现Error或者Warning,那只能去看源码了。
原来hadoop balancer在进行转移block的时候是会判断的,具体要求见下面的代码:
/* Decide if it is OK to move the given block from source to target
* A block is a good candidate if
* 1. the block is not in the process of being moved/has not been moved;
* 2. the block does not have a replica on the target;
* 3. doing the move does not reduce the number of racks that the block has
*/ private boolean isGoodBlockCandidate(Source source,
BalancerDatanode target, BalancerBlock block) {
// check if the block is moved or not
if (movedBlocks.contains(block)) {
return false;
}
if (block.isLocatedOnDatanode(target)) {
return false;
} boolean goodBlock = false;
if (cluster.isOnSameRack(source.getDatanode(), target.getDatanode())) {
// good if source and target are on the same rack
goodBlock = true;
} else {
boolean notOnSameRack = true;
synchronized (block) {
for (BalancerDatanode loc : block.locations) {
if (cluster.isOnSameRack(loc.datanode, target.datanode)) {
notOnSameRack = false;
break;
}
}
}
if (notOnSameRack) {
// good if target is target is not on the same rack as any replica
goodBlock = true;
} else {
// good if source is on the same rack as on of the replicas
for (BalancerDatanode loc : block.locations) {
if (loc != source &&
cluster.isOnSameRack(loc.datanode, source.datanode)) {
goodBlock = true;
break;
}
}
}
}
return goodBlock;
}
对照上面的3个要求,逐一排查未移动block的原因:
(1)需要移动的block在本次balance的过程中没有被移动过------这条满足;
(2)需要移动的block在目标机器上不存在------这条待验证;
(3)需要移动的block,在移动后不改变每个机架上block的数量(注意,这是的数量不是总数量,是去重以后的block数量,例如,block的备份数是2,其实是算一个唯一的block)------由于集群在配置的时候没有添加机架感知脚本,所以默认情况下,都在1个机架上,这条满足。
那现在就去集群上验证第二条,果不其然,发现很多block在后面加入的2台机器上都已经存在,这还移动个屁啊,那边都已经存在了,所以balancer移动进程就退出了。
解决方法:
1.使用如下命令
bin/hadoop fs -setRep -R / 2
将集群中的block备份数同一设置成你在hdfs-site.xml中
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
配置的备份数,然后重启hadoop集群,等hadoop完成校验blcok以后再balance即可解决问题。
hadoop balance均衡datanode存储不起作用问题分析的更多相关文章
- 在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析
在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析 低成本的Blob存储是一个强大的.通用的Hadoop兼容Azure存储解决方式无缝集成HDInsight.通过Hadoop分布式 ...
- hadoop balance工具平衡集群dfs存储及遇到异常Got error, status message Not able to receive block 1073959989 from /192.168.1.37:3004 because threads quota is exceeded
hadoop集群某个节点dfs存储比其他节点存储高时,一般会使用hadoop提供的balance(start-balancer.sh -threshold 10 )工具来移动高存储节点上的块到低存储节 ...
- hadoop源代码解读namenode高可靠:HA;web方式查看namenode下信息;dfs/data决定datanode存储位置
点击browserFilesystem,和命令查看结果一样 当我们查看hadoop源代码时,我们看到hdfs下的hdfs-default.xml文件信息 我们查找${hadoop.tmp.dir}这是 ...
- Hadoop Balance
一.hadoop balance工具的用法: 启动balance: bin/start-balancer.sh -threshold 5 停止balance: bin/stop-balancer.sh ...
- Hadoop添加节点datanode(生产环境)
Hadoop添加节点datanode 博客分类: hadoop HadoopSSHJDKXML工作 1.部署hadoop 和普通的datanode一样.安装jdk,ssh 2.修改host ...
- 升级版:深入浅出Hadoop实战开发(云存储、MapReduce、HBase实战微博、Hive应用、Storm应用)
Hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式文件系 ...
- Hadoop问题:DataNode进程不见了
DataNode进程不见了 问题描述 最近配置Hadoop的时候出现了这么一个现象,启动之后,使用jps命令之后是这样的: 看不到DataNode进程,但是能够正常的工作,是不是很神奇啊? 在一番 ...
- FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to controller/192.168.1.183:9000. Exiting. java.io.IOExcep
2018-01-09 09:47:38,297 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed ...
- org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in receiveBlock for block
Hbase依赖的datanode日志中如果出现如下报错信息:DataXceiverjava.io.EOFException: INFO org.apache.hadoop.hdfs.server.da ...
随机推荐
- Sharepoint2013商务智能学习笔记之Excel Service展示Sql Server数据Demo(五)
第一步,打开Excel新建空白工作簿 第二步,使用Excel连接sql 数据库 第三步,画图 第四步 添加筛选器 最后效果如下: 第五步,将Excel上传到sharepoint任意文档库,并直接点击 ...
- DOMContentLoaded时间触发与js,css,img的关联
DOMContentLoaded触发原理: 1.规范总是那么的晦涩,但至少有一点是可以明确了的,就是在JS(不包括动态插入的JS)执行完之后,才会触发DOMContentLoaded事件. 2.DOM ...
- JS中的参数搜寻机制
1: var color="blue"; function changecolor(color){ if(color=="blue"){ color=" ...
- linux---安装ftp并配置用户部分权限
一.启动vsftpd服务1. 启动VSFTP服务器A:cenos下运行:yum install vsftpdB. 登录Linux主机后,运行命令:”service vsftpd start”C. 要让 ...
- 51nod1521(set.upper_bound())
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1521 题意:中文题诶- 思路: 我们先看一下set容器的三个 ...
- 大融合——LCT维护子树信息
题目 [题目描述] 小强要在 $N$ 个孤立的星球上建立起一套通信系统.这套通信系统就是连接 $N$ 个点的一个树.这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是它所在的当前能够联通的树 ...
- any cpu ×86 ×64
On a 32-bit machine: Any CPU: runs as a 32-bit process, can load Any CPU and x86 assemblies, will ge ...
- Python小世界:项目虚拟环境配置的N种方法
前言 和其他大多数现代编程语言一样,Python对包和 模块的下载.存储以及管理有其自己的一套方法.但是当我们同时开发多个项目工程的时候,不同的项目会将第三方的包存放在相同的路径下.这就意味着,如果有 ...
- [HNOI2011]数学作业 矩阵快速幂 BZOJ 2326
题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 NNN 和 MMM ,要求计算Concatenate(1..N) Concatenate (1 .. N) ...
- springboot2.0+Neo4j+d3.js构建知识图谱
Welcome to the Neo4j wiki! 初衷这是一个知识图谱构建工具,最开始是对产品和领导为了做ppt临时要求配合做图谱展示的不厌其烦,做着做着就抽出一个目前看着还算通用的小工具 技术栈 ...