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已经成功地拷贝到节点上(伪分布式只有一个节 ...
随机推荐
- CAD参数绘制圆(com接口)
CAD绘制图像的过程中,画圆的情况是非常常见的,用户可以设置圆的圆心位置及半径属性. 主要用到函数说明: _DMxDrawX::DrawCircle 绘制一个圆.详细说明如下: 参数 说明 DOUBL ...
- tomcat 去掉项目名后,还可以用项目名
在server.xml添加以下代码: <Context path="/" docBase="../webapps/jeeplus/" reloadable ...
- Getting start with dbus in systemd (02) - How to create a private dbus-daemon
Getting start with dbus in systemd (02) 创建一个私有的dbus-daemon (session) 环境 这里我们会有两个app: app1(client),ap ...
- UIWebView中javascript与Objective-C交互、获取摄像头
UIWebView是iOS开发中常用的一个视图控件,多数情况下,它被用来显示HTML格式的内容. 支持的文档格式 除了HTML以外,UIWebView还支持iWork, Office等文档格式: Ex ...
- HYSBZ - 2763 飞行路线(分层图最短路线)
题目: Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价 ...
- [JOYOI] 1052 没有上司的舞会
/ Joy OI / 题目列表 / 没有上司的舞会 题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目描述 Ural大学有N个职员,编号为 ...
- Ztree勾选节点后取消勾选其父子节点
前言: Ztree官方给的API可以设置勾选一个节点的同时勾选子节点或者父节点,也可以设置不影响父子节点,即将chkboxType设置为{"Y":"",&quo ...
- 关于ie8下disabled属性:字体颜色问题
在ie8下,input/textarea输入框如果使用disabled属性,字体的颜色会变灰,这时我们可以使用另一种方法实现它. 不使用disabled,用readonly代替: input[read ...
- Laravel核心解读 -- 扩展用户认证系统
扩展用户认证系统 上一节我们介绍了Laravel Auth系统实现的一些细节知道了Laravel是如何应用看守器和用户提供器来进行用户认证的,但是针对我们自己开发的项目或多或少地我们都会需要在自带的看 ...
- Python之协程函数
Python之协程函数 什么是协程函数:如果一个函数内部yield的使用方法是表达式形式的话,如x=yield,那么该函数成为协程函数. def eater(name): print('%s star ...