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

dla_plus_dataworks

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

開通DLA

在開始之前我們要有一個 DLA 的賬號,目前 DLA 的新用戶都有50T的免費流量,可以放心試用。開通DLA成功後,你會獲得一個用戶名和密碼, 然後在控制檯登錄就可以使用:

控制檯1

或者如果你是極客,更偏愛命令行,你也可以使用普通的 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服務羣的客戶,可以通過工單聯繫我們。

DLA數據、庫、表準備

爲了演示如何在DataWorks上調度DLA的任務,我們後面會用到一些測試數據,這裏我們用著名的TPCH的測試數據集, 數據保存在OSS上面。

OSS數據集

通過MySQL命令行我們創建對應的庫、表:

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數據更詳細的信息可以參考:

在 DataWorks 上創建 DLA 任務

在開通了 DataWorks + DLA 的功能後,我們可以在DataWorks的數據開發IDE裏面創建DLA的任務了,如下圖:

dla_task_in_dataworks

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

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

before_create_datasource

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

dla_datasource_icon

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

dla_datasource_details

DataWorks爲了安全的考慮,對可以連接的服務進行了安全控制,因此我們需要把我們要連的DLA的地址+端口加到白名單裏面去,這個配置是在DataWorks工作空間的配置裏面:

click_on_namespace_config

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

security_config

這裏需要注意一下,工作空間配置只有工作空間管理員纔有權限。

做了這麼多之後,我們終於可以在編輯頁面看到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_ordersfinished_orders 成功運行之後再運行:

task_high_value_finished_orders_dep

任務發佈

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

submit_job

提交之後,我們在待發佈列表可以看到所有待發布的任務:

all_submited_jobs

選擇我們剛剛提交的兩個任務,我們就可以發佈了:

deploy

在發佈列表頁面可以查看我們剛剛的發佈是否成功:

deployed_package

發佈成功之後,我們就可以進入任務運維頁面查看我們的任務,進行各種運維操作了。

task_ops

總結

在這篇文章裏面,我帶大家一起體驗了一下如何用 DataWorks 來開發、調度DLA的任務,有了這個能力之後大家可以更方便地進行每天任務的開發、運維了。

Happy DLAing.

作者: xumingmingv
原文鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章