作者:趙勇杰 何京珂
編輯: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)機分析處理 ( 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)濟性: 一次構(gòu)建可使得查詢提速千百倍;查詢越多越經(jīng)濟更哄。
分析師期待可以快速的從不同的角度分析數(shù)據(jù)的情況芋齿,Kylin 作為 OLAP 引擎可以實現(xiàn)亞秒級查詢響應(yīng),很好地解決了分析師面臨的一個查詢等待個把小時的窘境成翩;有了數(shù)據(jù)處理的引擎觅捆,企業(yè)在賦能其數(shù)據(jù)科學(xué)團隊,工程師和業(yè)務(wù)分析師進行基于數(shù)據(jù)的業(yè)務(wù)決策時麻敌,在前端仍需要的豐富的可視化圖形栅炒,排序過濾等基礎(chǔ)報表需求,對于高級分析師,使用其熟悉的 SQL 對數(shù)據(jù)進行再次加工處理也是非常有必要的赢赊。
針對以上問題乙漓,同樣作為 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ù)集萍膛,這種方法使用戶在一個查詢中實現(xiàn)用 Superset 查詢數(shù)據(jù)源的多表吭服,并立即對查詢進行可視化分析。
SUPERSET 的前世今生
Superset 起源于 2015 年初黑客馬拉松項目蝗罗,曾經(jīng)使用過 Caravel 和 Panoramix 作為項目名⊥ё兀現(xiàn)在主要維護小組是 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)一加工序列化后由前端渲染展示. 進而前端渲染出眾多富有表現(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 前端進行可視化分析想必是快到飛起,真可謂是強強聯(lián)合洋措。
Kyligence 數(shù)據(jù)科學(xué)小組開源了 kylinpy 項目完成了 Kylin 與 Superset 數(shù)據(jù)源的集成〖貌酰現(xiàn)在我們就來手把手教讀者實現(xiàn) Kylin 和 Superset 的集成,并實現(xiàn)交互式的可視化分析菠发。
準(zhǔn)備工作
1. 安裝 Apache Kylin
請參考?Apache Kylin installation guide
2. Apache Kylin 提供了樣例 Cube王滤,方便大家學(xué)習(xí)使用。Kylin 啟動成功后滓鸠,可以在 Kylin 安裝路徑下運行以下命令生成樣例數(shù)據(jù) Cube:
./${KYLIN_HOME}/bin/sample.sh
運行后雁乡,使用默認(rèn)的 Kylin 賬號 ADMIN / KYLIN 登陸界面,在 System 頁面點擊 Reload Metadata 即可看到樣例項目 Learn_kylin糜俗。
選擇樣例 Cube “Kylin_sales_cube”踱稍,點擊 Action -> Build。選擇日期不要晚于 2014-01-01 來進行全量構(gòu)建悠抹。
點擊前往 Monitor 頁面查看 Cube 構(gòu)建的進程珠月,知道100%完成,Cube 就可以進行查詢了楔敌。
前往 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旺韭,并初始化氛谜。
強烈建議使用虛擬環(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危虱。
點擊 Source —> Datasource,如下配置唐全,注意如下幾點:
SQLAlchemy URI 格式為:
kylin://:@:/
勾選 Expose in SQL Lab 后這個數(shù)據(jù)源便可以在 SQL Lab 中展示出來埃跷。
點擊 Test Connection 可以測試鏈接是否成功蕊玷。
創(chuàng)建 Kylin 數(shù)據(jù)源
測試連接
查詢 Kylin 表單
連接成功后頁面最下會展示這個 Kylin 項目內(nèi)所有的表。
1. 點擊 Source —> Tables弥雹,添加 Table垃帅,此處需要手動輸入需要添加的表名。
2. 在所有列表中選定相應(yīng)的表剪勿,就可以開始查詢之旅啦贸诚。
使用 SQL Lab 查詢 Apache Kylin 多表
熟悉 Kylin 的讀者都知道,Kylin Cube 通常都是以多表關(guān)聯(lián)建模為基礎(chǔ)生成的厕吉,因此分析 Kylin Cube 的數(shù)據(jù)時酱固,使用多表進行查詢對于 Kylin 來說是非常常見的場景。在使用 Superset 分析 Kylin 數(shù)據(jù)時赴涵,我們可以使用 Superset 中的 SQL Lab 功能來查詢多表媒怯,并對其進行可視化分析。
在這里我們以一個可以擊中 Kylin 中的 sample cube ‘kylin_sales_cube’ 的查詢?yōu)槔?/p>
查詢返回后點擊可視化按鍵即可針對當(dāng)前查詢進行可視化分析髓窜。
你可以復(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ù)源上定義的度量進行排序畅哑,不論這個度量是否在圖表上。
過濾功能
在 Superset 中有多種過濾功能都可以使用在對 Kylin 的查詢中水由。
1. 日期過濾
在 Superset 中你可以對定義為時間列的維度進行日期和時間的過濾荠呐。
2. 維度過濾
對于其他非時間維度,Superset 也提供了維度的篩選器砂客,支持 SQL 中的 in泥张,not in,等于鞠值,不等于媚创,大于等于,小于等于彤恶,小于筝野,大于晌姚,like 等多種過濾方式。
3. 報表內(nèi)搜索
你可以在報表返回后使用搜索框功能對數(shù)據(jù)進行篩選歇竟。
4. 度量過濾
對于度量 Superset 支持用戶直接寫入 SQL 的having 表達(dá)式挥唠。
5. 聯(lián)動過濾
使用 Superset 中提供的過濾框可視化組件,可以實現(xiàn)一個過濾器聯(lián)動過濾多個可視化圖形的效果焕议。
如下圖宝磨,過濾框組件可以聯(lián)動控制儀表盤上的所有可視化圖形。
6. Top N
你可以通過對數(shù)據(jù)進行排序和設(shè)置返回行數(shù)限制來實現(xiàn)展示 Top 10/Bottom 10 等功能盅安。
7. 分頁
在返回的數(shù)據(jù)量較大時唤锉,Superset 支持設(shè)置每頁數(shù)據(jù)行數(shù)實現(xiàn)數(shù)據(jù)的分頁。
8. 多種可視化
Superset 提供多樣的可視化圖表選擇别瞭,這里僅以世界地圖和氣泡圖為例作為展示窿祥。
9. 其它功能
另外 Superset 還支持?jǐn)?shù)據(jù)導(dǎo)出 CSV,報表分享蝙寨,查看報表 SQL 等功能晒衩。
10. 指紋支持
最重要的是,Superset 由于社區(qū)的貢獻(xiàn)已提供了中文版本墙歪!
Superset 使用了 Flask 的翻譯擴展工具?Flask-Babel听系,使用了這個擴展包后,每個對應(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). 分析師手中的雙劍合璧實現(xiàn)交互式分析浪漠,讓企業(yè)使用大數(shù)據(jù)技術(shù)顯著提升生產(chǎn)力。
參考
【1】Apache Kylin