在使用Hive的时候发生如下异常:
org.apache.thrift.transport.TTransportException
at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:132)
at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84)
at org.apache.thrift.protocol.TCompactProtocol.readByte(TCompactProtocol.java:574)
at org.apache.thrift.protocol.TCompactProtocol.readMessageBegin(TCompactProtocol.java:443)
分析原因后发现,第一次执行没有问题,但是第二次执行就会有问题,本人采用的是HiveClient与HiveServer的长连接,刚刚建立连接时没问题,但是第二次使用时,出现以上异常,在HiveServer上通过
netstat -antp | grep 10000(hiveserver的端口号) 发现,其中一个连接为FIN_WAIT2状态,经试验,该连接即为刚刚产生的长连接!
有关FIN_WAIT2可参见:http://www.2cto.com/net/201208/149364.html
现在本人采用短连接的方式解决此问题。