文档章节

hive JDBC 进度和日志查看

OttoWu
 OttoWu
发布于 2016/07/04 18:00
字数 555
阅读 2099
收藏 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();
            }
        }

    }
}

© 著作权归作者所有

共有 人打赏支持
OttoWu
粉丝 3
博文 17
码字总数 31419
作品 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
08/13
0
0
伪分布式hadoop2.2.0+hive0.12.0安装

由于本人笔记本配置太低,安装一个虚拟机就卡的一戳一戳的,,,,所以只能安装伪分布式的集群 真正解决问题的方法是日志,所以下次你再出问题的时候,请最先找到你的日志文件,他会告诉你,...

LIPING234
2013/11/06
0
4
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
09/17
0
0
CDH5.11.2安装启动hive 启动失败解决办法

1,通过Cloudera Manager添加Hive服务,在启动Hive的时候遇到错误: .org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver 这种情况,猜测是缺少jdbc驱动,于是添加j...

小黑放大
05/25
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

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
今天
2
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
5
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
4
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
5
0
中秋快乐!!!

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部