Kylin 下压查询 (Pushdown) 到 Impala

背景介绍

Kylin 作为OLAP中主流的框架之一,其优势是在于利用Cube对数据做预计算。在离线计算的场景中,数据源为Hive表,使用Spark/MR对源数据进行折叠,将结果存储在HBase中。用户在查询的时候,元数据使用的是折叠后的维度(同步自Hive),实际查询的是HBase的结果。

这就带来了一个问题,某些场景下,用户需要查询折叠前的原始数据作为样本,或者查询未经折叠的列,Kylin就无法很好的支持了。

v2.3.0之前的版本,Kylin measure中有RAW这个函数,支持在HBase中存储原始列的值。但是经过社区的讨论,将RAW隐藏起来了,主要的理由是当cell中列数据过大,容易引起BufferOverflow,这个问题到现在也没有很好解决,只能通过修改RowConstants.ROWVALUE_BUFFER_SIZE的值。
具体讨论如下:
RAW measure in Apache Kylin
[Discuss] Disable/hide "RAW" measure in Kylin web GUI
Grow ByteBuffer Dynamically in Cube Building and Query

因此,寻找一个合适且高效的方法,用来完成特定查询就显得很重要了。

Kylin支持将不在预计算之中的查询下推到Hive中,这种方式很符合目前的使用场景。但是,Hive的计算需要向Yarn申请资源,耗费大量的时间,使得稍微复杂的查询在1min以上。通过调研Kylin查询下压的方式和官网对于配置的介绍,发现理论上支持所有JDBC连接方式的查询引擎,例如Impala和Presto。

因为生产环境没有Presto,只好使用Impala来测试一下了。

相关配置

1.修改kylin.properties
vim $KYLIN_HOME/conf/kylin.properties

#### QUERY PUSH DOWN ###
#
kylin.query.pushdown.runner-class-name=org.apache.kylin.query.adhoc.PushDownRunnerJdbcImpl
#
##kylin.query.pushdown.update-enabled=false
kylin.query.pushdown.jdbc.url=jdbc:impala://<impala-daemon-ip>:21050/default
kylin.query.pushdown.jdbc.driver=com.cloudera.impala.jdbc41.Driver
kylin.query.pushdown.jdbc.username=root
##kylin.query.pushdown.jdbc.password=
#
kylin.query.pushdown.jdbc.pool-max-total=150
kylin.query.pushdown.jdbc.pool-max-idle=100
kylin.query.pushdown.jdbc.pool-min-idle=50

2.下载并添加Impala依赖
Impala JDBC Connector 2.6.12 for Cloudera Enterprise

unzip ClouderaImpala_JDBC_2.6.12.1013.zip
cd ClouderaImpala_JDBC_2.6.12.1013
unzip ClouderaImpalaJDBC41-2.6.12.1013.zip
mv ImpalaJDBC41.jar $KYLIN_HOME/lib

3.重启Kylin

修改代码

1.经过压力测试,发现并发数并不是很理想,通过jstack分析,存在死锁,修改部分代码,死锁消失。目前并发数在每秒50左右(SELECT *)。
(此修改未经过功能测试,仅做参考)
JdbcPushDownConnectionManager

public Connection getConnection() {
    try {
        return dataSource.getConnection();
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
}

2.如果需要支持任意无法匹配的SQL下压,需要修改以下代码
PushDownUtil

private static Pair<List<List<String>>, List<SelectedColumnMeta>> tryPushDownQuery(String project, String sql,
            String defaultSchema, SQLException sqlException, boolean isSelect, boolean isPrepare) throws Exception {

        KylinConfig kylinConfig = ProjectManager.getInstance(KylinConfig.getInstanceFromEnv()).getProject(project).getConfig();

        if (!kylinConfig.isPushDownEnabled())
            return null;

        if (isSelect) {
            logger.info("Query failed to utilize pre-calculation, routing to other engines", sqlException);
            if (!isExpectedCause(sqlException)) {
                logger.info("quit doPushDownQuery because prior exception thrown is unexpected");
//                注释该行,使得所有无法解析的SQL均下压,如果SQL出错,会在下压引擎中报错
//                return null;
            }
        } else {
            Preconditions.checkState(sqlException == null);
            logger.info("Kylin cannot support non-select queries, routing to other engines");
        }

相关资料

Enable Query Pushdown

原文地址:https://www.cnblogs.com/take-a-note/p/11516639.html

时间: 2024-07-31 14:53:58

Kylin 下压查询 (Pushdown) 到 Impala的相关文章

Kylin查询性能低下原因分析

在处理指数行情数据时(IDXD),我遇到一个KYLIN性能查询低下的问题,非常奇怪.经过一番研究发现了其中的原因并顺利解决: 症状: select count(*) from sensitop.idxd where ticker = '000300' and tradedate between '2016-01-01' and '2016-07-01'很快,不到一秒 select * from sensitop.idxd where ticker = '000300' and tradedate

万亿级日志与行为数据存储查询技术剖析——Hbase系预聚合方案、Dremel系parquet列存储、预聚合系、Lucene系

转自:http://www.infoq.com/cn/articles/trillion-log-and-data-storage-query-techniques?utm_source=infoq&utm_medium=popular_widget&utm_campaign=popular_content_list&utm_content=homepage 目前大数据存储查询方案大概可以分为:Hbase系.Dremel系.预聚合系.Lucene系,笔者就自身的使用经验说说这几个系

HBase场景 | 都是HBase上的SQL引擎,Kylin和Phoenix有什么不同?

大数据时代,数据的价值越来越被重视,企业从海量大数据中挖掘所需要的信息,用来驱动业务决策以获得更大的商业价值.与此同时,出现了越来越多的大数据技术帮助企业进行大数据分析,例如 Apache Hadoop,Hive,Spark,Presto,Drill,以及今天我们即将介绍的 Apache Kylin 和 Apache Phoenix 项目等,都是使用 SQL 语言就可以分析大数据,极大地降低了大数据的使用门槛.这些大数据技术提供 SQL 查询接口,不只是因为 SQL 学习成本低,同时也和 SQL

Kylin

为什么需要Kylin? Hadoop帮助我们解决了海量数据的存储. 早期使用Hadoop的MapReduce计算模型,太慢了,只能做离线计算,无法做实时计算与迭代式计算. Spark应运而生,并带动了Scala语言的发展,Spark的MapReduce计算模型比Hadoop的MapReduce计算模型性能提升了数十倍. 在现今的企业发展中,数据的增量是每日以百MB.G为单位的增长,面对如此之大的规模性数据增长,及运营成本.硬件成本.响应速度等各方面影响下,Spark也够呛. 在这种情况下,企业查

Apache Kylin 概述

1 Kylin是什么 今天,随着移动互联网.物联网.AI等技术的快速兴起,数据成为了所有这些技术背后最重要,也是最有价值的"资产".如何从数据中获得有价值的信息?这个问题驱动了相关技术的发展,从最初的基于文件的检索.分析程序,到数据仓库理念的诞生,再到基于数据库的商业智能分析.而现在,这一问题已经变成了如何从海量的超大规模数据中快速获 取有价值的信息,新的时代.新的挑战.新的技术必然应运而生. 在大数据处理技术领域,用户最普遍的诉求就是希望以很简易的方式从大数据平台上快速获取查询结果,

[转帖]Apache Kylin 概述

Apache Kylin 概述 https://www.cnblogs.com/xiaodf/p/11671095.html 1 Kylin是什么 今天,随着移动互联网.物联网.AI等技术的快速兴起,数据成为了所有这些技术背后最重要,也是最有价值的“资产”.如何从数据中获得有价值的信息?这个问题驱动了相关技术的发展,从最初的基于文件的检索.分析程序,到数据仓库理念的诞生,再到基于数据库的商业智能分析.而现在,这一问题已经变成了如何从海量的超大规模数据中快速获 取有价值的信息,新的时代.新的挑战.

HBase多条件及分页查询的一些方法

HBase是Apache Hadoop生态系统中的重要一员,它的海量数据存储能力,超高的数据读写性能,以及优秀的可扩展性使之成为最受欢迎的NoSQL数据库之一.它超强的插入和读取性能与它的数据组织方式有着密切的关系,在逻辑上,HBase的表数据按RowKey进行字典排序, RowKey实际上是数据表的一级索引(Primary Index),由于HBase本身没有二级索引(Secondary Index)机制,基于索引检索数据只能单纯地依靠RowKey.也只有使用RowKey查询数据才能得到非常高

初识 Cloudera Impala

Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据.已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性.相比之下,Impala的最大特点也是最大卖点就是它的快速.Impala 为存储在 HDFS 和 HBase 中的数据提供了一个实时 SQL 查询接口. Impala优点 下图来自zdnet,描述了Impala的一些优点:

Alex 的 Hadoop 菜鸟教程: 第15课 Impala 安装使用教程

声明: 本文基于Centos 6.x + CDH 5.x 硬件要求 Impala的使用是有硬件要求的!我第一次见到有硬件要求的,那就是你的CPU必须支持SSSE3,如果你的CPU较老,不支持SSSE3 (3个S),那么你只能找别的机器来学习Impala,因为虚拟机也没有办法给你虚拟出不同的CPU. 为什么用 Impala 因为Hive 太慢了!Impala 也可以执行SQL,但是比Hive的速度快很多.为什么Impala可以比Hive快呢?因为Hive采用的是把你的sql转化成hadoop 的