HDFS 日常运维

栏目: 服务器 · 发布时间: 7年前

内容简介:堆栈信息:解决方法:产生问题的原因是读取 DataNode 的并发过大,导致 Socket 连接超时。解决的办法有两个:

问题一:HDFS 读超时

堆栈信息:

java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/xxx.xxx.xxxx.xxx:36622 remote=/xxx.xxx.xxx.xxx:50010]  
 at org.apache.hadoop.net.SocketIOWithTimeout.doIO(SocketIOWithTimeout.java:164)
 at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:161)
 at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:131)
 at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:118)
 at java.io.FilterInputStream.read(FilterInputStream.java:83)
 at org.apache.hadoop.hdfs.protocolPB.PBHelper.vintPrefixed(PBHelper.java:2239)
 at org.apache.hadoop.hdfs.RemoteBlockReader2.newBlockReader(RemoteBlockReader2.java:430)
 at org.apache.hadoop.hdfs.BlockReaderFactory.getRemoteBlockReader(BlockReaderFactory.java:881)
 at org.apache.hadoop.hdfs.BlockReaderFactory.getRemoteBlockReaderFromTcp(BlockReaderFactory.java:759)
 at org.apache.hadoop.hdfs.BlockReaderFactory.build(BlockReaderFactory.java:376)
 at org.apache.hadoop.hdfs.DFSInputStream.blockSeekTo(DFSInputStream.java:662)
 at org.apache.hadoop.hdfs.DFSInputStream.readWithStrategy(DFSInputStream.java:889)
 at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:942)
 at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:742)
 at java.io.DataInputStream.readByte(DataInputStream.java:265)
 at org.apache.hadoop.io.WritableUtils.readVLong(WritableUtils.java:308)
 at org.apache.hadoop.io.WritableUtils.readVIntInRange(WritableUtils.java:348)
 at org.apache.hadoop.io.Text.readString(Text.java:471)
 at org.apache.hadoop.io.Text.readString(Text.java:464)

解决方法:

产生问题的原因是读取 DataNode 的并发过大,导致 Socket 连接超时。解决的办法有两个:

dfs.client.socket-timeout
dfs.datanode.handler.count

问题二:最后一个 block 没有足够的副本数,文件关闭失败

堆栈信息:

java.io.IOException: Unable to close file because the last block does not have enough number of replicas.  
    at org.apache.hadoop.hdfs.DFSOutputStream.completeFile(DFSOutputStream.java:2528)
    at org.apache.hadoop.hdfs.DFSOutputStream.closeImpl(DFSOutputStream.java:2495)
    at org.apache.hadoop.hdfs.DFSOutputStream.close(DFSOutputStream.java:2458)
    at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.close(FSDataOutputStream.java:72)
    at org.apache.hadoop.fs.FSDataOutputStream.close(FSDataOutputStream.java:106)

解决办法:

NameNode 收到 HDFS 客户端关闭文件请求之后,会检查最后一个 block 的完成状态,只有当足够的 DataNode 上报 block 完成才可关闭文件。

网络 IO 延迟和 GC 等原因都将导致 DataNode 延迟上报。

HDFS 客户端会多次尝试关闭文件,通过增加重试次数可减少该问题。编辑文件 hdfs-core.xml 文件,修改 dfs.client.block.write.locateFollowingBlock.retries 属性,默认为 5


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Caching

Web Caching

Duane Wessels / O'Reilly Media, Inc. / 2001-6 / 39.95美元

On the World Wide Web, speed and efficiency are vital. Users have little patience for slow web pages, while network administrators want to make the most of their available bandwidth. A properly design......一起来看看 《Web Caching》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具