文档章节

zeppelin hive查询慢问题记录

政委007
 政委007
发布于 2017/05/19 19:38
字数 668
阅读 187
收藏 1

#简介 zeppelin默认查询hive数据时会先获取hive的元数据,但是当元数据比较多时获取速度慢。我们的机器上show tables 会有3min中的延迟。

问题跟踪思路

执行show tables

查看zeppelin日志

从日志里可以看出当web执行脚本时实际上根据执行的任务类型调用了interpreter.sh脚本

INFO [2017-05-19 18:04:07,328] ({pool-2-thread-2} RemoteInterpreterManagedProcess.java[start]:126) - Run interpreter process [/home/hadoop/zeppelin/bin/interpreter.sh, -d, /home/hadoop/zeppelin/interpreter/jdbc, -p, 35411, -l, /home/hadoop/zeppelin/local-repo/2CGH6V1U7]

底层调用了interpreter-jdbc项目了的东西

查看hive审计日志

输入图片说明 可以看出hive查询时除了查询需要执行的sql,还查询了其他很多元数据信息。

定位代码

通过jdbc项目中JDBCInterpreterTest.java类来测试代码,可以看到sql执行的流程,在获取Connection的时候代码有了其他操作:

propertyKeySqlCompleterMap.put(propertyKey, createSqlCompleter(connection));

根据connection创建编译器。这里边获取好多元数据信息。通过追踪createSqlCompleter()方法,发现只有两个地方调用了这个方法:

  • getConnection
  • open 问题就出在这里了。

解决方案,

  • 1.简单粗暴的方法
    注释掉这两行代码,测试后发现不影响sql执行,但是测试类自动编译方法过不去。但是整体影响不大。没有影响到zeppelin的使用

  • 2.懒加载
    注释掉总感觉会有其他问题。那我能不能修改代码让这部分暂时不执行,在需要的时候在执行哪?应该是可以。 大致思路 1.缓存connection和key,存储到map中 2.当调用编译方法时根据key获取对应connection ,获取元数据 3.缓存元数据到map中

  • 步骤1

private Map<String,Connection> connectionMap = new HashMap<>();
  private void lazyCreateCompleter(String key ,Connection conn){
    connectionMap.put(key,conn);
  }
  • 步骤2 修改open()和getConnection()方法
//getConnection
 // propertyKeySqlCompleterMap.put(propertyKey, createSqlCompleter(connection));
   lazyCreateCompleter(propertyKey, connection);
//open
 for (String propertyKey : basePropretiesMap.keySet()) {
      //propertyKeySqlCompleterMap.put(propertyKey, createSqlCompleter(null));
        lazyCreateCompleter(propertyKey, null);
    }
    setMaxLineResults();
  • 步骤3 修改编译方法
@Override
  public List<InterpreterCompletion> completion(String buf, int cursor) {
    List<CharSequence> candidates = new ArrayList<>();
    SqlCompleter sqlCompleter = propertyKeySqlCompleterMap.get(getPropertyKey(buf));
    //当获取不到编译器时创建编译器
    if(sqlCompleter == null) {
        sqlCompleter = createSqlCompleter(connectionMap.get(buf));
        propertyKeySqlCompleterMap.put(buf,sqlCompleter);
    }
    if (sqlCompleter != null && sqlCompleter.complete(buf, cursor, candidates) >= 0) {
      List<InterpreterCompletion> completion;
      completion = Lists.transform(candidates, sequenceToStringTransformer);

      return completion;
    } else {

        return NO_COMPLETION;
    }
  }

编译代码 jdbc项目

mvn clean package -DskipTests -Dcheckstyle.skip=true

复制jar包${zeppelin_home}/interpreter/jdbc目录下,删除原来的zeppelin-jdbc-0.7.1.jar 包

重启服务

可能存在的问题

connection链接时间的问题,欢迎大神下边留言,这部分其他代码没怎么看懂。 hive sql执行没问题,但是没有测试其他sql有空大家可以测试一下

© 著作权归作者所有

上一篇: hive cli启动
下一篇: hbase使用
政委007
粉丝 10
博文 15
码字总数 15843
作品 0
洛阳
程序员
私信 提问
Apache Kylin v1.0 发布,分布式分析引擎

Apache Kylin 团队非常高兴宣布Apache Kylin v1.0 (incubating) 正式发布。Apache Kylin是一个分布式分析引擎,在Hadoop之上提供SQL接口及OLAP在线多维分析以支持超大规模数据集。 该版本带来...

LukeHan
2015/09/06
5.3K
13
zeppelin on CDH及配置spark查询hive表

1.下载zeppelin http://zeppelin.apache.org/download.html 我下载的是796MB的那个已经编译好的,如果需要自己按照环境编译也可以,但是要很长时间编译,这个版本包含了很多插件,我虽然是C...

hblt-j
02/15
194
3
基于docker的spark-hadoop分布式集群之二: 环境测试

在上一节搭建的集群环境基础上,本节对各个模块做个测试 Mysql 测试 1、Mysql节点准备 为方便测试,在mysql节点中,增加点数据 进入主节点 进入数据库节点 创建数据库 创建数据表 增加几条数...

Fordestiny
2018/08/16
0
0
HAWQ取代传统数仓实践(十九)——OLAP

一、OLAP简介 1. 概念 OLAP是英文是On-Line Analytical Processing的缩写,意为联机分析处理。此概念最早由关系数据库之父E.F.Codd于1993年提出。OLAP允许以一种称为多维数据集的结构,访问业...

wzy0623
2017/06/14
0
0
Apache Flink®生态所面临的机遇与挑战

作者:简锋 引言 在谈生态之前,我们来聊聊什么是生态。生态是指在某个特定领域,以某个组件为核心衍生出来其他多个组件,这些组件可以间接或者直接用到这个核心组件,然后辅助这个核心组件共...

Ververica
05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3.1K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
7
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
13
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
70
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部