文档章节

hive JDBC 进度和日志查看

OttoWu
 OttoWu
发布于 2016/07/04 18:00
字数 555
阅读 2590
收藏 3

hive JDBC 进度和日志查看

@(hive)[JDBC|进度|日志] hive的JDBC提供了java连接hiveserver2查询的能力,但是hive JDBC有别于关系型数据库,一个查询语句可能要在十几分钟到几十分钟才会返回结果,而hive JDBC并不会实时显示进度和日志,这样在查询的时候对用户不是很友好,需要在执行sql的时候显示进度。

在后台查看hiverserver2的日志中发现,其实hiveserver2在执行一个sql查询的时候是会捕捉到MR运行的进度和日志的,所以只要能把hiverser2获取到MR进度的日志捕捉到,就能实现显示进度的功能。在之前的hive 0.70.9版本中我们是直接修改了hive-jdbc的源码来实现日志和数据的分离和重定向显示。在hive 1.1.0中其实已经有了可以获取进度的API了,分别是HiveStatement中的 List<String> getQueryLog()List<String> getQueryLog(boolean incremental, int fetchSize)boolean hasMoreLogs()三个方法,借助这三个方法,就可以实时显示sql 查询进度。

完整API地址为 ---HiveStatement

具体实现如下

	// 代码不完整,仅供参考
	public class HiveExecuter {
	
    static Statement stmt = null;

    static class GetLogThread extends Thread {

        public void run() { //真生的输出运行进度的thread
            if (stmt == null) {
                return;
            }
            HiveStatement hiveStatement = (HiveStatement) stmt;
            try {
                while (!hiveStatement.isClosed() && ((HiveStatement) stmt).hasMoreLogs()) {
                    try {
                        for (String log : ((HiveStatement) stmt).getQueryLog(true, 100)) {
                            System.out.println(log);
                        }
                        Thread.currentThread().sleep(500L);
                    } catch (SQLException e) { //防止while里面报错,导致一直退不出循环
                        e.printStackTrace();
                        return;
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                        return;
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        // ... 一些初始化
        // 加载数据连接
        try {
            Class.forName("org.apache.hive.jdbc.HiveDriver");
            connection = DriverManager.getConnection(hiveConnection, username, "");
            stmt = connection.createStatement();

            new GetLogThread().start();
            rs = stmt.executeQuery(preSql);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stmt != null) {
                    stmt.close();
                }

                if (connection != null && !connection.isClosed()) {
                    connection.close();
                }

            } catch (SQLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

© 著作权归作者所有

共有 人打赏支持
上一篇: java并发编程
下一篇: tomcat高可用尝试
OttoWu
粉丝 5
博文 18
码字总数 33252
作品 0
杭州
私信 提问
CDH5 hadoop-hive-habse单机版配置

CDH5 hadoop-hive-habse单机版配置 一、安装环境: OS:CentOS6.5 64位 JDK:jdk-7u72-linux-x64 hadoop:hadoop-2.3.0-cdh5.0.0. hbase:hbase-0.96.1.1-cdh5.0.0. hive:hive-0.12.0-cdh5.0.0.......

飓风2000
2018/09/17
0
0
hadoop hive执行count(*)提示OutOfMemoryError: Java heap

昨天在把hive部署到hadoop2.0 HA MR1集群中的时候,hive执行count(*)出错,日志为: java.lang.Exception: java.lang.OutOfMemoryError: Java heap space at org.apache.hadoop.mapred.Local......

yntmdr
2018/08/13
0
0
VirtualBox、CentOS 6.4、Hadoop、Hive玩起

1 安装VirtualBox: VirtualBox是一款开源免费的并且非常强大的虚拟机软件,同时支持X86和AMD64/Intel64,可以在多个操作系统平台上运行。与同性质的VMWare和Virtual PC比较,VirtualBox独到...

smile_zjw
2013/11/26
0
1
impala系列: 基本命令和jdbc连接

--======================= 使用impala-shell 登录 --======================= impala-shell --authcredsokinclear -l -i ipaddress -u username --======================= JDBC driver --......

hblt-j
2018/12/17
0
0
阿里年薪50WJAVA工程师转大数据学习路线!

大数据有两个方向,一个是偏计算机的,另一个是偏经济的。你学过Java,所以你可以偏将计算机的。 Java程序员想转大数据可行吗?Java是全世界使用人数最多的编程语言。不少程序员选择Java做为...

JAVA丶学习
2018/04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

更换本地git仓库的远程地址

参考学习链接:https://blog.csdn.net/mlq8087/article/details/81360025 本地 Git 仓库根目录下:cd .git ; 编辑 Git 配置文件:vim config ; shift + i 进入input 编辑模式 ; 修改 [rem...

Liens
12分钟前
1
0
Install hadoop, install hive, 及hive的使用

hadoop , hive 安装过程和配置文件(附件)。 注意: hadoop Name Node未做ha. Hive, 还是基本的hive on MR, 未使用on tez, on spark, 未配置LLAP、 HCatalog and WebHCat。 安装完之后,以...

墨子Zhai
13分钟前
1
0
如何处理缓存失效、缓存穿透、缓存并发等问题

缓存失效:   引起这个原因的主要因素是高并发下,我们一般设定一个缓存的过期时间时,可能有一些会设置5分钟啊,10分钟这些;并发很高时可能会出在某一个时间同时生成了很多的缓存,并且过...

我心中有猛狗
15分钟前
2
0
对于java 参数是值传递还是引用传递的

代码: package com.qimh.anotation;public class Test { static class Person{ private String name; public String getName() { return name;......

qimh
23分钟前
1
0
Pages Manager——可本地管理Pages服务内容,一键生成漂亮的文档界面。

Pages Manager Git地址 可本地管理Pages服务内容,一键生成漂亮的文档界面。在线预览 简单、轻便,无需安装数据库。 框架:spring-boot 数据库:sqlite 原理 本地维护一组markdown文档 将mar...

tanghc
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部