玩轉DB里的數據—阿里雲DMS任務編排簡介和實操

數據庫技術達摩院 發佈 2020-06-23T12:13:23+00:00

資料庫是企業IT系統里的重要基礎設施,裡面存儲了大量有價值的數據資產,如:交易數據、客戶數據、訂單數據,等等。

作者:同叔,阿里雲資料庫技術專家

1、任務編排介紹

資料庫是企業IT系統里的重要基礎設施,裡面存儲了大量有價值的數據資產,如:交易數據、客戶數據、訂單數據,等等。其實,資料庫在企業里一直扮演著一個數據生產者(Producer)的角色,日積月累這些數據會形成一個巨大的寶藏。但是,隨著資料庫中數據量的增長和數據形態的多樣化,如何對數據進行存儲、遷移和加工,並挖掘出其中的價值,是許多企業面臨的難題。

為解決上述問題,阿里雲DMS(Data Management Service)「連結」產品近期推出了一個新功能——任務編排。無論您的資料庫部署在何處(阿里雲/本地IDC/其他雲廠商等),是何種類型(OLTP交易型資料庫/OLAP分析型資料庫),DMS任務編排都能夠觸達您的資料庫,讓您輕鬆地對資料庫中的數據進行流轉、加工和變換。DMS任務編排提供的主要功能和特性包括:

  • 豐富的數據遷移能力:可實現資料庫與資料庫之間(如:OLTP在線庫與OLAP離線庫)、資料庫與彈性存儲之間(如:MySQL與OSS)的數據自由流動;
  • 豐富的數據加工手段:單庫SQL任務、跨庫SQL任務、數據遷移任務、Spark任務、數據備份與恢復服務(建設中);不僅可以通過SQL語句對單個資料庫或多個資料庫里的數據進行加工,還可編寫Spark任務進行複雜的數據處理和AI分析;
  • 任務流和定時調度:通過可視化的方式將多個任務節點進行編排形成任務流,靈活按需設置多種不同粒度間隔的定時調度;
  • 按模板一鍵創建任務流:為不同的場景(如:歷史數據歸檔到OSS)內置了任務流模板,用戶可一鍵生成模板任務流,通過簡單的配置即可應用於生產;
  • 牢靠的數據安全保障:依託DMS強大的數據安全能力,任務編排會對用戶權限進行嚴格檢查,僅限有權限的用戶才能執行相應的任務。

了解了DMS任務編排的功能,你一定開始好奇用DMS任務編排能做什麼?下圖展示了DMS任務編排支持的四類主要場景:

場景1:數據歸檔

目前比較流行的有兩類資料庫:傳統單機版資料庫(如:MySQL)和雲原生資料庫(如:阿里雲PolarDB和AnalyticDB for MySQL)。前者的存儲空間是有限的,後者雖然可以對存儲擴容,但也要收取較高的費用。那麼,當資料庫中的數據量持續增長時,該如何降低存儲成本呢?許多用戶希望能將資料庫中的冷數據/歷史數據轉儲到可靠又低價的存儲上,如:阿里雲對象存儲(OSS)。現在通過DMS任務編排,可輕鬆實現資料庫數據周期歸檔(如:每日/每周)到OSS的需求。同時,DMS還有好地對接了阿里雲數據湖分析產品(DLA),用戶可在DMS里方便地訪問DLA,對歸檔到OSS上的數據進行即席查詢和分析。


場景2:數據集成

企業的數據可能分散在不同的數據源中(如:MySQL、SQL Server),也可能分散在不同的地域(例如:北京、杭州、深圳)。導致數據分散的原因有很多,比如:業務的垂直劃分、微服務、應用的本地部署等等。數據的分散不可避免,但同時許多企業又有數據集成的需求,需要將各地的數據匯聚到一起進行全局分析(如:匯總和AI分析),典型的場景就是OLTP交易庫的數據同步至OLAP分析庫做離線分析。通過DMS任務編排,可以輕鬆實現這一需求。首先,DMS打通了各種網絡環境(如:阿里雲VPC/經典網絡,本地IDC網絡),可連接至各個地域的數據源。其次,DMS支持異構數據源間的數據集成,如:RDS MySQL到AnalyticDB。此外,通過DMS任務編排,還能滿足各種集成方式的需求,如:單次全量集成、周期性增量集成。


場景3:數據加工

做完數據集成之後,用戶通常還要對匯聚的原始數據進行加工、清洗和分析,才能挖掘出其中的價值,例如:每日統計產品的用戶數(UV),按周產生報表數據。DMS任務編排提供了任務流和定時調度能力,通過任務流可以將複雜加工任務進行拆解和編排,然後配置調度信息。DMS支持單次調度和周期調度(如:按日、周、月),此外還支持多類型的加工任務,用戶可使用SQL進行數據加工,也可編寫Spark程序進行複雜的數據處理和AI分析。通過豐富的調度配置和任務類型,DMS任務編排能滿足各種簡單/複雜場景的數據加工需求。


場景4:定時操作

在日常資料庫的使用中,有許多DML/DDL/DCL操作需要定期執行,如:每周清理歷史數據(DELETE)防止表過大、每日更新統計信息(ANALYZE TABLE)以獲得更好的查詢優化結果。有些資料庫在內核層面已經提供了事件調度功能,如:MySQL Event,但是使用特殊的語法創建Event和維護Event都有一定的成本。DMS任務編排的調度功能提供了可視化的方式輕鬆創建定時任務,並且不依賴資料庫引擎上的能力,因此更加簡易靈活,適用範圍更廣。


2、任務編排實操 — DB數據周期歸檔

介紹完DMS任務編排的功能和使用場景,下面將以數據歸檔場景為例,介紹如何通過DMS任務編排和阿里雲DLA服務將RDS MySQL數據周期地歸檔至OSS上。具體的實操步驟還可查閱DMS的使用文檔。

2.1 背景和需求

用戶的RDS MySQL業務庫中某張表(如:交易記錄、登錄/操作日誌)的數據持續增長,占用了大量的存儲空間,甚至影響到了資料庫性能。同時,這部分數據又是有價值的,比如:用於審計、報表和統計分析,不能隨意刪除。為解決這個問題,用戶有三個核心的需求:

  • 降低MySQL業務庫的存儲壓力;
  • 對歷史業務數據做增量歸檔;
  • 對歸檔數據做分區,可按分區過濾進行高效查詢。


為滿足這三個需求,我們選擇了阿里雲DLA服務,因為其同時打通了OSS和RDS MySQL,能夠對上面的數據進行遷移和即席分析。但是,DLA並不具備周期調度和增量數據遷移的能力,DMS任務編排正好可以與DLA互補,形成完整的解決方案滿足用戶需求。


在下面的實操中,我們假設用戶RDS MySQL中待歸檔的表為訂單表orders,其表結構如下(created_date欄位為訂單創建日期):

create table orders(
  order_id bigint,
  product_name varchar(32),
  price double,
  total_amount double,
  created_date date
);


2.2 前置條件

  1. 已購買阿里雲DLA服務,且DLA服務的區域(Region)和待歸檔的RDS MySQL區域一致,如:都是華東1(杭州)
  2. 已開通阿里雲OSS服務,且服務的區域與DLA、RDS MySQL一致
  3. 已購買阿里雲DMS服務
  4. DLA實例已錄入DMS中(請參考DMS實例錄入)

各產品的購買要求和用途:



2.3 配置任務流

下面介紹如何在DMS中操作實現RDS MySQL數據周期歸檔,主要包含5個步驟:

步驟1:創建DLA歸檔庫

若要將數據歸檔至DLA上,首先要在DLA中創建一個用於歸檔的schema,用於存放歸檔表。在DMS首頁的頂部菜單中,找到SQLConsole單庫查詢,並打開查詢窗口,然後輸入如下SQL語句並執行:

CREATE DATABASE demo_schema
WITH DBPROPERTIES (
    catalog = 'oss',
    location = 'oss://xxxxxx/dla_demo/'
)


步驟2:創建任務流

在DMS首頁的頂部菜單中,選擇數據工廠 -> 任務編排,進入任務編排的首頁。在首頁點擊「新建任務流」,或者點擊左側tab進入開發空間,也可以快速地找到新建任務流的入口。在新建任務流的窗口,我們將任務流名稱設為:rds_data_to_oss。


步驟3:配置任務節點

在任務流rds_data_to_oss中,依次新建三個DLA-SQL類型的任務節點:

  1. 創建RDS同步Schema:在DLA中創建Scheme映射到RDS
  2. 創建OSS備份表:在DLA中建立OSS備份表,用於存儲歷史數據
  3. 備份數據:實現RDS MySQL前一天數據的備份。


節點創建完以後,可在節點間添加連線,對節點的執行順序進行編排,產生完整任務流。

下面對每個節點的內容進行設置:

節點1:創建RDS同步Schema

要讓DLA順利訪問RDS MySQL的數據,需要在DLA中為RDS MySQL創建一個Schema,取名: dla_mysql_rds。我們將以SQL的方式來創建Schema。首先,點擊第一個任務節點,在右側的內容設置Tab頁中,輸入如下SQL語句(其中部分參數需替換為RDS上的真實信息):

CREATE SCHEMA IF NOT EXISTS dla_mysql_rds WITH DBPROPERTIES (
   CATALOG = 'mysql', 
   LOCATION = 'jdbc:mysql://xxxxxx.rds.aliyuncs.com:3306/dmstest',
   USER = 'dmstest',
   PASSWORD = 'xxxxxxxxx',
   INSTANCE_ID = 'xxxxxx'
 );
 MSCK REPAIR DATABASE dla_mysql_rds;


此外,為了讓DLA順利訪問RDS MySQL,還需要在RDS MySQL中添加DLA的白名單,即:將IP位址段100.104.0.0/16加入到RDS的白名單列表中。RDS白名單的配置方法可參考這個文檔。

節點2:創建OSS備份表

我們需要在DLA中創建OSS備份表(oss_orders),首先將節點的目標資料庫設為demo_schema,然後將節點內容設置為如下的SQL語句。oss_orders表的結構與RDS中的orders表完全一致,不同的是oss_orders為分區表,按照年/月/日(y/m/d)分區:

CREATE EXTERNAL TABLE oss_orders (
    order_id bigint,
    product_name varchar(32),
    price double,
    total_amount double,
    created_date date)
PARTITIONED BY (y string, m string, d string)
STORED AS TEXTFILE
LOCATION 'oss://xxxxxx/dla_demo/';

其中,LOCATION參數需要填寫一個OSS路徑,即:歸檔數據儲存的OSS地址。


節點3:數據備份

該數據備份實現了將RDS MySQL數據備份至OSS的功能。配置節點需要選擇目標資料庫為DLA的demo_schema,設置時間變量,並且編寫備份SQL語句。


配置時間變量

配置三個時間變量,它們分別是:

  • year:當前日期前一天的年份(格式為yyyy)
  • month:當前日期前一天的月份(格式為MM)
  • day:當前日期前一天的日(格式為dd)


註:關於DMS任務編排中變量的配置和使用,請參閱該文檔。bizdate為DMS任務編排里的系統參數,對應到任務運行時間的前一天,其他自定義變量也會隨著任務執行時間的變化而自動更新。


設置數據備份SQL語句

/* 創建臨時表 */
CREATE EXTERNAL TABLE oss_orders_tmp (
    order_id bigint,
    product_name varchar(32),
    price double,
    total_amount double,
    created_date date) 
STORED AS TEXTFILE 
LOCATION 'oss://xxxxxx/dla_demo/y=${year}/m=${month}/d=${day}' 
TBLPROPERTIES('auto.create.location'= 'true');

/* 備份日數據 */
insert into oss_orders_tmp
SELECT * FROM dla_mysql_rds.orders 
where created_date = '${bizdate}';
      
/* 更新備份表分區信息以及刪除臨時表 */
msck repair table oss_orders;
drop table oss_orders_tmp;

上面的SQL腳本本質上包括3個步驟來實現數據備份:

  1. DLA OSS中創建臨時表:臨時表oss_orders_tmp映射位置為oss_orders所在OSS之下的年/月/日目錄中,臨時表的數據會自動成為oss_orders一個分區;
  2. 備份日數據:直接使用insert-select SQL語句從RDS MySQL中的orders表中讀取數據(對應到DLA中的dla_mysql_rds.orders),寫入OSS中的臨時表;
  3. 更新分區信息以及刪除臨時表:更新oss_orders元數據信息,然後刪除臨時表oss_orders_tmp。


這裡的巧妙之處在於,合理地利用了DMS任務編排里變量的功能,以及DLA OSS表的分區功能。臨時表對應的OSS路徑正好是全局備份表的一個分區路徑。隨著任務每日執行,變量的值會自動更新,由此產生新的OSS目錄和分區,RDS MySQL的增量數據也自動地歸檔至新分區下。例如:RDS中created_date為2020-06-01的數據,將歸檔至oss://xxxxxx/dla_demo/y=2020/m=06/d=01的路徑下。


2.4 配置任務流調度

最後,再介紹一下如何對任務流的調度進行配置。點擊任務流空白處,調出右側的調度配置頁面。首先將該任務流的調度進行開啟,然後將運行時間設為RDS MySQL的業務低峰期(如:凌晨5點),並將調度周期設為「日」。這樣設置以後,該任務流將在每天的5點鐘定期執行,無需人工干預。如果要查看任務流的執行歷史,可點擊左側的運維中心,其中還會展示每一次執行的時間和日誌

3 快速任務流構建 — 任務流模板

為了節省用戶手動創建和配置任務流的時間,DMS任務編排還提供了多種模板。這些模板通常包含了內置好的任務節點和SQL內容;它們從具體的場景出發,經過悉心的設計來解決實際問題,並且來源於DMS用戶的真實案例,例如:第二節介紹的RDS數據周期歸檔OSS場景就來自於某知名跨國汽車廠商。

通過模板,用戶可一鍵創建任務流,然後經過簡單的配置,如:設置節點的目標資料庫和SQL中的部分參數,即可生成可運行的任務流。目前,我們已經上線了多個任務流模板,歡迎訪問DMS任務編排的首頁進行查看,我們也將持續補充模板,讓任務編排的使用更加便捷。

4 總結

DMS是阿里雲用戶非常喜愛的一款資料庫工具產品,能幫助用戶打通各種網絡環境,對資料庫進行管理和操作。除了常規的資料庫增刪改查和DDL操作,越來越多的用戶需要對資料庫中的數據進行歸檔、遷移、備份和加工。為了滿足這些需求,DMS推出了任務編排功能,它打通了資料庫與其他系統/存儲之間的通道,讓資料庫不再成為數據孤島。此外,DMS任務編排還提供了豐富的任務類型,以及任務流和定時調度能力,可以幫助用戶輕鬆地對資料庫中的數據進行清洗加工,把數據轉變成商業智能。

DMS任務編排雖然在公共雲上發布不久,但已經積累了來自各個行業的眾多用戶,包括:網際網路、零售、支付、交通、汽車、美妝等等。如果您想了解更多DMS任務編排的詳細功能,歡迎登錄DMS的控制台首頁進行體驗,或者查看我們的產品文檔。

了解DMS詳情

數據管理-DMS數據管理-資料庫可視化-阿里雲

關鍵字: