上篇文章中说到我在Hadoop的50070的web页面增加了每个node的xceiver count,这个问题也是通过这个指标发现的。
由于我的客户端从始至终都是一个Filesystem实例,因此在put完文件时java实例并不会销毁,客户端在运行较长时间后,发现每个Node的xceiver count值很高,当初以为是节点读写量比较大,但通过stack分析来看,却是写的线程比较多,难道又是当初的老毛病
http://dongyajun.iteye.com/blog/628028 ?
除非数据无法flush到datanode,会造成客户端无法关闭流外(DFSClient#flushInternal方法中的长久wait),其他情况都会关闭流并关闭socket,昨天在阅读代码时,偶然想到了,对于一个超过block大小的文件,客户端会申请多个block,并会向datanode建立多次连接,然而都是用的同一个Socket引用(DFSOutputStream#s:Socket),在给这个socket重赋值时,并未关闭这个socket,长期以来,客户端会积累大量对datanode的连接,当你销毁客户端实例时,你会看到datanode的Xceiver Count也随之下降了
发现这个问题之后的第一件事是阅读最新的hadoop源码,发现仍然未有close socket的迹象,在确定确实存在这个问题后,在createBlockOutputStream方法中,当socket重新赋值时,关闭socket.
IOUtils.closeSocket(s);
s = socketFactory.createSocket();
该问题也向@luoli523 询问过,他们也曾在hbase中遇到这样的问题,如果大家也遇到此问题,不防试试,不过… Hadoop的开发者们难道会出这样的低级错误?
分享到:
相关推荐
org.apache.hadoop.security.AccessControlException: Permission denied: user=xudsa, access=WRITE, inode="/uploaddemo1.txt":hadoop:supergroup:-rw-r--r--
Hadoop-0.21.0分布式集群配置.doc
Hadoop datanode启动失败:Hadoop安装目录权限的问题
Hadoop客户端Java代码
NULL 博文链接:https://zqhxuyuan.iteye.com/blog/1879292
hadoop 0.21.0 linux下的安装包
hadoop 源码解析-DataNode
1. Hadoop 2.0 2. 部署在2个Ubuntu上 3. 2个namenode 2个datanode
hadoop-0.21.0-raid.jar
简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性(fault-tolerent)的特点,并且设计...
hadoop-3.1.0.zip
Hadoop用微软运行库,用来解决winutils.exe报错缺少dll文件的问题。包含程序MSVBCRT_AIO_2018.07.31_X86+X64
hadoop-hdfs-test-0.21.0.jar
hadoop-0.21.0-mrunit.jar
hadoop-0.21.0-streaming.jar
Hadoop3.0 + JDK1.8.1+Hadoop-win运行包2.6.0--3.0.0
因业务需要搭建一个新hadoop集群,并将老的hadoop集群中的数据迁移至新的hadoop集群,而且datanode节点不能全部上线,其中还可能会出现节点上线或下线的情况,这个时候就很容易出现机器与机器之间磁盘的均衡的情况,...
为了方便查询,本人将Hadoop最新版0.21.0的html格式API转化为chm格式的。资料包含三个包的API,并且支持搜索提示与全文检索。希望对各位奋战在Hadoop第一线的朋友们有所帮助
hadoop-2.6.0 Window客户端,解压到目录,设置环境变量即可使用。java调用实例:// windows环境下需要配置Hadoop的客户端 System.setProperty("hadoop.home.dir", "E:/hadoop-2.6.0/"); conf = new Configuration...
hadoop-0.21.0-datajoin.jar