作者:趙勇杰 何京珂
編輯:Sammi
分析師的挑戰(zhàn)
在大數(shù)據(jù)時代,使用傳統(tǒng)數(shù)據(jù)處理方式已經(jīng)無法滿足企業(yè)大規(guī)模數(shù)據(jù)的增長,而人工智能和 IoT 時代的到來讓處理超大規(guī)模數(shù)據(jù),解讀超大規(guī)模數(shù)據(jù)的需求更加迫在眉睫。 分析和理解超大規(guī)模數(shù)據(jù)集就成為這些企業(yè)要解決的當(dāng)務(wù)之急。
一重禮:Apache Kylin 開源 OLAP on Hadoop引擎
現(xiàn)代企業(yè)使用聯(lián)機(jī)分析處理 ( OLAP ) 技術(shù)來分析數(shù)據(jù),生成報表,從而幫助業(yè)務(wù)人員制訂商務(wù)決策。隨著大數(shù)據(jù)時代的來臨和 Hadoop 技術(shù)的興起,基于大數(shù)據(jù)平臺的 OLAP 分析又給擁抱大數(shù)據(jù)的企業(yè)帶來新的挑戰(zhàn)。
Apache Kylin[1] 作為 Apache 基金會首個開源的 OLAP 分析引擎,已在全球得到了廣泛的應(yīng)用。Kylin采取預(yù)計算技術(shù),可以為分析師在超大規(guī)模數(shù)據(jù)集上(PB/TB 級)提供亞秒級查詢能力。Kylin 專注于 OLAP 計算引擎,提供很精妙的技術(shù)設(shè)計: Kylin 的數(shù)據(jù)源除了可以來自于 Hadoop 上的 Hive 數(shù)倉,還可以接收 Kafka 傳遞而來的流式數(shù)據(jù); Cube 構(gòu)建引擎可以用 MapReduce,一些構(gòu)建步驟為了性能考量還可以選擇使用 Spark;構(gòu)建好的 Cube 默認(rèn)存儲在 HBase 中; 查詢則采用業(yè)界最普遍使用的 ANSI-SQL 查詢,分析師原有的 SQL 查詢、報表、分析等可以輕松遷移到 Kylin。
查詢接口上 Kylin 已經(jīng)做到 ODBC/JDBC/RESTful 方式,這給第三方集成提供了巨大想像空間。
這里請讀者留意,Kylin 設(shè)計精妙是指,Kylin 松耦合的設(shè)計完全可以讓數(shù)據(jù)源,計算引擎,Cube 存儲根據(jù)您自己使用場景而來做個性化定制——選擇權(quán)在您手里。
? 高性能高并發(fā): 支持TB到PB的數(shù)據(jù)規(guī)模上的亞秒級查詢。
? 易于使用: 提供易用的 ODBC/JDBC/RESTful API 供使用和與第三方工具集成。
? 經(jīng)濟(jì)性: 一次構(gòu)建可使得查詢提速千百倍;查詢越多越經(jīng)濟(jì)。
分析師期待可以快速的從不同的角度分析數(shù)據(jù)的情況,Kylin 作為 OLAP 引擎可以實(shí)現(xiàn)亞秒級查詢響應(yīng),很好地解決了分析師面臨的一個查詢等待個把小時的窘境;有了數(shù)據(jù)處理的引擎,企業(yè)在賦能其數(shù)據(jù)科學(xué)團(tuán)隊,工程師和業(yè)務(wù)分析師進(jìn)行基于數(shù)據(jù)的業(yè)務(wù)決策時,在前端仍需要的豐富的可視化圖形,排序過濾等基礎(chǔ)報表需求,對于高級分析師,使用其熟悉的 SQL 對數(shù)據(jù)進(jìn)行再次加工處理也是非常有必要的。
針對以上問題,同樣作為 Apache 軟件基金會正在孵化項目的 Superset 便成為不二之選.
二重禮:Superset 充滿活力的企業(yè)級商業(yè)智能平臺
Superset 是一個數(shù)據(jù)探索和可視化平臺,設(shè)計用來提供直觀的,可視化的,交互式的分析體驗。
Superset 提供了兩種分析數(shù)據(jù)源的方式:
用戶可以以單表形式直接查詢多種數(shù)據(jù)源,包括 Presto、Hive、Impala、SparkSQL、MySQL、Postgres、Oracle、Redshift、SQL Server、Druid 等。本文后續(xù)內(nèi)容也會詳細(xì)介紹Superset如何支持Kylin數(shù)據(jù)源。
一個 SQL 的 IDE 供高級分析師使用 SQL 查詢定義所需要分析的數(shù)據(jù)集,這種方法使用戶在一個查詢中實(shí)現(xiàn)用 Superset 查詢數(shù)據(jù)源的多表,并立即對查詢進(jìn)行可視化分析。
SUPERSET 的前世今生
Superset 起源于 2015 年初黑客馬拉松項目,曾經(jīng)使用過 Caravel 和 Panoramix 作為項目名。現(xiàn)在主要維護(hù)小組是 Airbnb 數(shù)據(jù)科學(xué)組,代碼托管在 Github。作為 Apache 軟件基金會孵化項目,Superset 目標(biāo)是要做成數(shù)據(jù)可視化平臺。
Superset 對于數(shù)據(jù)源端通過一個成熟的 OR-Mapping 方案對接了幾乎市面上所有數(shù)據(jù)庫產(chǎn)品,數(shù)據(jù)的分析和建模再使用 Pandas 統(tǒng)一加工序列化后由前端渲染展示. 進(jìn)而前端渲染出眾多富有表現(xiàn)力的可視化圖表,這些可視化技術(shù)包括但不限于: D3,react stack,mapbox,deck.gl。
筆者在使用 Superset 過程中也感覺到一些不足,例如無法通過權(quán)限隔離不同用戶可訪問的數(shù)據(jù)源,數(shù)據(jù)查詢暫時不支持下鉆操作,多數(shù)據(jù)源不容易做交互查詢等。但是瑕不掩瑜,Superset 依然是現(xiàn)在這個星球上最好的開源 BI 平臺。
Apache Kylin 與 Superset 集成:提升大數(shù)據(jù)技術(shù)生產(chǎn)力
交互式分析是 Apache Kylin 與 Superset 共同的產(chǎn)品目標(biāo),使用 Kylin 作為 Superset 查詢,數(shù)據(jù)經(jīng)過 Kylin Cube 的預(yù)計算處理,在 Superset 前端進(jìn)行可視化分析想必是快到飛起,真可謂是強(qiáng)強(qiáng)聯(lián)合。
Kyligence 數(shù)據(jù)科學(xué)小組開源了 kylinpy 項目完成了 Kylin 與 Superset 數(shù)據(jù)源的集成。現(xiàn)在我們就來手把手教讀者實(shí)現(xiàn) Kylin 和 Superset 的集成,并實(shí)現(xiàn)交互式的可視化分析。
準(zhǔn)備工作
1. 安裝 Apache Kylin
請參考?Apache Kylin installation guide
2. Apache Kylin 提供了樣例 Cube,方便大家學(xué)習(xí)使用。Kylin 啟動成功后,可以在 Kylin 安裝路徑下運(yùn)行以下命令生成樣例數(shù)據(jù) Cube:
./${KYLIN_HOME}/bin/sample.sh
運(yùn)行后,使用默認(rèn)的 Kylin 賬號 ADMIN / KYLIN 登陸界面,在 System 頁面點(diǎn)擊 Reload Metadata 即可看到樣例項目 Learn_kylin。
選擇樣例 Cube “Kylin_sales_cube”,點(diǎn)擊 Action -> Build。選擇日期不要晚于 2014-01-01 來進(jìn)行全量構(gòu)建。
點(diǎn)擊前往 Monitor 頁面查看 Cube 構(gòu)建的進(jìn)程,知道100%完成,Cube 就可以進(jìn)行查詢了。
前往 Insight 頁面執(zhí)行一個查詢驗證 Cube 能夠返回結(jié)果。
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
查詢會擊中新構(gòu)建的 Kylin_sales_cube。
3. 下面我們安裝 Superset,并初始化。
強(qiáng)烈建議使用虛擬環(huán)境來安裝所有的依賴包(virtualenv/virtualenvwrapper)
通過 PyPi 倉庫安裝 superset
pip install superset
創(chuàng)建初始超級用戶: admin/admin
fabmanager create-admin --app superset --username admin --password admin --firstname admin --lastname admin --email admin@fab.org
使用默認(rèn) sqllite metadata,位于 $HOME/.superset/superset.db,并且根據(jù) migrate 創(chuàng)建表結(jié)構(gòu)
superset db upgrade
初始化 role 等
superset init
執(zhí)行如上4條命令便可以在 POSIX 操作系統(tǒng)上部署 Superset,如想加載 Superset提供的例子數(shù)據(jù),可以再執(zhí)行
superset load_examples
4. 安裝 kylinpy
pip install kylinpy
5. 安裝驗證,如果一切順利,Superset daemon應(yīng)該可以跑起來了
-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
建立連接
現(xiàn)在所有的準(zhǔn)備工作已經(jīng)完畢,我們來試試在 Superset 中創(chuàng)建一個 Apache Kylin 數(shù)據(jù)源。
1. 瀏覽器打開 http://localhost:8088 帳號密碼是剛才 fabmanager 創(chuàng)建的 admin/admin。
點(diǎn)擊 Source —> Datasource,如下配置,注意如下幾點(diǎn):
SQLAlchemy URI 格式為:
kylin://:@:/
勾選 Expose in SQL Lab 后這個數(shù)據(jù)源便可以在 SQL Lab 中展示出來。
點(diǎn)擊 Test Connection 可以測試鏈接是否成功。
創(chuàng)建 Kylin 數(shù)據(jù)源
測試連接
查詢 Kylin 表單
連接成功后頁面最下會展示這個 Kylin 項目內(nèi)所有的表。
1. 點(diǎn)擊 Source —> Tables,添加 Table,此處需要手動輸入需要添加的表名。
2. 在所有列表中選定相應(yīng)的表,就可以開始查詢之旅啦。
使用 SQL Lab 查詢 Apache Kylin 多表
熟悉 Kylin 的讀者都知道,Kylin Cube 通常都是以多表關(guān)聯(lián)建模為基礎(chǔ)生成的,因此分析 Kylin Cube 的數(shù)據(jù)時,使用多表進(jìn)行查詢對于 Kylin 來說是非常常見的場景。在使用 Superset 分析 Kylin 數(shù)據(jù)時,我們可以使用 Superset 中的 SQL Lab 功能來查詢多表,并對其進(jìn)行可視化分析。
在這里我們以一個可以擊中 Kylin 中的 sample cube ‘kylin_sales_cube’ 的查詢?yōu)槔?/p>
查詢返回后點(diǎn)擊可視化按鍵即可針對當(dāng)前查詢進(jìn)行可視化分析。
你可以復(fù)制下面的完整查詢來體驗 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
根據(jù)很多 Apache Kylin 用戶在對接可視化及報表分析前端時,所提出的一些常見需求,我們對S uperset 的相應(yīng)功能也做了一些測試,可以說企業(yè)對于報表分析及可視化展現(xiàn)所需要的絕大部分功能,Superset 都已經(jīng)可以提供了。
排序
Superset 支持使用任意數(shù)據(jù)源上定義的度量進(jìn)行排序,不論這個度量是否在圖表上。
過濾功能
在 Superset 中有多種過濾功能都可以使用在對 Kylin 的查詢中。
1. 日期過濾
在 Superset 中你可以對定義為時間列的維度進(jìn)行日期和時間的過濾。
2. 維度過濾
對于其他非時間維度,Superset 也提供了維度的篩選器,支持 SQL 中的 in,not in,等于,不等于,大于等于,小于等于,小于,大于,like 等多種過濾方式。
3. 報表內(nèi)搜索
你可以在報表返回后使用搜索框功能對數(shù)據(jù)進(jìn)行篩選。
4. 度量過濾
對于度量 Superset 支持用戶直接寫入 SQL 的having 表達(dá)式。
5. 聯(lián)動過濾
使用 Superset 中提供的過濾框可視化組件,可以實(shí)現(xiàn)一個過濾器聯(lián)動過濾多個可視化圖形的效果。
如下圖,過濾框組件可以聯(lián)動控制儀表盤上的所有可視化圖形。
6. Top N
你可以通過對數(shù)據(jù)進(jìn)行排序和設(shè)置返回行數(shù)限制來實(shí)現(xiàn)展示 Top 10/Bottom 10 等功能。
7. 分頁
在返回的數(shù)據(jù)量較大時,Superset 支持設(shè)置每頁數(shù)據(jù)行數(shù)實(shí)現(xiàn)數(shù)據(jù)的分頁。
8. 多種可視化
Superset 提供多樣的可視化圖表選擇,這里僅以世界地圖和氣泡圖為例作為展示。
9. 其它功能
另外 Superset 還支持?jǐn)?shù)據(jù)導(dǎo)出 CSV,報表分享,查看報表 SQL 等功能。
10. 指紋支持
最重要的是,Superset 由于社區(qū)的貢獻(xiàn)已提供了中文版本!
Superset 使用了 Flask 的翻譯擴(kuò)展工具?Flask-Babel,使用了這個擴(kuò)展包后,每個對應(yīng)的語言版本只需要在翻譯文件中將對應(yīng)的 Superset 文字翻譯成中文即可,這使得 Superset 社區(qū)的中文用戶可以很容易的貢獻(xiàn)翻譯內(nèi)容。
總結(jié)
多個開源項目的結(jié)合往往能產(chǎn)生1+1>2的效果,Kylin 專注于 OLAP 計算引擎,Superset 專注于數(shù)據(jù)可視化展現(xiàn). 分析師手中的雙劍合璧實(shí)現(xiàn)交互式分析,讓企業(yè)使用大數(shù)據(jù)技術(shù)顯著提升生產(chǎn)力。
參考
【1】Apache Kylin