Data Lake Analytics: 使用DataWorks來調度DLA任務

圖片描述
DataWorks做爲阿里雲上廣受歡迎的大數據開發調度服務,最近加入了對於Data Lake Analytics的支持,意味着全部Data Lake Analytics的客戶能夠得到任務開發、任務依賴關係管理、任務調度、任務運維等等全方位強大的能力,今天就給你們介紹一下如何使用DataWorks來調度DLA的腳本任務。mysql

開通DLA
在開始以前咱們要有一個 DLA 的帳號,目前 DLA 的新用戶都有50T的免費流量,能夠放心試用。開通DLA成功後,你會得到一個用戶名和密碼, 而後在控制檯登陸就可使用:sql

圖片描述

或者若是你是極客,更偏心命令行,你也可使用普通的 MySQL 客戶端就能夠鏈接 DLA 了:安全

mysql -hservice.cn-region.datalakeanalytics.aliyuncs.com運維

-P10000 
  -u<your-user-name> 
  -p<your-password>

在這篇文章裏面,我會使用 MySQL 命令行給你們演示 DLA 的功能。測試

申請試用 DataWorks + DLA
開通DLA服務以後,您還須要開通DataWorks的服務,目前DataWorks還在公測階段,放心使用。大數據

而後您能夠在您對應的DLA服務羣裏面找咱們任何一位同窗開通一下DLA + DataWorks的試用資格(目前這個功能還處於邀請試用的階段,沒有徹底放開)。阿里雲

若是目前尚未專門DLA服務羣的客戶,能夠經過工單聯繫咱們。spa

DLA數據、庫、表準備
爲了演示如何在DataWorks上調度DLA的任務,咱們後面會用到一些測試數據,這裏咱們用著名的TPCH的測試數據集, 數據保存在OSS上面。
圖片描述命令行

經過MySQL命令行咱們建立對應的庫、表:3d

CREATE SCHEMA dataworks_demo with DBPROPERTIES(
CATALOG = 'oss',
LOCATION = 'oss://test-bucket/datasets/'
);

use dataworks_demo;
CREATE EXTERNAL TABLE IF NOT EXISTS orders (

O_ORDERKEY INT, 
O_CUSTKEY INT, 
O_ORDERSTATUS STRING, 
O_TOTALPRICE DOUBLE, 
O_ORDERDATE DATE, 
O_ORDERPRIORITY STRING, 
O_CLERK STRING, 
O_SHIPPRIORITY INT, 
O_COMMENT STRING

)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'oss://test-bucket/datasets/tpch/1x/text_string/orders_text/';

-- 結果表 finished_orders
CREATE EXTERNAL TABLE IF NOT EXISTS finished_orders (

O_ORDERKEY INT,  
O_TOTALPRICE DOUBLE

)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'oss://test-bucket/datasets/dataworks_demo/finished_orders/';

-- 結果表 high_value_finished_orders
CREATE EXTERNAL TABLE IF NOT EXISTS high_value_finished_orders (

O_ORDERKEY INT, 
O_TOTALPRICE DOUBLE

)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'oss://test-bucket/datasets/dataworks_demo/high_value_finished_orders/';
任務調度其中一個重要的功能是任務之間的依賴,爲了演示這個功能,咱們這裏會在DataWorks裏面建立兩個DLA任務, 咱們的表、任務之間的關係以下圖:
圖片描述

任務一: 咱們從orders表清洗出已經完成的訂單: o_orderstatus = 'F' , 並寫入 finished_orders 表
任務二: 再從 finished_orders 表裏面找出總價大於10000的訂單: o_totalprice > 10000, 並寫入 high_value_finished_orders 表
關於如何使用DLA分析OSS數據更詳細的信息能夠參考:

Data Lake Analytics + OSS數據文件格式處理大全: https://yq.aliyun.com/article...
使用Data Lake Analytics + OSS分析CSV格式的TPC-H數據集: https://yq.aliyun.com/article...
在 DataWorks 上建立 DLA 任務
在開通了 DataWorks + DLA 的功能後,咱們能夠在DataWorks的數據開發IDE裏面建立DLA的任務了,以下圖:

圖片描述

咱們把第一個任務命名爲: finished_orders , 點擊肯定會進入一個SQL編輯的頁面,要寫DLA SQL必定要告訴DataWorks咱們寫的SQL運行在哪一個DLA的服務上,這個在DataWorks裏面被包裝成了"數據源"的概念:

DataWorks的規範是任務的名稱跟任務的輸出表的名稱保持一致。

圖片描述

剛進來的時候沒有數據源,點擊新建數據源:

圖片描述

填寫必要的信息點擊肯定完成。

圖片描述

DataWorks爲了安全的考慮,對能夠鏈接的服務進行了安全控制,所以咱們須要把咱們要連的DLA的地址+端口加到白名單裏面去,這個配置是在DataWorks工做空間的配置裏面:

圖片描述

具體配置以下(須要換成你實際的IP+端口):

圖片描述
這裏須要注意一下,工做空間配置只有工做空間管理員纔有權限。

作了這麼多以後,咱們終於能夠在編輯頁面看到DLA的數據源了,下面咱們在 finished_orders 的任務裏面填入以下SQL, 並點擊執行:

use dataworks_demo;
insert into finished_orders
select O_ORDERKEY, O_TOTALPRICE
from orders
where O_ORDERSTATUS = 'F';
以下圖:

task_finished_orders

重複上述步驟,咱們建立第二個任務: high_value_finished_orders:

use dataworks_demo;
insert into high_value_finished_orders
select * from finished_orders
where O_TOTALPRICE > 10000;
配置任務依賴
單個任務單次運行沒什麼太大意思,任務調度的核心在於多個任務按照指定的依賴關係在指定的時間進行運行,下面咱們讓: task_finished_orders 在天天半夜2點開始運行:

task_finished_orders_dep

high_value_finished_orders 在 finished_orders 成功運行以後再運行:

task_high_value_finished_orders_dep

任務發佈
任務配置好以後,就能夠進行任務的發佈、運維了。任務要發佈首先必須提交:

submit_job

提交以後,咱們在待發佈列表能夠看到全部待發布的任務:

all_submited_jobs

選擇咱們剛剛提交的兩個任務,咱們就能夠發佈了:

deploy

在發佈列表頁面能夠查看咱們剛剛的發佈是否成功:

deployed_package

發佈成功以後,咱們就能夠進入任務運維頁面查看咱們的任務,進行各類運維操做了。

task_ops

總結在這篇文章裏面,我帶你們一塊兒體驗了一下如何用 DataWorks 來開發、調度DLA的任務,有了這個能力以後你們能夠更方便地進行天天任務的開發、運維了。