全部產品
Search
文件中心

:遷移服務(MMA 4.0)

更新時間:Nov 13, 2024

MaxCompute提供資料移轉工具MMA(MaxCompute Migration Assist)4.0版本,允許您將其他資料來源(如Hive、BigQuery等)的資料通過MMA遷移至MaxCompute。本文為您介紹如何使用MMA 4.0進行資料移轉。

功能介紹

MMA(MaxCompute Migration Assistant) 是一款用於向MaxCompute遷移資料的工具。目前支援的資料來源如下:

  • Hive

  • DataBricks

  • BigQuery

使用MMA向MaxCompute遷移資料的大致流程如下:

image

遷移原理image

  • 中繼資料遷移:

    1. MMA通過中繼資料API擷取資料來源的中繼資料,具體是通過使用BigQuery SDK、Hive Metastore SDK、DataBricks SDK來調用API的。

    2. MMA根據擷取到的中繼資料產生MaxCompute DDL語句,並在MaxCompute中執行DDL,完成中繼資料遷移。

  • 資料移轉:

    • 方式1:拉模式,MMA通過Spark作業指定要遷移的對象,Spark作業運行在MaxCompute上,從資料來源讀取資料,並將其寫入MaxCompute。對於不同的資料來源,Spark讀取資料的方式不同,具體如下:

      資料來源

      讀取資料方式

      Bigquery

      Read API

      Hive on AWS s3

      s3

      Hive on HDFS

      HDFS

    • 方式2:推模式,MMA向資料來源提交SQL、Spark作業,作業運行在資料來源端,將資料從資料來源讀取後寫入到MaxCompute,具體實現如下:

      資料來源

      讀取資料方式

      Hive

      運行UDTF,通過Tunnel將資料寫入MaxCompute。

      DataBricks

      運行DataBricks Spark,通過Storage API將資料寫入MaxCompute。

MMA名詞解釋

MMA架構圖如下:image

資料來源

要遷移的對象,例如Hive的一個或多個Database、 BigQuery的一個或多個Project、DataBricks的一個Catalog。不同的資料來源有不同的資料層級表示(如下表),目前MMA會將不同資料來源的資料層級映射為Database、Schema和Table三層表示,其中Schema作為Table的屬性存在。

資料來源

資料層級

Hive

Database、Table

Bigquery

Catalog、Schema、Table

Databricks

Project、Dataset、Table

任務與子任務

MMA遷移操作的對象可以是一個Database,多個Table或多個partition。選定操作對象,並建立遷移任務後,MMA會產生任務與子任務,其中任務中包含了遷移操作的配置資訊(操作對象、遷移方法等)。任務會進一步被劃分為子任務,子任務是實際遷移操作的執行單元。一個子任務會對應一個非分區表或一個分區表的多個分區。子任務執行的過程包含遷移中繼資料、遷移資料和資料校正三個階段。

資料校正

MMA將資料移轉到MaxCompute後,會對資料進行校正。目前支援的校正方法比較簡單,即在源端和MaxCompute端分別執行SELECT COUNT(*)命令擷取操作對象(例如表或分區)的行數,然後進行對比。

前提條件

  • 已建立MaxCompute專案。具體操作,請參見建立MaxCompute專案

  • 已為對應的使用者授予目標MaxCompute專案的如下操作許可權:

    客體(Object)

    許可權

    Project

    List、CreateTable、CreateInstance

    Table

    Describe、Select、Alter、Update、Drop

    Instance

    Read、Write

    關於具體的授權方案可以參考授權方案,或者直接將admin角色綁定到阿里雲帳號。操作過程如下:

    1. 進入MaxCompute控制台專案管理頁面,在左上方選擇地區。

    2. 單擊目標專案操作列的管理,進入專案配置頁面。

    3. 切換至角色許可權頁簽,然後單擊admin角色操作列的成員管理,將admin角色賦予相應的使用者。

  • 已準備如下作業環境:

    作業系統:

    • 需準備Linux作業系統。

    • 系統配置:若表的分區數≤500W,建議使用8核16 GB的配置,若表的分區數>500W,則需要更高的配置。

    JDK版本需要為Java 8或者Java 11。

    MySQL需要為V5.7或以上版本。

使用限制

BigQuery遷移限制如下:

  • 資料類型

    • 暫不支援BIGNUMERIC、JSON、INTERVAL、GEOGRAPHY和RANGE類型。

    • 遷移時,TIME類型會被轉換為STRING類型。

  • 表Schema

    • 表名和列名僅支援長度小於或等於128的大小寫字母、數字和底線。

    • 表中列的數量上限為1200。

安裝與配置

  1. 進入MMA_Releases,根據不同的資料來源類型選擇對應的mma-<3.x.x>-<datasource>.jar,例如mma-3.1.0-bigquery.jar

  2. 單擊下載lib.zip檔案並解壓。

  3. 建立一個名config.ini的檔案,並添加如下參數配置,樣本config.ini檔案內容如下:

    [mysql]
    host = mysql-host
    port = 3306
    ; can be any database name
    db = mmav3 
    username = user
    password = pass
    
    [mma]
    listening_port = 6060

    參數說明:

    類別

    參數名

    描述

    mysql

    host

    登入MySQL所使用的IP地址。

    port

    MySQL伺服器的連接埠號碼,預設為3306。

    db

    MySQL資料庫名稱。

    username

    MySQL資料庫的登入使用者名稱。

    password

    MySQL資料庫的登入密碼。

    mma

    listening_port

    MMA所在伺服器的監聽連接埠號碼,預設為6060。

  4. 將檔案目錄調整為如下結構:

    /path/to/mma
    |
    ├── mma-3.1.0-<datasource>.jar			# MMA 主程式
    ├── config.ini                                  # MMA設定檔
    └── lib/														
        └── spark/					# Spark 遷移任務依賴目錄
        		├── log/			# 程式運行時自動產生,spark 提交日誌
        		├── spark-3.1.1-odps0.34.1/	# Maxcompute Spark-3.1.1 依賴
        		├── bigquery-spark-job.jar	# Spark 遷移任務
        		└── mma-spark-client.jar	# Spark 提交程式

運行程式

您可以通過命令啟動MMA程式,並訪問MMA頁面,也可停止MMA。

說明

運行程式時,您需將下述命令中的<datasource>替換為相應的資料來源類型。

啟動MMA

建議使用nohup啟動程式,啟動命令如下。

nohup java -jar mma-3.1.0-<datasource>.jar -c config.ini > nohup.log 2>&1 &

停止MMA

如果需要停止MMA程式,可以使用如下命令直接終止已經啟動的MMA程式。停止MMA程式會導致正在啟動並執行遷移任務中斷,但是重新啟動MMA後,被中斷的任務會被重新執行,並且不影響最終的遷移結果。

ps aux | grep mma-3.1.0-<datasource>.jar | grep -v grep | awk '{print $2}' | xargs kill -9

訪問MMA

MMA程式啟動後,您可瀏覽器端輸入http://拉起服務的ip:6060(6060通過config.ini中的listening_port進行配置)訪問MMA。瀏覽器開啟MMA後,您需要在MMA配置頁面配置以下參數:

說明

MMA目前沒有提供訪問認證,您需要通過網路原則限定MMA的訪問。比如,如果MMA運行在阿里雲ECS上,需要通過ECS的安全性群組來控制哪些IP可以訪問MMA。

配置項

配置說明

mc.endpoint

用於MMA訪問MaxCompute的Endpoint,要求MMA所在伺服器能夠連通mc.endpoint,具體的Endpoint資訊可以參考Endpoint

mc.data.endpoint

(可選)通過Hive UDTF遷移資料時⽤於UDTF訪問MaxCompute,此時要求Hive叢集的節點能夠連通該地址。

mc.tunnel.endpoint

(可選)通過Hive UDTF遷移資料時用於UDTF訪問MaxCompute,此時要求Hive叢集的節點能夠連通該地址。

mc.auth.access.id

⽤於訪問MaxCompute的AccessKey ID。

您可以進入AccessKey管理頁面擷取AccessKey Secret。

mc.auth.access.key

用於訪問MaxCompute的AccessKey Secret。

mc.default.project

MMA會使⽤該項⽬的配額在MaxCompute上執⾏SQL命令。

mc.tunnel.quota

(可選)通常用不到,可忽略。

mc.projects

要遷往的MaxCompute項⽬名列表。多個項⽬名之間以英⽂逗號分隔。

task.max.num

用於遷移資料的MMA任務最大並發數,該參數是調節遷移速度的重要參數之一。

auth.type

(可選)僅用於通過Hive UDTF遷移Hive資料。

  • BearerToken:用於公用雲。

  • AK:用於專有雲。

auth.ak.hdfs.path

(可選)當auth.type值為AK時,此處為存放AccessKey的檔案路徑,檔案格式如下:

access_id=xxx
access_key=xxx

spark.dependency.root

Spark依賴根目錄。

不同資料來源的遷移操作

目前僅支援遷移BigQuery資料。

遷移BigQuery

添加資料來源

  1. 資料來源頁面右側,單擊添加資料來源,進入添加資料來源頁面。

  2. 資料來源類型選擇BIGQUERY,並單擊下一步

  3. 根據如下參數說明配置資料來源。

    參數名稱

    描述

    資料來源名稱

    資料來源名稱,可自訂,不能包含字元、數字、漢字之外的特殊字元。

    BigQuery service account key file json

    通過BigQuery IAM控制台建立服務帳號,下載鑒權JSON,詳情請參見服務帳號概述

    image

    image

    BigQuery project name

    服務帳號授權的專案名。

    定界分割表(Range Partition Table)遷移方式

    BigQuery定界分割表遷移方式,當前只支援遷移到MaxCompute分區表。

    預設值為Partition。

    時間單位列分區表(Time-unit Column-partitioned Table)是否保留分區列作為普通列,預設保留

    BigQuery單位列分區表,是否保留分區列作為普通列儲存到MaxCompute。

    預設保留。

    注入時間分區表(Ingestion-time Partitioned Table)是否保留偽列作為普通列,預設不保留

    BigQuery注入時間分區表,是否保留偽列作為普通列儲存到MaxCompute。

    預設為false(不保留)。

    MaxCompute Spark NetworkLink Name: region:name

    網路連接名稱,詳情請參見網路開通流程的“訪問VPC方案(專線直連)”部分。

    配置格式為<regionId>:<vpcId>。樣本:如果VPC ID為vpc-uf68aeg673p0k********,Region為上海,則此處應配置為cn-hanghai:vpc-uf68aeg673p0k********。關於Region和RegionId對應關係,請參見地區與地區ID的對應關係

    定時更新

    配置資料來源中繼資料定時拉取,有以下兩種定時方式:

    1. 每天:定時器每天運行一次,運行時刻為選定的24小時內的某一時間(精確到分鐘)。

    2. 每小時:定時器每小時運行一次,運行時刻為選定的60分鐘內的某一分鐘。

    meta api訪問並發量

    訪問資料來源中繼資料API的並發量,預設值為10。

    資料庫白名單

    需要遷移的BigQuery資料庫,多個值之間以英文逗號分隔。

    資料庫黑名單

    不需要遷移的BigQuery資料庫,多個值之間以英⽂逗號分隔。

    表黑名單, 格式為db.table

    不需要遷移的BigQuery資料庫表。單個表的格式為dbname.tablename,多個表之間以英文逗號分隔。

    表白名單, 格式為db.table

    需要遷移的BigQuery資料庫表。單個表的格式為dbname.tablename,多個表之間以英文逗號分隔。

更新資料來源

若資料來源的中繼資料有變動,您需要在MMA的資料來源頁面,單擊目標資料來源操作列的更新,以手動更新資料來源並拉取最新中繼資料。

修改資料來源配置

您也可以修改資料來源的相關配置,操作如下:

  1. 在MMA的資料來源頁面,單擊目標資料來源的名稱,進入資料來源詳情頁面。

  2. 配置資訊頁簽修改資料來源的相關配置。

建立遷移任務

遷移多個Table
  1. 在MMA的資料來源頁面,單擊目標資料來源名稱,進入資料來源詳情頁面。

  2. 資料資訊頁簽,單擊目標庫名,進入資料庫詳情頁面。

  3. 在資料庫詳情頁面的Table列表頁簽,選中要遷移的表,然後單擊建立遷移任務

  4. 建立遷移任務對話方塊中配置如下參數,並單擊確定

    參數名

    描述

    名稱

    任務名稱。

    任務類型

    遷移方式,通過BigQuery Storage Read API進行資料移轉。

    MC專案

    資料移轉的目標Maxompute專案。

    MC Schema

    可選,目標MaxCompute專案下的Schema。Schema詳情請參見Schema操作

    table列表

    要遷移的Table名稱列表,多個Table名稱之間以英文逗號分隔。

    只遷新分區

    如果開啟,則建立任務將忽略已經遷移成功的分區。

    定時執行

    配置任務定製執行,定時方式有兩種

    1. 每天:定時器每天運行一次,運行時刻為選定的24小時內的某一時間(精確到分鐘)。

    2. 每小時:定時器每小時運行一次,運行時刻為選定的60分鐘內的某一分鐘。

    只遷Schema

    只在MaxCompute建立相應的表和分區, 不遷移資料。

    開啟校正

    如果開啟,MMA將在源、目標端分區執行select count(*)擷取遷移對象的行數,根據行數驗證資料是否遷移成功。

    合并分區

    通常用不到,可忽略。

    分區過濾

    詳情請參見分區過濾運算式說明

    表名映射

    一個Table遷移到目標MaxCompute Project後的名稱。

    列名映射

    Table列名中遷移到MaxCompute後的名稱。

    表名映射規則

    表名映射配置需要對每個表分別進行配置,如果要遷移的多個表在遷移到MaxCompute後,名稱變動方式是固定的,可以使用該配置。

    配置格式為prefix${table}suffix。例如:該項值為pre_${table}_1時,如果源表名為test,則遷移到MaxCompute後,表名將會為pre_test_1。prefix和suffix可以為空白。

  5. 進入遷移任務>工作清單,可對已建立的遷移任務進行管理。具體請參見遷移任務管理

遷移單個Database
  1. 在MMA的資料來源頁面,單擊目標資料來源名稱,進入資料來源詳情頁面。

  2. 資料資訊頁簽,單擊目標庫名操作列的遷移

  3. 建立遷移任務對話方塊中配置如下參數:

    參數名

    描述

    名稱

    任務名稱。

    任務類型

    遷移方式,選擇通過Bigquery Storage Read API 進行資料移轉

    MC專案

    資料移轉的目標MaxCompute專案。

    MC Schema

    可選,目標MaxCompute專案下的Schema。Schema詳情請參見Schema操作

    table白名單

    要遷移的table名稱列表,如果不為空白,則只會遷移該列表內的table。

    table黑名單

    黑名單內的table將不會被遷移。

    只遷新分區

    如果開啟,則建立任務將忽略已經遷移成功的分區。

    定時執行

    配置任務定製執行,定時方式有兩種

    1. 每天:定時器每天運行一次,運行時刻為選定的24時內的某一時間(精確到分鐘)。

    2. 每小時:定時器每小時運行一次,運行時刻為選定的60分鐘內的某一分鐘。

    只遷Schema

    只在MaxCompute建立相應的表、分區,不遷移資料。

    開啟校正

    如果開啟,MMA將在源、目標端分區執行select count(*)擷取遷移對象的行數,根據行數驗證資料是否遷移成功。

    合并分區

    通常用不到,可忽略。

    分區過濾

    詳情請參見分區過濾運算式說明

    表名映射

    一個table遷移到目標MaxCompute Project後的名稱。

    列名映射

    table列名中遷移到MaxCompute後的名稱。

    表名映射規則

    表名映射配置需要對每個表分別進行配置,如果要遷移的多個表在遷移到MaxCompute後,名稱變動方式是固定的,可以使用該配置。

    配置格式為prefix${table}suffix。例如:該項值為pre_${table}_1時,如果源表名為test,則遷移到MaxCompute後,表名將會為pre_test_1。prefix和suffix可以為空白。

  4. 進入遷移任務>工作清單,可對已建立的遷移任務進行管理。具體請參見遷移任務管理

遷移任務管理

管理工作

在MMA的頂部功能表列單擊遷移任務>工作清單,可進入工作清單頁面查看所有狀態的任務,您可針對不同狀態下的任務執行刪除停止啟動重試等操作。

管理子任務

您可在子任務列表頁面管理所有子任務。

  1. 進入子任務列表頁面,有如下兩種方式:

    • 在MMA的頂部功能表列單擊遷移任務>子任務列表,可進入子任務列表頁面查看所有任務的子任務。

    • 工作清單頁面,單擊目標任務名,也可進入該任務的子任務列表頁面。

  2. 您可在過濾欄根據任務名資料來源源庫源表狀態等條件對子任務進行過濾。

  3. 單擊目標子任務操作列的詳情,可查看或下載該子任務的執行日誌image

  4. 對於狀態遷移資料失敗的子任務,您可執行重試重新運行操作。

    子任務的運行會涉及遷移Schema、遷移資料、資料校正三個階段,如果某個子任務“遷移資料”失敗,執行重試操作時,子任務會重新執行“遷移資料”操作;執行重新運行操作時,子任務會從“遷移Schema”開始重新運行。

附錄

分區過濾運算式說明

此處以一個具體樣本為您介紹分區過濾運算式的含義,如:p1 >= '2022-03-04' and (p2 = 10 or p3 > 20) and p4 in ('abc', 'cde')

樣本說明:

  • p1、p2和p3均為分區名。

  • 分區值僅包含字串和數字,字串被雙引號或單引號包裹。除INT/BIGINT類型的分區列值外,其他類型的分區值都只能取字串值。

  • 比較操作符包括:>、>=、= 、<、<=、<>

  • 分區過濾運算式支援IN操作符。

  • 邏輯操作符包括:ANDOR

  • 支援使用括弧。

地區與地區ID的對應關係

地區

RegionID

華東1(杭州)

cn-hangzhou

華東2(上海)

cn-shanghai

華北2(北京)

cn-beijing

華北3(張家口)

cn-zhangjiakou

華北6(烏蘭察布)

cn-wulanchabu

華南1(深圳)

cn-shenzhen

西南1(成都)

cn-chengdu

中國香港

cn-hongkong

華東 2 金融雲

cn-shanghai-finance-1

華北 2 阿里政務雲 1

cn-north-2-gov-1

華南 1 金融雲

cn-shenzhen-finance-1

日本(東京)

ap-northeast-1

新加坡

ap-southeast-1

馬來西亞(吉隆坡)

ap-southeast-3

印尼(雅加達)

ap-southeast-5

德國(法蘭克福)

eu-central-1

英國(倫敦)

eu-west-1

美國(矽谷)

us-west-1

美國(維吉尼亞)

us-east-1

阿聯酋(杜拜)

me-east-1