分享

hive CDH 5.7.2进行开发 hiveserver2 java

5cai 发表于 2017-8-14 17:03:31 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 10 11829
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没有了对应的接口了

已有(10)人评论

跳转到指定楼层
easthome001 发表于 2017-8-14 20:08:17
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
这个错误是验证的问题了。代码中的三个参数确定是正确的   TTransport saslPort = PlainSaslHelper.getPlainTransport("hadoop", "abcd1234", transport);另外需要看下hive是否启动。

回复

使用道具 举报

5cai 发表于 2017-8-14 20:12:08
已经启动,我在shell中可以查询,程序应该问题不大,我连cdh5.3的集群,是可以读取到数据,正常,链接5.7.2集群就不行了
回复

使用道具 举报

nextuser 发表于 2017-8-14 20:16:29
CDH 5.7.2版本前有人写过如何获取:http://blog.csdn.net/taoxinwan/article/details/38404313
5.7.2没有了对应的接口了

上面个人看法:
楼主是试验过没有成功,还是说看的那方面的文档。
hive2的api,应该是稳定的,不会跟着cdh的发展而改变。除非hive的 版本改变。

回复

使用道具 举报

langke93 发表于 2017-8-14 20:26:20
5cai 发表于 2017-8-14 20:12
已经启动,我在shell中可以查询,程序应该问题不大,我连cdh5.3的集群,是可以读取到数据,正常,链接5.7.2 ...

代码都一样。可能两个原因
1.api的问题
2.集群的问题。
个人认为可能是集群差异造成的。
回复

使用道具 举报

5cai 发表于 2017-8-14 21:38:18
5.7比5.3少了getLog方法,不知道用什么方法替换
回复

使用道具 举报

5cai 发表于 2017-8-15 10:13:52
langke93 发表于 2017-8-14 20:26
代码都一样。可能两个原因
1.api的问题
2.集群的问题。

怀疑集群问题,但是HA上查看,集群是正常的,shell中可以查询
回复

使用道具 举报

qcbb001 发表于 2017-8-15 15:31:36
5cai 发表于 2017-8-14 21:38
5.7比5.3少了getLog方法,不知道用什么方法替换

这个非常简单的。只要类不变,可以到类中去查看即可。先把包添加进来,然后找到类,最后找到对应的函数。如果楼主不会找的话,可以把类贴出来。


回复

使用道具 举报

5cai 发表于 2017-8-16 11:54:25
qcbb001 发表于 2017-8-15 15:31
这个非常简单的。只要类不变,可以到类中去查看即可。先把包添加进来,然后找到类,最后找到对应的函数。 ...

就是没找到

5.3的hive-service,红色区域

5.3的hive-service,红色区域

5.7的hive-service

5.7的hive-service
回复

使用道具 举报

desehawk 发表于 2017-8-17 08:01:13
本帖最后由 pig2 于 2017-8-17 09:05 编辑

这是编译的二进制文件,最好是未编译的Java文件。当然你也可以尝试attache tar包。
1.jpg

这个是基础的Java知识了。
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条