做者:趙勇傑 何京珂
編輯:Sammihtml
在大數據時代,使用傳統數據處理方式已經沒法知足企業大規模數據的增加,而人工智能和 IoT 時代的到來讓處理超大規模數據,解讀超大規模數據的需求更加迫在眉睫。 分析和理解超大規模數據集就成爲這些企業要解決的當務之急。前端
現代企業使用聯機分析處理 ( OLAP ) 技術來分析數據,生成報表,從而幫助業務人員制訂商務決策。隨着大數據時代的來臨和 Hadoop 技術的興起,基於大數據平臺的 OLAP 分析又給擁抱大數據的企業帶來新的挑戰。python
Apache Kylin[1] 做爲 Apache 基金會首個開源的 OLAP 分析引擎,已在全球獲得了普遍的應用。Kylin採起預計算技術,能夠爲分析師在超大規模數據集上(PB/TB 級)提供亞秒級查詢能力。Kylin 專一於 OLAP 計算引擎,提供很精妙的技術設計: Kylin 的數據源除了能夠來自於 Hadoop 上的 Hive 數倉,還能夠接收 Kafka 傳遞而來的流式數據; Cube 構建引擎能夠用 MapReduce,一些構建步驟爲了性能考量還能夠選擇使用 Spark;構建好的 Cube 默認存儲在 HBase 中; 查詢則採用業界最廣泛使用的 ANSI-SQL 查詢,分析師原有的 SQL 查詢、報表、分析等能夠輕鬆遷移到 Kylin。react
查詢接口上 Kylin 已經作到 ODBC/JDBC/RESTful 方式,這給第三方集成提供了巨大想像空間。git
這裏請讀者留意,Kylin 設計精妙是指,Kylin 鬆耦合的設計徹底可讓數據源,計算引擎,Cube 存儲根據您本身使用場景而來作個性化定製——選擇權在您手裏。github
• 高性能高併發: 支持TB到PB的數據規模上的亞秒級查詢。sql
• 易於使用: 提供易用的 ODBC/JDBC/RESTful API 供使用和與第三方工具集成。數據庫
• 經濟性: 一次構建可以使得查詢提速千百倍;查詢越多越經濟。apache
分析師期待能夠快速的從不一樣的角度分析數據的狀況,Kylin 做爲 OLAP 引擎能夠實現亞秒級查詢響應,很好地解決了分析師面臨的一個查詢等待個把小時的窘境;有了數據處理的引擎,企業在賦能其數據科學團隊,工程師和業務分析師進行基於數據的業務決策時,在前端仍須要的豐富的可視化圖形,排序過濾等基礎報表需求,對於高級分析師,使用其熟悉的 SQL 對數據進行再次加工處理也是很是有必要的。瀏覽器
針對以上問題,一樣做爲 Apache 軟件基金會正在孵化項目的 Superset 便成爲不二之選.
Superset 是一個數據探索和可視化平臺,設計用來提供直觀的,可視化的,交互式的分析體驗。
Superset 提供了兩種分析數據源的方式:
用戶能夠以單表形式直接查詢多種數據源,包括 Presto、Hive、Impala、SparkSQL、MySQL、Postgres、Oracle、Redshift、SQL Server、Druid 等。本文後續內容也會詳細介紹Superset如何支持Kylin數據源。
一個 SQL 的 IDE 供高級分析師使用 SQL 查詢定義所須要分析的數據集,這種方法使用戶在一個查詢中實現用 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 共同的產品目標,使用 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)
pip install superset
fabmanager create-admin --app superset --username admin --password admin --firstname admin --lastname admin --email admin@fab.org複製代碼
superset db upgrade複製代碼
superset init複製代碼
superset load_examples複製代碼
4. 安裝 kylinpy
pip install kylinpy複製代碼
5. 安裝驗證,若是一切順利,Superset daemon應該能夠跑起來了
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,以下配置,注意以下幾點:
kylin://<username>:<password>@<hostname>:<port>/<project name>複製代碼
建立 Kylin 數據源
測試鏈接
鏈接成功後頁面最下會展現這個 Kylin 項目內全部的表。
1. 點擊 Source —> Tables,添加 Table,此處須要手動輸入須要添加的表名。
2. 在全部列表中選定相應的表,就能夠開始查詢之旅啦。
熟悉 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