共計 3328 個字符,預計需要花費 9 分鐘才能閱讀完成。
Data Lake Analytics 中如何使用 DataWorks 來調度 DLA 任務,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
DataWorks 作為阿里云上廣受歡迎的大數據開發調度服務,最近加入了對于 Data Lake Analytics 的支持,意味著所有 Data Lake Analytics 的客戶可以獲得任務開發、任務依賴關系管理、任務調度、任務運維等等全方位強大的能力,今天就給大家介紹一下如何使用 DataWorks 來調度 DLA 的腳本任務。
開通 DLA
在開始之前我們要有一個 DLA 的賬號,目前 DLA 的新用戶都有 50T 的免費流量,可以放心試用。開通 DLA 成功后,你會獲得一個用戶名和密碼, 然后在控制臺登錄就可以使用:
或者如果你是極客,更偏愛命令行,你也可以使用普通的 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 上面。
通過 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 數據更詳細的信息可以參考:
Data Lake Analytics + OSS 數據文件格式處理大全: https://yq.aliyun.com/articles/623246
使用 Data Lake Analytics + OSS 分析 CSV 格式的 TPC- H 數據集: https://yq.aliyun.com/articles/623282
在 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
如下圖:
重復上述步驟,我們創建第二個任務: 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 點開始運行:
high_value_finished_orders 在 finished_orders 成功運行之后再運行:

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

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

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

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

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

看完上述內容,你們掌握 Data Lake Analytics 中如何使用 DataWorks 來調度 DLA 任務的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!