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

转自

分析师的挑战

在大数据时代,使用传统数据处理方式已经无法满足企业大规模数据的增长,而人工智能和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/REST ful方式,这给第三方集成提供了巨大想像空间。

这里请读者留意,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来进行全量构建。

这里写图片描述
3. 点击前往Monitor页面查看Cube构建的进程,知道100%完成,Cube就可以进行查询了。
前往Insight页面执行一个查询验证Cube能够返回结果。

# 通过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
  1. 安装kylinpy
 $ pip install kylinpy
  1. 安装验证,如果一切顺利,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

这里写图片描述
2. 点击Source —> Datasource,如下配置,注意如下几点:

  • SQLAlchemy URI格式为: kylin://:
<password>@<hostname>:<port>/<project name>
  • 勾选Expose in SQL Lab后这个数据源便可以在SQL Lab中展示出来
  • 点击Test Connection可以测试链接是否成功

    1. 创建Kylin 数据源

这里写图片描述
4. 测试连接

这里写图片描述

查询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用户在对接可视化及报表分析前端时,所提出的一些常见需求,我们对Superset的相应功能也做了一些测试,可以说企业对于报表分析及可视化展现所需要的绝大部分功能,Superset都已经可以提供了。

排序

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

这里写图片描述

过滤功能

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

  1. 日期过滤

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

这里写图片描述
2. 维度过滤

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

这里写图片描述
3. 报表内搜索

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

这里写图片描述
4. 度量过滤

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

这里写图片描述
5. 联动过滤

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

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

这里写图片描述

Top N

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

这里写图片描述

分页

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

这里写图片描述

多种可视化

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

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

其他功能

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

中文支持

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

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

这里写图片描述

总结

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

参考

Apache Kylin:
http://kylin.apache.org
kylinpy on Github:
https://github.com/Kyligence/kylinpy
Superset: Airbnb’s data exploration platform:
https://medium.com/airbnb-engineering/caravel-airbnb-s-data-exploration-platform-15a72aa610e5
Superset on Github:
https://github.com/apache/incubator-superset

猜你喜欢

转载自blog.csdn.net/cnhome/article/details/80236380