distcp导致个别datanode节点数据存储严重不均衡分析
hadoop2.4生产集群已经执行一段时间了。因为大量的hadoop1.0上面的应用不断迁移过来。刚開始事hdfs这边还没有出现多少问题。随着时间的推移,近期发现个别的datanode节点上面的磁盘空间剩余严重不足。既集群数据存储严重不均衡,非常多DN节点分明还有非常多存储空间,而个别DN节点存储空间则出现严重不足的情况。
后来经过分析,发现这些空间严重不足的节点上面,都执行了distcp作业的map任务,distcp是一个纯粹拷贝数据的job。一结合hdfs数据副本分配策略一分析,最终找到了问题所在:原来是因为这些空间不足的节点因为执行了distcp作业的map任务,当数据拷贝过来之后,这些数据的第一个副本会选择当前节点作为存储节点存储,随着时间越长,这些执行distcp作业map任务的datanode节点存储的数据就越来越多,自然就出现了存储空间不均衡问题。
该问题眼下还没有好的解决的方法,临时仅仅能不定期重新启动distcopy作业。让map任务能随机的在集群其它节点启动起来。
下面是hdfs存储数据块副本时的分配策略:
HDFS块分配策略
块分配策略流程图
注:上图提到的远程机架与本地机架是相对于找到的第一个副本的目标节点来说。
一个clienta机器发起请求分配块请求,NN接收到请求后。运行例如以下块分配流程:
1) 假设a不是一个DataNode,则在集群范围内随机选择一个节点作为目标节点,否则运行以下的2,3步骤;
2) 推断a机器是否符合存储数据块的目标节点,假设符合,第一个块副本分配完成。
3)假设a机器不符合作为目标节点。则在于与a机器同机架范围内寻找。假设找到目标节点,第一个块副本分配完成;
4)假设在同一个机架内未找到符合要求的目标节点。则在集群内随机查找,找到则第一个块副本分配完成,否则未找到符合条件的块。块分配失败;
5)假设已经成功分配第一个块副本,则与a不同机架的远程机架内寻找目标节点。假设符合,第二个块副本分配完成;
6)假设在远程机架内未找到符合要求的目标节点,在与a同样的本机架寻找,假设找到则第二个块副本分配完成;否则未找到符合条件的块,第二份块分配失败;
7)假设前2个块副本分配成功。则准备分配第三个副本的目标节点,首先会推断前两份是否在同一个机架,假设是,则在远程机架寻找目标节点,找到则第三份副本分配完成。假设前两份在不同机架。则在与a同样机架内寻找,假设找到则第三份副本分配完成。否则在集群范围寻找,找到则第三份分配完成。否则第三份分配失败
8)假设块副本大于三分,则在集群范围内随机寻找节点
在上面的块分配流程图中,重复出现满足条件的节点推断,要推断一个节点是否满足条件,须要经过例如以下流程,流程图例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1aG9uZzExMjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" style="border:none; max-width:100%">
当在一个范围内找到一个节点后。还须要经过如上的条件推断,才干确定一个DataNode进程能否够作为目标节点:
1) 假设没有节点机器被选择,则该节点能够作为备选节点,否则须要推断下一个DataNode
是否符合要求;(这样就防止同一个块副本存储到同一台机器)
2) 然后推断节点是否退役,存储空间是否足够,负载是否大于2倍平均负载。本机架选择的节点是否超过限制,假设均满足,则该datanode符合要求,否则须要推断下一个DataNode是否符合要求;
參考:
http://blog.csdn.net/liuhong1123/article/details/12949487
distcp导致个别datanode节点数据存储严重不均衡分析的更多相关文章
- 网易大数据之数据存储:HDFS
一.HDFS基础架构 1.HDFS特点:水平扩展.高容错性.廉价硬件.开源生态系统 2.Hadoop生态圈 1).分布式存储系统(HDFS),2).资源管理框架(YARN),3).批处理框架(MapR ...
- RAC节点两边存储名字不一致导致的故障及相关延伸
起因:一个客户的实际故障,该故障非常典型,其他客户类似的环境也非常多,所以很值得梳理并记录下来. 环境:Oracle 11.2.0.4 RAC(2 nodes)+ RHEL 6.6 共享存储:EMC ...
- 为datanode配置多个数据存储地
datanode配置多个数据存储地址,涉及到以下两个配置项 dfs.name.dir Determines where on the local filesystem the DFS name nod ...
- cloudrea manager 调整datanode数据存储目录
由于datanode所需磁盘空间较大,所以工作中可能会涉及到给datanode增加磁盘目录或者更改数据目录 CM停止该datanode节点 CM页面增加目录或者修改目录 如果是修改目录的话 需要将服务 ...
- zookeeper原理解析-数据存储
Zookeeper内存结构 Zookeeper是怎么存储数据的,什么机制保证集群中数据是一致性,在网络异常,当机以及停电等异常情况下恢复数据的,我们知道数据库给我们提供了这些功能,其实zookeepe ...
- Zookeeper系列六:服务器角色、序列化与通信协议、数据存储、zookeeper总结
一.服务器角色 1. Leader 1)事务请求的唯一调度者和处理者.保证事务处理的顺序性 事务请求:导致数据一致性的请求(数据发生改变).如删除一个节点.创建一个节点.设置节点数据,设置节点权限就是 ...
- Hadoop DataNode 节点的动态添加和动态删除
动态添加 DataNode 节点 hadoop环境是必须的 需要加入新的 DataNode 节点,前提是已经配置好 SSH 无密登录:直接复制已有DataNode中.ssh目录中的authorized ...
- 大数据存储:MongoDB实战指南——常见问题解答
锁粒度与并发性能怎么样? 数据库的读写并发性能与锁的粒度息息相关,不管是读操作还是写操作开始运行时,都会请求相应的锁资源,如果请求不到,操作就会被阻塞.读操作请求的是读锁,能够与其它读操作共享,但是当 ...
- Hadoop第三天---分布式文件系统HDFS(大数据存储实战)
1.开机启动Hadoop,输入命令: 检查相关进程的启动情况: 2.对Hadoop集群做一个测试: 可以看到新建的test1.txt和test2.txt已经成功地拷贝到节点上(伪分布式只有一个节 ...
随机推荐
- redisd的非持久化配置
如何关闭redis持久化?我的需求是只把redis当作缓存来用,所以持久化到硬盘对我的需求来说没有意义. 修改redis配置文件,redis.conf 第115行左右. 1.注释掉原来的持久化规则 # ...
- vue中的组件传值
组件关系可以分为父子组件通信.兄弟组件通信.跨级组件通信. 父传子 - props 子传父 - $emit 跨级可以用bus 父子双向 v-model 父链(this.$parent this.$ch ...
- 原生javascript实现call、apply和bind的方法
var context = {id: 12}; function fun (name, age) { console.log(this.id, name, age) } bind bind() 方法会 ...
- PHP实现定时任务的几种方式
关于定时任务,之前以前认识了一种最常用的:crontab定时任务.通过linux的定时任务去实现.今天又认识了一下php实现定时方式的其它方式,总结一下. 一 服务器定时任务 服务器定时任务,其实就是 ...
- Python之协程函数
Python之协程函数 什么是协程函数:如果一个函数内部yield的使用方法是表达式形式的话,如x=yield,那么该函数成为协程函数. def eater(name): print('%s star ...
- 每周一赛(E题,广搜求方案)
Description In this problem, you are given an integer number s. You can transform any integer number ...
- vs2003 刷新项目失败。无法从服务器中检索文件夹信息
环境: 操作系统:windows server 2003 开发工具:Visual stuadio 2003 FrameWork: 1.1 打开web项目的时候报错 提示 项目刷新失败,无法从服务器 ...
- github some rank
github some rank http://githubrank.com/
- Python接口测试之报告(十五)
在本文章中,主要使用jenkins和编写的自动化测试代码,来生成漂亮的测试报告,关于什么是CI这些 我就不详细的介绍了,这里我们主要是实战为主. 首先搭建java的环境,这个这里不做介绍.搭建好jav ...
- [luoguP1037] 产生数(floyd + 高精度)
传送门 先用 floyd 求出每一个数可以变成那些数. 然后利用乘法原理求解,需要高精度. 代码 #include <cstdio> #include <cstring> #i ...