給大數據分析師的一雙大禮: Apache Kylin和Superset

做者:趙勇傑 何京珂
編輯:Sammihtml

分析師的挑戰

在大數據時代,使用傳統數據處理方式已經沒法知足企業大規模數據的增加,而人工智能和 IoT 時代的到來讓處理超大規模數據,解讀超大規模數據的需求更加迫在眉睫。 分析和理解超大規模數據集就成爲這些企業要解決的當務之急。前端

一重禮:Apache Kylin 開源 OLAP on Hadoop引擎

現代企業使用聯機分析處理 ( 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 是一個數據探索和可視化平臺,設計用來提供直觀的,可視化的,交互式的分析體驗。

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://<username>:<password>@<hostname>:<port>/<project name>複製代碼
  • 勾選 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

相關文章
相關標籤/搜索