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已经成功地拷贝到节点上(伪分布式只有一个节 ...
随机推荐
- laravel学习:容器绑定与解析
1.在服务容器中注册类(bind) $this->app->bind('sender','MailSender');//$this->app成为服务容器. 2.从服务容器生成类( ...
- Java A
4.在ORACLE大数据量下的分页解决方法.一般用截取ID方法,还有是三层嵌套方法. 答:一种分页方法 <% int i=1; int numPages=14; String pages = r ...
- 【C语言】控制台窗口图形界面编程(二)窗口信息和填充缓冲区
目录 00. 目录 01. COORD结构体 02. SMALL_RECT结构 03. CONSOLE_SCREEN_BUFFER_INFO结构体 04. GetConsoleScreenBuffer ...
- php与mysql事物处理
PHP与MYSQL事务处理 mysql事物特性 (原子性,一致性,隔离性,持久性) /*MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事 ...
- 基于Redis的三种分布式爬虫策略
前言: 爬虫是偏IO型的任务,分布式爬虫的实现难度比分布式计算和分布式存储简单得多. 个人以为分布式爬虫需要考虑的点主要有以下几个: 爬虫任务的统一调度 爬虫任务的统一去重 存储问题 速度问题 足够“ ...
- mysql解决 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)的报错
一般这个错误是由密码错误引起,解决的办法自然就是重置密码. 假设我们使用的是root账户. 1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下: #vim /etc/my.cnf(注:wi ...
- 还在为百度网盘下载速度太慢烦恼?chrome浏览器插件帮你解决!
百度网盘已然成为分享型网盘中一家独大的“大佬”了.时代就是这样不管你喜不喜欢,上网总会遇到些百度网盘共享的文件需要下载.然而,百度网盘对免费用户的限速已经到了“感人”的地步了,常常十多KB/秒的速度真 ...
- Python之FTP实现
Python之FTP实现 上传下载: import socket import struct import json import subprocess import os class MYTCPSe ...
- 3.2.8 sed 的运作
sed 的工作方式相当直接.命令行上的每个文件会依次打开与读取.如果没有文件,则使用标准输入,文件名“-”(单个破折号)可用于表示标准输入. [many@avention Desk ...
- 易接SDK ios9以上无法弹出充值界面的一种情况
充值需要用到http请求: 打开info.plist, 在app tansport security setting 这个项 , 加入 NSAllowsArbitraryLoads YES