使用 DolphinScheduler 排程 Kylin 構建

語言: CN / TW / HK

Apache Kylin 上游通常有複雜的資料 ETL 過程,如 Hive 入庫、資料清洗等;下游有報表重新整理,郵件分發等。整合 Apache DolphinScheduler 後,Kylin 可以方便地將大資料平臺各元件串聯起來,讓各個任務通過 DAG 統一排程。

01

背景

Apache Kylin 是一個支援海量大資料的線上分析引擎,需要離線或流式地從 Apache Hive、Apache Kafka 載入資料。通常當上遊資料準備好以後,使用者需要使用 Kylin 的 Web 介面或 API 觸發以生成資料載入的任務。為了讓整個工作流自動化起來,通常要結合一些任務排程平臺,如 Oozie,Linux crontab 等。本文將介紹如何使用 Apache DolphinScheduler 這個新的開源平臺跟 Kylin 進行整合完成資料構建。

02

什麼是 DolphinScheduler

Apache DolphinScheduler(incubating)(簡稱 DS) 是一個 Apache 孵化器專案,是由國內企業易觀開源的大資料專案,是一個面向大資料應用的分散式工作流任務排程系統,之前叫 EasyScheduler。目前,DS 在國內已經有一定規模的使用者基礎,包括美團 、平安、雪球等。

官網:http://dolphinscheduler.apache.org/

這裡我們引用一下 DS 剛開源時的介紹 [1]:相信做過資料處理的夥伴們對開源的排程系統如 Oozie、Azkaban、Airflow 應該都不陌生,在使用這些排程系統中可能會有這樣的體驗:比如配置工作流任務不能視覺化、任務的執行狀態不能實時線上檢視、 任務執行時不能暫停、不能支援引數傳遞、不能補數、不能多租戶使用、排程系統不高可用等等問題所煩擾過。Easy Scheduler 正是在這種背景下應運而生,其目標就是為使排程更加 easy,更可以從其中文名“易排程”看出我們的初衷。

下圖是一個跟 Azkaban、Airflow 的多方面對比:

從這個圖上可以看出,DS 設計之初就考慮了高可用、多租戶、視覺化等高階功能,也支援擴充套件任務型別等,相比於其它工具來說,更適合企業內的複雜場景,視覺化的操作介面也非常適合作為平臺交給各部門自助使用(注:Airflow 目前也有多租戶的支援)。

03

DS 的安裝

為了驗證 DS 的功能,我們決定先在一個單機上進行安裝。參考文件後,發現它的安裝配置步驟稍多,於是先嚐試 Docker 安裝;可惜的是,它的 Dockerfile 跟當前程式碼有一點不匹配,加上國內的網路條件,Docker build 較慢屢次失敗,於是就放棄了,嘗試單機用二進位制包安裝。

從官網 [2] 下載 1.2.0 版本的安裝包,分前端和後端兩個包;前端是一些靜態檔案,不到 2MB;後端是主程式,較大 127MB;前後端需要分別安裝和配置。(據瞭解從 1.2.1 後,前後端將不再分離。)

參考前端安裝文件 [3],將資源放到某個目錄,然後安裝和配置 Nginx,讓其 8888 埠的靜態資源從 DS 的前端目錄獲取,如果是 API 的呼叫,轉給後端服務 12345 埠;瞭解 Nginx 配置的話這塊不難。小注意一下,它的安裝指令碼 install-dolphinscheduler-ui.sh 會自動安裝 Nginx,如果你的系統中已經有 Nginx 服務的話,需要手動修改指令碼以避免重新安裝。

後端的安裝相對比較複雜一些。首先你需要準備前置條件:

1.  Linux 伺服器一臺,CentOS 6/7 或 Ubuntu;

2. 建立一個 DolphinScheduler 的 Linux 賬戶,有 sudo 許可權,且開啟免密碼登入;因為要切換不同租戶,所以單機安裝也需要這個賬戶;

3. MySQL 5.5 或以上;起初我的 MySQL 版本較低(5.1),遇到 DB 初始化指令碼失敗的問題,切換高版本 MySQL 後解決;(注:目前 MySQL 8 也不支援);

4.  Zookeeper,用於協調多個節點的狀態。

安裝的時候,需要仔細檢視它的安裝文件 [4];文件中介紹了多節點的自動部署(為有自動化一鍵安裝指令碼點贊:+1:),但沒有介紹單節點的手動部署。我先用了它的自動部署指令碼 install.sh,發現略有點複雜,在 DS 開發者的指導下改用手動部署。下面是一些注意事項:

1.  安裝和啟動服務的時候,切換到 dolphinscheduler使用者,建議不要用 root;使用 root 會讓一些新建立的目錄權主是 root,其它使用者不可訪問;

2.  安裝目錄不要放到 /root 等高許可權目錄,最好放到 /opt 或 dolphinscheduler 的 home 目錄下;

3. MySQL JDBC 連線的配置,除了在 conf/application-dao.properties 以外,還需要在 conf/quartz.properties 也裡配置一下;

4. DS 的安裝目錄,需要顯式地在 conf/common/common.properties 裡配置一下,預設的安裝目錄 /data1_1T/dolphinscheduler 很可能不是你的安裝路徑;

5. 在 conf/config/run_config.conf 中配置各個節點的機器名;如果單機的話,配置本機的機器名;

6.  在 conf/zookeeper.properties 中配置 zk 地址;

7.  啟動使用 scripts/start-all.sh 和 scripts/stop-all.sh  來啟動和停止;如果不正常,檢查在 logs 目錄下的日誌;

8.  確保 Nginx 之前已經正常啟動。

04

DS 建立專案和程序

如果一切正常的話,瀏覽器開啟  http://<host_name>:8888  就會出現 DS 的登入介面,初始使用者/密碼為:admin/dolphinscheduler123。

按照使用操作手冊,先建立專案,再建立一個租戶(tenant);租戶就是執行任務的 Linux 使用者。

建立租戶後,還要將 DS 的使用者跟租戶進行繫結,預設的 admin 使用者初始是沒有租戶的,所以需要進行繫結後才可以執行任務,切記;

在這之後,你就可以進入專案,建立程序(process)了,DS 提供了視覺化的介面,讓你可以圖形化拖拽地方式定義工作流 DAG:

這裡看到,DS 內建了若干種任務,例如 Spark, Flink,MapReduce,Shell, HTTP,Python 等,基本足夠普通排程需求了。

05

DS 觸發 Kylin 構建任務

我們的測試場景是 Kylin 的流式構建,需要每五分鐘觸發一次任務;Kylin 提供 Rest API 供外部觸發,但本身不提供排程器;通常使用者使用外部排程器或 Linux crontab 等服務來執行;使用 Linux crontab 最簡單,但是難以監控和修改,因此一些使用者會覺得麻煩。所以我們可以整合 DS 和 Kylin 做到一站式排程和監控。這裡觸發Kylin的構建任務,可以用 shell(如 curl)命令,也可以用 HTTP(post、put 等)的方式進行;這裡我選擇用 shell 因為它非常簡單,在輸入之前,先確保這個 shell 命令是無誤的,手動在 Linux 命令列中執行驗證。

隨後對這個程序指定定時器(cron),語法基本上跟 Linux crontab 相同,使用者還可以指定生效範圍,通知策略等:

06

執行

之後分別上線這個定時器,以及這個程序;過一會兒我們就會在平臺上看到執行的任務:

執行的詳細日誌也是可以直接線上檢視:

Kylin 這邊,我們看到任務被正常觸發執行:

繼續一天,兩邊平臺都很穩定,180 多次排程都成功執行:

07

總結

DolphinScheduler 是一款功能強大的大資料排程平臺。一次配置好任務流,後續就可以靠 DS 自動定時排程了,任務成功或出錯都可以得到郵件通知。如果任務較多,可以水平新增更多節點以擴充套件資源。Kylin 上游通常有複雜的資料 ETL 過程,如 Hive 入庫,資料清洗等;下游有報表重新整理,郵件分發等;有了它可以方便地將大資料平臺各元件串聯起來,讓各個任務通過 DAG 統一排程。此次時間有限,沒有進一步測試 DS 的高階功能,後續如果社群基於外掛機制開發出 Kylin 的觸發器,對使用者會更加簡單易用。

在此也非常感謝 DolphinScheduler 社群的代立冬等小夥伴們,非常熱心地幫忙回答和解決問題!

參考資料:

[1]http://www.clickhouse.com.cn/topic/5cab67b369c415035e68d526

[2]http://dolphinscheduler.apache.org/en-us/docs/release/download.html

[3]http://dolphinscheduler.apache.org/en-us/docs/1.2.0/user_doc/frontend-deployment.html

[4]http://dolphinscheduler.apache.org/en-us/docs/1.2.0/user_doc/backend-deployment.html

[5]http://dolphinscheduler.apache.org/en-us/docs/1.2.0/user_doc/quick-start.html

往期案例與實踐

Kylin's Github Repo 傳送門

↓↓↓

http://github.com/apache/kylin

喜歡:heart:Kylin 的話,別忘了 Star :star2:一下喲~