- 浏览: 347392 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lvyuan1234:
你好,你那个sample.txt文件可以分享给我吗
hive insert overwrite into -
107x:
不错,谢谢!
hive 表的一些默认值 -
on_way_:
赞
Hadoop相关书籍 -
bupt04406:
dengkanghua 写道出来这个问题该怎么解决?hbase ...
Unexpected state导致HMaster abort -
dengkanghua:
出来这个问题该怎么解决?hbase master启动不起来。
Unexpected state导致HMaster abort
hdfs集群出现SocketTimeoutException,但是原因不得而知,社区不少issue都提到过,但是就是不懂具体原因。
https://issues.apache.org/jira/browse/HDFS-693
https://issues.apache.org/jira/browse/HDFS-770
https://issues.apache.org/jira/browse/HDFS-3342
http://www.quora.com/What-are-some-tips-for-configuring-HBase
相关讨论说设置dfs.datanode.socket.write.timeout为0可以解决,不管怎么样都觉得没到点上。
今天测试,偶然发现居然重现了
重现步骤如下:
CacheConfig cacheConf = new CacheConfig(conf);
SchemaMetrics.setUseTableNameInTest(false);
Reader reader = HFile.createReader(fs, path, cacheConf);
reader.loadFileInfo();
HFileScanner scanner = reader.getScanner(false, false); // pread=false,非随机读取
// Align scanner at start of the file.
scanner.seekTo();
ByteBuffer key = scanner.getKey();
byte [] keyBytes = Bytes.toBytes(key);
ByteBuffer val = scanner.getValue();
byte[] valBytes = Bytes.toBytes(val);
System.out.println(" key: " + Bytes.toString(keyBytes));
System.out.println(" value: " + Bytes.toString(valBytes));
while (true) {
try { Thread.sleep(60000); count++; } catch (Exception e) { e.printStackTrace(); }
}
这个时候可以看到
DataNode有个DataXceiver线程,栈如下:
"DataXceiver for client /127.0.0.1:35602 [sending block blk_912297361534887040_1518]" daemon prio=10 tid=0x08259400 nid=0x225 runnable [0xb34e1000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:210)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:65)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
locked <0x508e9be8> (a sun.nio.ch.Util$2)
locked <0x508e9bd8> (a java.util.Collections$UnmodifiableSet)
locked <0x508d9798> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
at org.apache.hadoop.net.SocketIOWithTimeout$SelectorPool.select(SocketIOWithTimeout.java:339)
at org.apache.hadoop.net.SocketIOWithTimeout.waitForIO(SocketIOWithTimeout.java:249)
at org.apache.hadoop.net.SocketOutputStream.waitForWritable(SocketOutputStream.java:164)
at org.apache.hadoop.net.SocketOutputStream.transferToFully(SocketOutputStream.java:207)
at org.apache.hadoop.hdfs.server.datanode.BlockSender.sendChunks(BlockSender.java:391)
at org.apache.hadoop.hdfs.server.datanode.BlockSender.sendBlock(BlockSender.java:493)
at org.apache.hadoop.hdfs.server.datanode.DataXceiver.readBlock(DataXceiver.java:291)
at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:180)
过了480000ms后,DataNode出现日志:
2012-08-13 00:55:14,155 INFO org.apache.hadoop.hdfs.server.datanode.DataNode.clienttrace: src: /127.0.0.1:50010, dest: /127.0.0.1:35634, bytes: 330240, op: HDFS_READ, cliID: DFSClient_1059963309, offset: 0, srvID: DS-383488255-0:0:0:0:0:0:0:1-50010-1343028787069, blockid: blk_912297361534887040_1518, duration: 480154978318
2012-08-13 00:55:14,155 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(127.0.0.1:50010, storageID=DS-383488255-0:0:0:0:0:0:0:1-50010-1343028787069, infoPort=50075, ipcPort=50020):Got exception while serving blk_912297361534887040_1518 to /127.0.0.1:
java.net.SocketTimeoutException: 480000 millis timeout while waiting for channel to be ready for write. ch : java.nio.channels.SocketChannel[connected local=/127.0.0.1:50010 remote=/127.0.0.1:35634]
at org.apache.hadoop.net.SocketIOWithTimeout.waitForIO(SocketIOWithTimeout.java:250)
at org.apache.hadoop.net.SocketOutputStream.waitForWritable(SocketOutputStream.java:164)
at org.apache.hadoop.net.SocketOutputStream.transferToFully(SocketOutputStream.java:207)
at org.apache.hadoop.hdfs.server.datanode.BlockSender.sendChunks(BlockSender.java:391)
at org.apache.hadoop.hdfs.server.datanode.BlockSender.sendBlock(BlockSender.java:493)
at org.apache.hadoop.hdfs.server.datanode.DataXceiver.readBlock(DataXceiver.java:291)
at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:180)
2012-08-13 00:55:14,162 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: check disk error costs(ms): 7
2012-08-13 00:55:14,163 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(127.0.0.1:50010, storageID=DS-383488255-0:0:0:0:0:0:0:1-50010-1343028787069, infoPort=50075, ipcPort=50020):DataXceiver remoteAddress:/127.0.0.1:35634
java.net.SocketTimeoutException: 480000 millis timeout while waiting for channel to be ready for write. ch : java.nio.channels.SocketChannel[connected local=/127.0.0.1:50010 remote=/127.0.0.1:35634]
at org.apache.hadoop.net.SocketIOWithTimeout.waitForIO(SocketIOWithTimeout.java:250)
at org.apache.hadoop.net.SocketOutputStream.waitForWritable(SocketOutputStream.java:164)
at org.apache.hadoop.net.SocketOutputStream.transferToFully(SocketOutputStream.java:207)
at org.apache.hadoop.hdfs.server.datanode.BlockSender.sendChunks(BlockSender.java:391)
at org.apache.hadoop.hdfs.server.datanode.BlockSender.sendBlock(BlockSender.java:493)
at org.apache.hadoop.hdfs.server.datanode.DataXceiver.readBlock(DataXceiver.java:291)
at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:180)
此时在看DataNode进程栈,发现上面的DataXceiver 栈信息已经没有了,这个线程退出了
原因是因为Client向DataNode请求数据,但是只读取了一部分,剩下的一直没有去读取,所以过了480000后就会超时
在一些scan场景下就可能发生,scan的时候调用的是seek+read,new BlockReader时,设置的长度是(blk.getNumBytes() - offsetIntoBlock,也就是当前块剩余可读的数据量,从当前位置到block结束的长度)
如果scan没有读取到块结束就不读了,并且之后480000ms都没有在通过这个流执行seek+read,那么就会出现SocketTimeoutException异常
评论
懂了原理之后,这个问题没什么关系,不解决也没事。
懂了原理之后,这个问题没什么关系。
发表评论
-
hadoop
2017-08-01 13:42 0audit log配置 http://hack ... -
hbase flush前提: 等待相关事务都完成
2016-07-04 16:40 1061DefaultMemStore: @Override ... -
turn log on/off
2015-10-21 10:06 0wget -q "http://hostna ... -
hbase的一些语义
2014-06-04 16:39 1111hbase里面对一行操作前会加锁。 http://had ... -
Unexpected state导致HMaster abort
2014-01-09 11:44 2712线上和开发集群都遇到过master abort的情况,而且 ... -
hbase build Too many unapproved licenses
2013-12-30 16:02 2353[ERROR] Failed to execute ... -
hbase hbck 导致的multi assign
2013-12-25 18:03 1665http://hbase.apache.org/book. ... -
HBase Log Split 配置相关
2013-12-15 16:54 1564(1)HMaster SplitLogManager ... -
hbase jmx
2013-12-11 20:42 2938conf/hbase-env.sh 里面配了 JMX后就可 ... -
hbase bulk多family,锁住region
2013-10-29 15:14 1223HBase在bulk 多family的数据时,会获得整个r ... -
Too many fetch failures
2013-10-29 10:42 1426http://lucene.472066.n3.na ... -
Phoneix
2013-10-22 11:42 1499https://github.com/forcedotco ... -
hbase RowCounter 使用
2013-10-15 16:48 5923hbase org.apache.hadoop.hb ... -
cdh3集群 distcp 数据到 cdh4集群
2013-09-26 21:54 1101从cdh3集群 distcp 数据到 cdh4集群上面 ... -
hbase add table
2013-09-26 21:49 1336把table数据从一个集群移动到另外一个集群 (1) ... -
hbase shell
2013-09-26 11:18 1661hbase shell 命令 mvn cle ... -
cdh4 vs cdh3 client处理DataNode异常的不同
2013-09-13 21:13 2203cdh4在处理pipeline中的错误时,逻辑上与原先不一 ... -
hdfs 升级,cdh3 升级 cdh4
2013-08-05 18:09 2191Step 1: 做下saveNamespace操作,停掉集 ... -
hbase snapshot
2013-06-06 16:40 2172Snapshot: (1) take a sn ... -
hbase split 导致compact abort的日志
2013-06-06 16:37 34722013-06-06 14:58:43,131 INF ...
相关推荐
标题中的“java.net.SocketTimeoutException: Receive timed out”是一个Java编程中常见的异常,通常发生在进行网络通信时,接收数据超时。这个异常是由于Socket在等待接收数据时超过了预设的超时时间,没有接收到...
### Java.io.Reader与Java.io.InputStream的关键差异解析 在深入探讨`java.io.Reader`与`java.io.InputStream`的具体差异之前,我们首先需要理解这两者在Java I/O操作中的基础角色。`java.io.Reader`和`java.io....
Exception in thread “main” redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out at redis.clients.util.RedisInputStream.ensureFill...
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out 该异常的原因有: 1. 读写超时设置的过短:可以调整读写超时的设置,以满足实际情况。 2. 命令本身...
广东外语外贸大学思科信息学院计算机专业JAVA课程专业中的一小段代码
code:500 msg: java.net.SocketTimeoutException: connect timed out at com.alibaba.nacos.client.naming.net.NamingProxy.callServer(NamingProxy.java:424) at ...
可以通过调用`Socket`对象的`setSoTimeout(int timeout)`方法来设置一个读取超时值。如果在指定的时间内没有接收到数据,`read()`方法会抛出一个`SocketTimeoutException`,从而强制退出阻塞状态。示例代码如下: ...
03-02 12:11:21,983 WARN org.apache.hadoop.hdfs.DFSClient: DFSOutputStream ResponseProcessor exception for block blk_1439491087566691588_6207 java.net.SocketTimeoutException: 69000 millisecond timeout ...
在Java中,这通常通过`java.net.Socket`类或`java.net.SocketTimeoutException`来实现。下面是一个基本的远程端口扫描示例: ```java import java.io.IOException; import java.net.InetAddress; import java.net....
- 缓存时间可以通过系统属性`sun.net.dns.cache.timeout`进行设置,默认值为60秒。 3. **DNSSEC(DNS Security Extensions)**: - Java支持DNSSEC,可以验证DNS查询响应的来源和完整性。这通过`java.net.DNS...
在Java编程中,Apache POI库是处理Excel文件的常用工具,尤其在数据分析、自动化报告生成等领域有着广泛的应用。本程序"poi处理excel文件的小程序"就是基于Apache POI实现的,用于读取和操作Excel数据。 1. **...
import java.net.SocketTimeoutException; import java.net.UnknownHostException; public class ClientActivity extends Activity { public EditText messageEditText; @Override public void onCreate(Bundle...
在Java中,`java.net.Socket`和`java.net.ServerSocket`类用于客户端和服务器之间的通信。客户端通过创建Socket对象与服务器建立连接,而服务器端则通过创建ServerSocket监听特定端口,等待客户端连接。 2. **TCP/...
System.out.println("Heartbeat timeout, retrying..."); } } } socket.close(); } } ``` 对应的服务器端代码也需要处理接收到的心跳包并返回响应,以保持通信的连贯性。通过这样的设计,我们可以在不可靠的...
2. Java FTP库:Java标准库中的`java.net.FTPSClient`和`java.net.FTPClient`类提供了FTP功能。此外,Apache Commons Net库提供了更强大的`FTPClient`,支持FTP、FTPS(FTP over SSL/TLS)以及SFTP(SSH File ...
- `android.net`包:除了`java.net`中的类,还提供了额外的网络访问接口,如URI类。 - `android.net.http`包:处理SSL证书,支持安全的HTTPS连接。 - `android.net.wifi`包:用于管理WiFi相关的功能,如扫描、...
在Java中,`java.net.Socket`类代表了TCP协议的Socket,而`java.net.ServerSocket`则用于创建监听客户端连接的服务器端Socket。 1. **创建服务器端Socket** - `ServerSocket(int port)`:创建一个监听指定端口的...