给大数据分析师的一双大礼: Apache Kylin和Superset

作者:赵勇杰 何京珂

编辑:Sammi

分析师的挑战

在大数据时代,使用传统数据处理方式已经无法满足企业大规模数据的增长,而人工智能和 IoT 时代的到来让处理超大规模数据,解读超大规模数据的需求更加迫在眉睫。 分析和理解超大规模数据集就成为这些企业要解决的当务之急。

一重礼:Apache Kylin 开源 OLAP on Hadoop引擎

现代企业使用联机分析处理 ( OLAP ) 技术来分析数据,生成报表,从而帮助业务人员制订商务决策。随着大数据时代的来临和 Hadoop 技术的兴起,基于大数据平台的 OLAP 分析又给拥抱大数据的企业带来新的挑战。

Apache Kylin[1] 作为 Apache 基金会首个开源的 OLAP 分析引擎,已在全球得到了广泛的应用。Kylin采取预计算技术,可以为分析师在超大规模数据集上(PB/TB 级)提供亚秒级查询能力。Kylin 专注于 OLAP 计算引擎,提供很精妙的技术设计: Kylin 的数据源除了可以来自于 Hadoop 上的 Hive 数仓,还可以接收 Kafka 传递而来的流式数据; Cube 构建引擎可以用 MapReduce,一些构建步骤为了性能考量还可以选择使用 Spark;构建好的 Cube 默认存储在 HBase 中; 查询则采用业界最普遍使用的 ANSI-SQL 查询,分析师原有的 SQL 查询、报表、分析等可以轻松迁移到 Kylin。

查询接口上 Kylin 已经做到 ODBC/JDBC/RESTful 方式,这给第三方集成提供了巨大想像空间。

这里请读者留意,Kylin 设计精妙是指,Kylin 松耦合的设计完全可以让数据源,计算引擎,Cube 存储根据您自己使用场景而来做个性化定制——选择权在您手里。

• 高性能高并发: 支持TB到PB的数据规模上的亚秒级查询。

• 易于使用: 提供易用的 ODBC/JDBC/RESTful API 供使用和与第三方工具集成。

• 经济性: 一次构建可使得查询提速千百倍;查询越多越经济。

分析师期待可以快速的从不同的角度分析数据的情况,Kylin 作为 OLAP 引擎可以实现亚秒级查询响应,很好地解决了分析师面临的一个查询等待个把小时的窘境;有了数据处理的引擎,企业在赋能其数据科学团队,工程师和业务分析师进行基于数据的业务决策时,在前端仍需要的丰富的可视化图形,排序过滤等基础报表需求,对于高级分析师,使用其熟悉的 SQL 对数据进行再次加工处理也是非常有必要的。

针对以上问题,同样作为 Apache 软件基金会正在孵化项目的 Superset 便成为不二之选.

二重礼:Superset 充满活力的企业级商业智能平台

Superset 是一个数据探索和可视化平台,设计用来提供直观的,可视化的,交互式的分析体验。

Superset 提供了两种分析数据源的方式:

用户可以以单表形式直接查询多种数据源,包括 Presto、Hive、Impala、SparkSQL、MySQL、Postgres、Oracle、Redshift、SQL Server、Druid 等。本文后续内容也会详细介绍Superset如何支持Kylin数据源。

一个 SQL 的 IDE 供高级分析师使用 SQL 查询定义所需要分析的数据集,这种方法使用户在一个查询中实现用 Superset 查询数据源的多表,并立即对查询进行可视化分析。

SUPERSET 的前世今生

Superset 起源于 2015 年初黑客马拉松项目,曾经使用过 Caravel 和 Panoramix 作为项目名。现在主要维护小组是 Airbnb 数据科学组,代码托管在 Github。作为 Apache 软件基金会孵化项目,Superset 目标是要做成数据可视化平台。

Superset 对于数据源端通过一个成熟的 OR-Mapping 方案对接了几乎市面上所有数据库产品,数据的分析和建模再使用 Pandas 统一加工序列化后由前端渲染展示. 进而前端渲染出众多富有表现力的可视化图表,这些可视化技术包括但不限于: D3,react stack,mapbox,deck.gl。

笔者在使用 Superset 过程中也感觉到一些不足,例如无法通过权限隔离不同用户可访问的数据源,数据查询暂时不支持下钻操作,多数据源不容易做交互查询等。但是瑕不掩瑜,Superset 依然是现在这个星球上最好的开源 BI 平台。

Apache Kylin 与 Superset 集成:提升大数据技术生产力

交互式分析是 Apache Kylin 与 Superset 共同的产品目标,使用 Kylin 作为 Superset 查询,数据经过 Kylin Cube 的预计算处理,在 Superset 前端进行可视化分析想必是快到飞起,真可谓是强强联合。

Kyligence 数据科学小组开源了 kylinpy 项目完成了 Kylin 与 Superset 数据源的集成。现在我们就来手把手教读者实现 Kylin 和 Superset 的集成,并实现交互式的可视化分析。

准备工作

1. 安装 Apache Kylin

请参考 Apache Kylin installation guide

2. Apache Kylin 提供了样例 Cube,方便大家学习使用。Kylin 启动成功后,可以在 Kylin 安装路径下运行以下命令生成样例数据 Cube:

./${KYLIN_HOME}/bin/sample.sh

运行后,使用默认的 Kylin 账号 ADMIN / KYLIN 登陆界面,在 System 页面点击 Reload Metadata 即可看到样例项目 Learn_kylin。

选择样例 Cube “Kylin_sales_cube”,点击 Action -> Build。选择日期不要晚于 2014-01-01 来进行全量构建。

点击前往 Monitor 页面查看 Cube 构建的进程,知道100%完成,Cube 就可以进行查询了。

前往 Insight 页面执行一个查询验证 Cube 能够返回结果。

select part_dt,

sum(price) as total_selled,

count(distinct seller_id) as sellers

from kylin_sales

group by part_dt

order by part_dt

查询会击中新构建的 Kylin_sales_cube。

3. 下面我们安装 Superset,并初始化。

强烈建议使用虚拟环境来安装所有的依赖包(virtualenv/virtualenvwrapper)

通过 PyPi 仓库安装 superset

pip install superset

创建初始超级用户: admin/admin

fabmanager create-admin --app superset --username admin --password admin --firstname admin --lastname admin --email admin@fab.org

使用默认 sqllite metadata,位于 $HOME/.superset/superset.db,并且根据 migrate 创建表结构

superset db upgrade

初始化 role 等

superset init

执行如上4条命令便可以在 POSIX 操作系统上部署 Superset,如想加载 Superset提供的例子数据,可以再执行

superset load_examples

4. 安装 kylinpy

pip install kylinpy

5. 安装验证,如果一切顺利,Superset daemon应该可以跑起来了

-d 选项可以打开 debug 模式

superset runserver -d

Starting server with command:

gunicorn -w 2 --timeout 60 -b 0.0.0.0:8088 --limit-request-line 0 --limit-request-field_size 0 superset:app

[2018-01-03 15:54:03 +0800] [73673] [INFO] Starting gunicorn 19.7.1

[2018-01-03 15:54:03 +0800] [73673] [INFO] Listening at: http://0.0.0.0:8088 (73673)

[2018-01-03 15:54:03 +0800] [73673] [INFO] Using worker: sync

[2018-01-03 15:54:03 +0800] [73676] [INFO] Booting worker with pid: 73676

[2018-01-03 15:54:03 +0800] [73679] [INFO] Booting worker with pid: 73679

建立连接

现在所有的准备工作已经完毕,我们来试试在 Superset 中创建一个 Apache Kylin 数据源。

1. 浏览器打开 http://localhost:8088 帐号密码是刚才 fabmanager 创建的 admin/admin。

点击 Source —> Datasource,如下配置,注意如下几点:

SQLAlchemy URI 格式为:

kylin://:@:/

勾选 Expose in SQL Lab 后这个数据源便可以在 SQL Lab 中展示出来。

点击 Test Connection 可以测试链接是否成功。

创建 Kylin 数据源

测试连接

查询 Kylin 表单

连接成功后页面最下会展示这个 Kylin 项目内所有的表。

1. 点击 Source —> Tables,添加 Table,此处需要手动输入需要添加的表名。

2. 在所有列表中选定相应的表,就可以开始查询之旅啦。

使用 SQL Lab 查询 Apache Kylin 多表

熟悉 Kylin 的读者都知道,Kylin Cube 通常都是以多表关联建模为基础生成的,因此分析 Kylin Cube 的数据时,使用多表进行查询对于 Kylin 来说是非常常见的场景。在使用 Superset 分析 Kylin 数据时,我们可以使用 Superset 中的 SQL Lab 功能来查询多表,并对其进行可视化分析。

在这里我们以一个可以击中 Kylin 中的 sample cube ‘kylin_sales_cube’ 的查询为例。

查询返回后点击可视化按键即可针对当前查询进行可视化分析。

你可以复制下面的完整查询来体验 SQL Lab 查询 Kylin Cube 的功能。

select YEAR_BEG_DT,

MONTH_BEG_DT,

WEEK_BEG_DT,

META_CATEG_NAME,

CATEG_LVL2_NAME,

CATEG_LVL3_NAME,

OPS_REGION,

NAME as BUYER_COUNTRY_NAME,

sum(PRICE) as GMV,

sum(ACCOUNT_BUYER_LEVEL) ACCOUNT_BUYER_LEVEL,

count(*) as CNT

from KYLIN_SALES

join KYLIN_CAL_DT

on CAL_DT=PART_DT

join KYLIN_CATEGORY_GROUPINGS

on SITE_ID=LSTG_SITE_ID

and KYLIN_CATEGORY_GROUPINGS.LEAF_CATEG_ID=KYLIN_SALES.LEAF_CATEG_ID

join KYLIN_ACCOUNT

on ACCOUNT_ID=BUYER_ID

join KYLIN_COUNTRY

on ACCOUNT_COUNTRY=COUNTRY

group by YEAR_BEG_DT,

MONTH_BEG_DT,

WEEK_BEG_DT,

META_CATEG_NAME,

CATEG_LVL2_NAME,

CATEG_LVL3_NAME,

OPS_REGION,

NAME

使用 Superset 的多种功能查询 Apache Kylin

根据很多 Apache Kylin 用户在对接可视化及报表分析前端时,所提出的一些常见需求,我们对S uperset 的相应功能也做了一些测试,可以说企业对于报表分析及可视化展现所需要的绝大部分功能,Superset 都已经可以提供了。

排序

Superset 支持使用任意数据源上定义的度量进行排序,不论这个度量是否在图表上。

过滤功能

在 Superset 中有多种过滤功能都可以使用在对 Kylin 的查询中。

1. 日期过滤

在 Superset 中你可以对定义为时间列的维度进行日期和时间的过滤。

2. 维度过滤

对于其他非时间维度,Superset 也提供了维度的筛选器,支持 SQL 中的 in,not in,等于,不等于,大于等于,小于等于,小于,大于,like 等多种过滤方式。

3. 报表内搜索

你可以在报表返回后使用搜索框功能对数据进行筛选。

4. 度量过滤

对于度量 Superset 支持用户直接写入 SQL 的having 表达式。


5. 联动过滤

使用 Superset 中提供的过滤框可视化组件,可以实现一个过滤器联动过滤多个可视化图形的效果。

如下图,过滤框组件可以联动控制仪表盘上的所有可视化图形。

6. Top N

你可以通过对数据进行排序和设置返回行数限制来实现展示 Top 10/Bottom 10 等功能。

7. 分页

在返回的数据量较大时,Superset 支持设置每页数据行数实现数据的分页。

8. 多种可视化

Superset 提供多样的可视化图表选择,这里仅以世界地图和气泡图为例作为展示。

9. 其它功能

另外 Superset 还支持数据导出 CSV,报表分享,查看报表 SQL 等功能。

10. 指纹支持

最重要的是,Superset 由于社区的贡献已提供了中文版本!

Superset 使用了 Flask 的翻译扩展工具 Flask-Babel,使用了这个扩展包后,每个对应的语言版本只需要在翻译文件中将对应的 Superset 文字翻译成中文即可,这使得 Superset 社区的中文用户可以很容易的贡献翻译内容。

总结

多个开源项目的结合往往能产生1+1>2的效果,Kylin 专注于 OLAP 计算引擎,Superset 专注于数据可视化展现. 分析师手中的双剑合璧实现交互式分析,让企业使用大数据技术显著提升生产力。

参考

【1】Apache Kylin

【2】kylinpy on Github

【3】Superset: Airbnb’s data exploration platform

【4】Superset on Github

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容