配置MaxCompute数据源

更新时间:
复制为 MD 格式

通过数据迁移服务MMS(MaxCompute Migration Service)迁移数据前,需新增数据源,确保数据源与MMS服务网络连通,并将数据源的元数据同步至MMS服务,以便配置后续的迁移作业。

迁移模式介绍

MaxCompute迁移到MaxCompute的场景下,迁移任务主要有两种模式。不同的模式下,权限和网络有不同的配置要求,迁移费用也不同。

  • region迁移-使用SQL迁移数据

    迁移任务主要通过SQL模式读写MaxCompute。

  • region迁移

    • 使用Spark+开放存储

      迁移任务主要通过Spark调用开放存储接口读写数据。

    • 使用Spark+OSS中转

      迁移任务在源端项目创建OSS外部表将数据写入到OSS中,再通过Spark直接读取源端OSS目录下的数据文件,最后将数据迁移到目标端。

迁移费用

MMS数据迁移会消耗各类资源从而产生消费,主要组成费用如下:

MMS操作

计费项

数据源运行过程,包括元数据同步。

计算费用:Spark作业消耗计算资源产生

region迁移-使用SQL迁移数据

计算费用

  • 目标端产生SQL计算费用。

  • 若迁移任务配置了开启校验源端和目标端还会额外产生SQL计算费用。

region迁移-使用Spark+开放存储

  • 计算费用

    • 目标端会产生Spark计算费用

    • 若迁移任务配置了开启校验源端和目标端还会额外产生SQL计算费用。

  • 开放存储数据传输费用:由源端产生

  • VPC网络费用:源端和目标端的VPC网络打通产生。

region迁移-使用Spark+OSS中转

  • 计算费用

    目标端会产生Spark计算费用

  • OSS存储费用:

    在源端开通OSS服务,临时存储数据的费用。数据迁移完成后,OSS中的数据将被删除;外部表数据按保留策略管理,到期自动清理。

  • VPC网络费用:源端和目标端的VPC网络打通产生。

建议选择包年包月的计算资源和数据传输独享资源来执行迁移作业,以便降低迁移成本。

操作步骤

目标端MaxCompute项目已完成准备工作

步骤一:源端MaxCompute项目准备

数据源元数据同步和数据迁移授权

使用源端账号配置数据源的元数据同步权限和数据迁移权限。

数据源的元数据同步权限

  1. MaxCompute源端项目需创建服务关联角色(AliyunServiceRoleForMaxComputeMMS)。

    注意此处应使用源端账号创建服务关联角色。

    1. 若当前用户使用账号为阿里云主账号,可以直接操作创建服务关联角色;

      若当前用户为RAM用户,则需要先授予RAM用户操作权限AliyunRAMFullAccess,操作详情参考管理RAM角色的权限

    2. 创建服务关联角色有两种方式:通过MaxCompute控制台和通过RAM控制台,操作步骤如下:

      通过MaxCompute控制台

      1. 登录MaxCompute控制台,在左上角选择地域。

      2. 在左侧导航栏,选择数据传输 > 迁移服务

      3. 数据源页签,单击新增数据源

      4. 在弹出的MaxCompute服务关联角色对话框中,单击确认,即可创建成功。若未自动弹出该对话框,则表明该角色已创建。

      通过RAM控制台

      1. 登录RAM控制台

      2. 在左侧导航栏选择身份管理 > 角色

      3. 角色页面,单击创建角色

      4. 创建角色页面的右上角,单击创建服务关联角色

      5. 创建服务关联角色页面,选择信任的云服务AliyunServiceRoleForMaxComputeMMS,单击创建服务关联角色

  2. 配置MaxCompute源端项目的相关数据操作权限。

    使得MMS获取源端元数据信息并在迁移过程中读取数据。注意此处应使用源端账号配置操作权限建议直接赋予admin角色。

    通过SQL配置

    1. 使用本地客户端(odpscmd)连接MaxCompute,添加已创建的服务关联角色。

      USE <target_projectname>;
      
      -- 为用户添加服务关联角色。
      Add USER  `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;
    2. 给用户授予权限

      MaxCompute支持不同粒度权限控制,在项目实际运行过程中,可根据人员操作范畴授权

      • 粗粒度授权,直接授权admin角色给user,不用逐张表给同一用户重复授予权限。

        GRANT admin TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;
      • 细粒度授权:逐个项目、表或实例级别授权。

        授予项目级数据操作权限

        -- 授予项目级数据操作权限。
        GRANT <actions> 
          ON project <project_name> TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;
        -- 支持的actions
        Read,Write,List,CreateTable,CreateInstance,CreateFunction,CreateResource,All
        -- 示例1
        GRANT Read,Write,List,CreateTable,CreateInstance,CreateFunction,CreateResource
          ON project <project_name> TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;
        -- 示例2
        GRANT ALL 
          ON project <project_name> TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;

        授予表级数据操作权限

        -- 授予表级数据操作权限。
        GRANT <actions> 
          ON table <table_name> [(<column_list>)] TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;
        -- 支持的actions
        Describe,Select,Alter,Update,Drop,ShowHistory,All
        -- 示例1
        GRANT Describe,Select,Alter,Update,Drop,ShowHistory
          ON table <table_name> [(<column_list>)] TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;
        -- 示例2
        GRANT All
          ON table <table_name> [(<column_list>)] TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;

        授予实例级数据操作权限

        -- 授予实例级数据操作权限。 
        GRANT <actions> 
          ON instance <instance_id> [(<column_list>)] TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;
        -- 支持的actions
        Read,Write,All 
        
        -- 示例1
        GRANT Read,Write 
          ON instance <instance_id> [(<column_list>)] TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;
        
        -- 示例2
        GRANT All 
          ON instance <instance_id> [(<column_list>)] TO USER `RAM$<account_id>:role/AliyunServiceRoleForMaxComputeMMS`;
        

    参数说明

    • target_projectname:必填,目标项目空间的名称。

    • account_id:必填,阿里云主账号名称

    • privileges:必填,被授予的操作权限名称。单次授权可以指定多个操作,多个操作名称之间使用半角逗号(,)分隔。

    通过MaxCompute控制台配置

    1. 登录MaxCompute控制台,在左上角选择地域。

    2. 在左侧导航栏,选择管理配置 > 项目管理

    3. 项目管理页面,单击目标项目操作列的管理

    4. 项目配置页面,选择角色权限页签。

    5. 在弹出的新建角色对话框,根据界面提示文案配置项目信息,单击确定

      该步骤的目的是在MaxCompute中单独创建一个项目角色,并为该角色单独授予专用于MMS的数据操作权限。

      也可选择使用项目内置的admin角色,无需通过该步骤新增角色,直接执行下一步骤。

      配置参数如下:

      参数

      是否必填

      描述

      角色名称

      必填

      字母开头,可包含字母和数字,长度不超过64个字符

      角色类型

      必填

      • Admin:管理类型角色。

        • 支持通过Policy授予管理类型权限,不支持授予资源权限

        • 不支持通过ACL方式授予管理类权限。

      • Resource:资源类型角色。

        • 支持通过PolicyACL方式授予资源类型权限,不支持授予管理类型权限

      授权方式

      必填

      • ACL(Access Control Lists):白名单授权机制,允许用户或角色对指定对象执行指定操作。

      • Policy:支持白名单和黑名单授权机制,适合需要细粒度控制的大型企业和复杂场景。

      为用户授予项目、表、模型、资源、函数或实例的操作权限。可授予的权限列表如下:

      对象

      权限

      Table

      Describe、Select、Update、Alter、Drop、ShowHistory、Download

      Resource

      Read、Write、Download、Delete

      Function

      Read、Write、Download、Execute、Delete

      Package

      Read

      Project

      Read、Write、List、CreateTable、CreateInstance

    6. 选择目标项目级别角色,单击操作列的成员管理。选择需授权的阿里云主账号或RAM用户,单击确定完成授权。若首次授权时未能搜索到对应账号,可下方手动添加成员区域添加。

    源端MaxCompute项目需要的权限如下表:

    对象

    权限

    Table

    Describe

    Project

    List、CreateInstance

  3. 为源端主账号添加读information_schema的权限。

    1. 登录MaxCompute控制台,在左上角选择地域。

    2. 在左侧导航栏,选择管理配置 > 租户管理 。

    3. 租户管理页面,单击角色管理页签。

      角色管理页签,单击新增角色,在弹出的新增角色对话框,填写自定义角色名称policy内容,然后单击确定完成创建。

      policy内容配置如下:

      {
          "Statement":[
              {
                  "Action":[
                      "odps:Describe",
                      "odps:Select"
                  ],
                  "Effect":"Allow",
                  "Resource":[
                      "acs:odps:*:catalogs/system_catalog/schemas/information_schema/tables/*"
                  ]
              },
              {
                  "Action":[
                      "odps:List"
                  ],
                  "Effect":"Allow",
                  "Resource":[
                      "acs:odps:*:catalogs/system_catalog/schemas/information_schema"
                  ]
              }
          ],
          "Version":"1"
      }
    4. 租户管理页面,单击用户管理页签。

      用户管理页签,单击新增成员,在弹出的添加成员对话框,勾选或手动添加需要设置角色的账号。在批量设置角色区域选择要为这些账号配置的角色,单击image,然后确定,完成配置。

数据迁移权限

  • 迁移任务为SQL模式

    源端项目需给目标服务关联角色(AliyunServiceRoleForMaxComputeMMS)授权源项目的数据读取权限,包括Select、Describe权限。

    适用范围

    • 同地域迁移。

    • 跨地域迁移。地域包括华东2(上海)、华东1(杭州)、华北2(北京)、华南1(深圳)、西南1(成都)、华北6(乌兰察布)。

    授权方式

    • 授权方式一:跨主账号授权方式。通过使用本地客户端(odpscmd)连接至MaxCompute

      跨账号授权目标端的子账号访问源项目

      跨账号授权目标端的子账号访问源项目,目标端子账号需要有目标项目的adminsuper_administrator权限

      • 主账号或有权限的子账号操作。

        USE 源项目;
        ADD USER `ALIYUN$目标项目内的子账号`;
        GRANT super_administrator TO USER `ALIYUN$目标项目内的子账号`;
      • 目标子账号操作。

        可以直接授权admin,也可以授权自定义权限角色(包括需要迁移的表的select、describe权限)。

        USE 源项目;
        ADD USER  `RAM$目标项目主账号:role/AliyunServiceRoleForMaxComputeMMS`;
        GRANT admin TO USER  `RAM$目标项目主账号:role/AliyunServiceRoleForMaxComputeMMS`;

      跨账号授权目标端的主账号访问源项目

      • 源主账号或有权限的子账号操作。

        USE 源项目;
        ADD USER `ALIYUN$目标项目主账号`;
        GRANT super_administrator TO USER `ALIYUN$目标项目主账号`;
      • 目标主账号操作。

        可以直接授权admin,也可以授权自定义权限角色(包括需要迁移的表的select、describe权限)。

        USE 源项目;
        ADD USER `ALIYUN$目标项目主账号`;
        GRANT super_administrator TO USER `ALIYUN$目标项目主账号`;
    • 授权方式二基于Package跨项目访问资源方式。将源项目需要迁移的表通过Package授权给目标的服务关联角色(AliyunServiceRoleForMaxComputeMMS)。

  • 迁移任务为Spark+开放存储模式

    给源项目的服务关联角色(AliyunServiceRoleForMaxComputeMMS)授予TableDescribe、Select、Download权限,适用于除上述SQL模式支持地域外的其他地域之间的跨地域数据迁移。

    授权方式参考准备工作-「步骤四:权限配置」中配置用户MaxCompute数据操作权限。建议直接赋予admin角色(若数据源元数据同步权限准备中已经授权admin,则无需再次授权)。

源端读取数据Storage API(若不使用,可忽略该步骤)

使用预付费Storage API

使用预付费Storage API

  1. 在源端项目所在地域购买数据传输服务Quota。

    单击链接进入MaxCompute控制台购买页,新购Quota。

    商品类型选择包年包月;规格类型选择数据传输服务

  2. 打开源端项目的Storage API开关,命令如下:

    setproject odps.tunnel.enable.quota.route.v2=true;
  3. 新增角色,为源端主账号添加Quota使用权限。

    1. 登录MaxCompute控制台,在左上角选择地域。

    2. 在左侧导航栏,选择管理配置 > 租户管理 。

    3. 租户管理页面,单击角色管理页签。

      角色管理页签,单击新增角色,在弹出的新增角色对话框,填写自定义角色名称policy内容,然后单击确定完成创建。

      policy内容配置如下:

      {
          "Statement": [{
                  "Action": [
                      "odps:List",
                      "odps:Usage"],
                  "Effect": "Allow",
                  "Resource": ["acs:odps:*:regions/*/quotas/*"]}],
          "Version": "1"
      }
    4. 租户管理页面,单击用户管理页签。

      用户管理页签,单击新增成员,在弹出的添加成员对话框,勾选或手动添加需要设置角色的账号。在批量设置角色区域选择要为这些账号配置的角色,单击image,然后确定,完成配置。

使用后付费Storage API

使用后付费Storage API

  1. 打开源端项目的Storage API开关

    1. 登录MaxCompute控制台,在左上角选择地域。

    2. 在左侧导航栏,选择管理配置 > 租户管理 。

    3. 租户管理页面,单击租户属性页签。

      租户属性页签,打开开放存储(Storage API)开关

  2. 新增角色,为源端主账号添加Quota使用权限。

    1. 登录MaxCompute控制台,在左上角选择地域。

    2. 在左侧导航栏,选择管理配置 > 租户管理 。

    3. 租户管理页面,单击角色管理页签。

      角色管理页签,单击新增角色,在弹出的新增角色对话框,填写自定义角色名称policy内容,然后单击确定完成创建。

      policy内容配置如下:

      {
          "Statement": [{
                  "Action": [
                      "odps:List",
                      "odps:Usage"],
                  "Effect": "Allow",
                  "Resource": ["acs:odps:*:regions/*/quotas/pay-as-you-go"]}],
          "Version": "1"
      }
    4. 租户管理页面,单击用户管理页签。

      用户管理页签,单击新增成员,在弹出的添加成员对话框,勾选或手动添加需要设置角色的账号。在批量设置角色区域选择要为这些账号配置的角色,单击image,然后确定,完成配置。

  3. 通过VPC对等连接使用CEN方案完成VPC网络互联将当前地域的IP加入路由,详情参见下方网络配置步骤。

创建支持跨账号读取OSS数据的STS角色(若不使用,可忽略该步骤)

源端创建外部表,目的端读取数据时均使用此角色。使用MaxCompute源端账号执行如下操作:

  1. 创建RAM角色

    1. 登录RAM控制台

    2. 在左侧导航栏选择身份管理 > 角色

    3. 角色页面,单击创建角色

      例如,角色名为oss-cross-test,其ARN为:acs:ram::<源端userID>:role/oss-cross-test,该信息在配置数据源参数时需要填写。

  2. 修改RAM角色策略内容

    1. 登录RAM控制台

    2. 在左侧导航栏选择身份管理 > 角色

    3. 角色页面,单击目标角色名称,进入该角色详情页。

    4. 信任策略页签,单击编辑信任策略,在编辑信任策略页面选择脚本编辑页签。

      配置如下策略:

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "<目的端主账号ID>@odps.aliyuncs.com",
                "odps.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }
  3. 新建权限策略

    1. 登录RAM控制台

    2. 在左侧导航栏选择权限管理 > 权限策略

    3. 权限策略页面,单击创建权限策略

    4. 创建权限策略页面,选择脚本编辑。输入以下权限策略:

      {
      "Version": "1",
      "Statement": [
      {
       "Action": [
         "oss:ListBuckets",
         "oss:GetObject",
         "oss:ListObjects",
         "oss:PutObject",
         "oss:DeleteObject",
         "oss:AbortMultipartUpload",
         "oss:ListParts"
       ],
       "Resource": "*",
       "Effect": "Allow"
      }
      ]
      }
  4. 将新建的权限策略授权给新建的RAM角色

    1. 登录RAM控制台

    2. 在左侧导航栏选择身份管理 > 角色

    3. 角色页面,单击目标角色名称,进入该角色详情页。

    4. 权限管理页签,单击新增授权。在弹出的新增授权面板中,选择要授予该角色的权限策略,单击确认新增授权

网络配置

步骤二:新增数据源

  1. 登录MaxCompute控制台,在左上角选择地域。

  2. 在左侧导航栏,选择数据传输 > 迁移服务

  3. 数据源页签,单击新增数据源

    在弹出的MaxCompute服务关联角色对话框中,单击确认,即可创建成功。若未自动弹出该对话框,则表明该角色已创建。

    新增数据源页面,配置数据源信息,然后单击新增,完成数据源创建。

    • 数据源基本信息

      参数名

      是否必填

      说明

      数据源名称

      数据源名称,可自定义,不能包含字符、数字、汉字之外的特殊字符。

      数据源类型

      选择MaxCompute

      网络连接

      选择需要使用的网络连接。

      网络连接在MaxCompute管理配置 > 网络连接 模块创建,用于MMSVPC通信,最终连接数据源。

      MaxCompute区域

      选择数据源所在区域后,OSS Endpoint 将默认使用该区域。

      跨 Region 场景下:

      • 若填写OSS BucketOSS Role ARN任意一个参数,则优先使用OSS中转模式。

      • 若均未填写,默认采用 Spark+ 开放存储模式。

      OSS Bucket

      源端用于临时存放外部表数据的OSS桶名称。Bucket要建在源端项目同地区/同账号下,最好只用来做迁移中转使用,迁移结束后MMS会删除Bucket内文件。

      OSS Role ARN

      acs:ram::<源端userId>:role/<oss sts角色名>源端准备工作中创建

      阿里云主账号id

      源项目阿里云主账号UID。

      MaxCompute源项目

      待迁移的项目名称。

      执行Maxcompute源端校验SqlProject

      选择目标执行迁移作业的项目。

      默认目标MaxCompute项目

      数据迁移时选择映射的目标项目,不可修改。

      目标MaxCompute项目列表

      若一个数据源的数据需要迁移到多个目标项目,需配置目标MaxCompute项目列表。

      MaxCompute执行迁移作业的项目

      迁移过程中,执行在MaxCompute上发起的Spark、SQL等迁移作业的项目,并使用该项目关联的默认计算Quota。

    • 其他信息

      以下参数均非必填,根据需要填写。

      参数名

      说明

      数据传输服务 Quota Name

      • 源端独享数据传输服务资源组名称。

      • 如果在源端使用Storage API,需填写源端数据传输服务Quota Name:

        • 预付费方式为自定义一级Quota名称。

        • 后付费方式Quota Name为:pay-as-you-go。

      使用Vpc Endpoint访问源MaxCompute

      是否启用VPC网络进行数据迁移。

      • 开启:使用VPC网络,需确认已开通VPC网络连接。具体操作,请参见网络开通流程

        • 同地域内迁移,可直接选择VPC。

        • 当迁移任务为Spark+开放存储模式时,则必须为VPC。

        • 当迁移任务为Spark+OSS模式时,Spark通过VPC endpoint访问源端OSS。

      • 关闭:使用公网。

      如果在源端使用Storage API,需开启

      Metastore定时更新

      数据源元数据是否定时拉取。取值说明如下:

      • 启用:定时拉取,更新周期支持每天和每小时,支持配置更新开始时间

        • 每日更新:定时器每天运行一次,运行时刻为选定的24小时内的某一时间(精确到分钟)。

        • 每小时更新:定时器每小时运行一次,运行时刻为选定的60分钟内的某一分钟。

      • 禁用:不定时拉取。

      元数据访问并发量

      访问MaxCompute MetaStore的并发量,用于提高获取MaxCompute元数据的速度。

      Schema白名单

      需要迁移的Schema,多个值之间以半角逗号(,)分隔。

      Schema黑名单

      不需要迁移的Schema,多个值之间以半角逗号(,)分隔。

      Table黑名单

      不需要迁移的MaxCompute数据表。

      单个表的格式为schema.tabletable,多个表之间以半角逗号(,)分隔。

      Table白名单

      需要迁移的MaxCompute数据表。

      单个表的格式为schema.tabletable,多个表之间以半角逗号(,)分隔。

      数据搬迁任务最大并发量

      数据迁移并发量,默认为20。

      MaxCompute迁移任务sql参数

      SQL参数。参考Flag参数列表

      单个任务处理的最多分区数量

      默认50。即一次MMA任务迁移的分区数量,通过批量的分区迁移,可以减少提交SQL的次数,节约SQL提交时间。一般不需要修改。

      单个任务处理的最大数量(单位G)

      默认5G。一般不需要修改。

步骤三:同步元数据

数据源启动后会生成一个作业实例,实现数据源与MMS服务的连接,再将源数据同步至MMS服务,以便配置后续迁移作业。

说明

该作业实例会占用4 CU计算资源。当数据源无任何等待运行或正在运行的迁移作业或元数据同步作业时,系统会关闭数据源,使用时需再次启动。

  1. 数据源页签,单击目标数据源对应的操作列的更新元数据

  2. 数据源页签,可以查看目标数据源的运行状态

  3. 若数据源的元数据存在变动,且启用了元数据定时更新,系统会按照配置的时间定时更新,无需手动进行元数据同步操作。

外部数据源配置完成后,创建迁移作业