java程序链接hive cdh 5.7.2 ,代码如下(main方法):
TCLIService.Client client = createCliHiveClient(false, local , port, timeout); //true
TOpenSessionReq openReq = new TOpenSessionReq();
TOpenSessionResp openResp = client.OpenSession(openReq);
TSessionHandle sessHandle = openResp.getSessionHandle(); //select * from wzw limit 10
TExecuteStatementResp op = excuteSql(client, sessHandle, "select * from zxs_test limit 10", false, null);
if (op == null || (op != null && null == op.getOperationHandle())){
System.out.println("执行返回响应为NULL!");
}else{
//STATUS_CODE、INFO_MESSAGES、SQL_STATE、ERROR_CODE、ERROR_MESSAGE
TStatusCode sc = op.getStatus().getStatusCode() ;
System.out.println("Finish! STATUS: " + sc);
fetchResult(client, op.getOperationHandle(),FetchOrientation.FETCH_FIRST, FetchType.LOG,1000) ;
}
// 创建一个连接指定地址的thrift客户端
/**
*
* @param isNoSasl
* 服务器sasl验证类型,true则为none类型,false则为nosasl类型
* @param host
* 主机
* @param port
* 端口
* @param timeout
* 超时时间
* @return
* @throws SaslException
* @throws TTransportException
*/
public static TCLIService.Client createCliHiveClient(boolean isNoSasl, String host, int port, int timeout)
throws SaslException, TTransportException {
TSocket transport = new TSocket(host, port, timeout);
TBinaryProtocol pro = null;
// 如果sasl验证类型是none类型
if (isNoSasl) {
TTransport saslPort = PlainSaslHelper.getPlainTransport("hadoop", "abcd1234", transport);
pro = new TBinaryProtocol(saslPort);
saslPort.open();
} else {
// 如果sasl验证类型是noSasl类型
pro = new TBinaryProtocol(transport);
transport.open();
}
TCLIService.Client client = new TCLIService.Client(pro);
return client;
}
红色报错:
Exception in thread "main" org.apache.thrift.transport.TTransportException: java.net.SocketException: Connection reset
at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:129)
at org.apache.thrift.transport.TTransport.readAll(TTransport.java:86)
at org.apache.thrift.protocol.TBinaryProtocol.readStringBody(TBinaryProtocol.java:380)
at org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:230)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:69)
at org.apache.hive.service.cli.thrift.TCLIService$Client.recv_OpenSession(TCLIService.java:156)
at org.apache.hive.service.cli.thrift.TCLIService$Client.OpenSession(TCLIService.java:143)
at cn.cai.ThriftUtil.main(ThriftUtil.java:211)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:209)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:127)
... 7 more
请问是什么原因啊 ?
还有一个问题就是 cdh 5.7.2中如何发送查询?然后获得查询过程中的日志呢 ?
例如在shell中,select * from xxxx ;在控制台中生成的日志如何获取呢 ?
CDH 5.7.2版本前有人写过如何获取:http://blog.csdn.net/taoxinwan/article/details/38404313
5.7.2没有了对应的接口了
|
|