ODPS数据迁移指南

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ODPS数据迁移指南

本文章来自于阿里云云栖社区

摘要: 1. 背景调研 1.1 ODPS源与目的集群调研项内容ODPS源集群版本OD PS目的集群版本ODPS源与目的是否在一个集群/可使用相同账号ODPS源集群AccessKeyId ODPS源集群AccessKeySecret ODPS目的集群AccessKeyId OD PS目的集群AccessKeyIdSecret 1.2 预迁移数据统计所属Project 表名大小是否要迁移增量Project1 Table1 Desc查看表大小 2. 工具选择与方案确定目前有四种方式可用于ODPS的数据迁移。

1. 背景调研

1.1 ODPS源与目的集群

1.2 预迁移数据统计

2. 工具选择与方案确定

目前有四种方式可用于ODPS的数据迁移。

1.如果源与目的ODPS在一个集群,或可使用相同账号,则推荐使用ODPS COPY

TASK的方式进行迁移;

2.如果表的数量少,可通过手动建立CDP任务的方式进行迁移;

3.如果表的数量多,可通过调用Base CDP API接口的方式批量建立CDP任务,但

目前此API接口还不成熟,和页面有较多关联;

4.如果是不同集群,不同账号体系下的ODPS数据迁移,则采用使用Datax工具进

行迁移,迁移所需的配置文件,可用脚本批量生成;

3. 具体实施

3.1 表(分区)结构迁移

本部分操作,可通过调用ODPS的SQL来完成。具体可编写程序,调用ODPS SDK 或ODPS cmd工具来进行。

对预迁移的表,在源ODPS中获取表结构,根据表结构,在目标ODPS中批量运行组装好的建表语句,即可完成。

3.1.1 要迁移的表名梳理

1.根据1.2中调研结果,梳理出表名列表;

2.此步骤,也可使用show tables语句获取表名,然后将临时表等不需要迁移的表

名去除;

3.1.2 生成DDL建表(分区)语句

此步骤操作,在ODPS源端进行,可使用ODPS CMD工具(原文链接:

https:///document_detail/27971.html?spm=5176.100239.blogcont710

62.13.cxO2X9)。其配置文件位于config/odps_config.ini,配置项如下:

project_name=

access_id=

access_key=

end_point=/api

这里注意,专有云环境下的end_point需要联系专有云管理人员获取。

在Bash环境下,执行如下示例语句,导出表结构。请根据实际情况改写shell

语句,例如读取表名列表文件等。这里的odps_config.ini.src是源端ODPS

的配置文件。

fortableintab1tab2 tab3

do

odpscmd --config=odps_config.ini.src -e"export table $table "|a wk -F ':' '{print $2}' >>tab.ddl

done

3.1.3 建立对应表(分区)

将ODPS CMD的配置文件配置成目的ODPS,然后执行如下实例语句。这里的odps_config.ini.dst是目的端ODPS的配置文件。

odpscmd --config=odps_config.ini.dst -f tab.ddl

3.2 数据迁移

3.2.1 使用ODPS TASK COPY

注意使用该工具的前提是在同一ODPS集群,或具有相同的账号。示例语句如下所示,请按照实际情况进行修改。

for table in tab1 tab2 tab3

do

odpscmd --config=odps_config.ini.dst -e "copy -d import -t proj _i.$table -url=http://src_odps_tunnel_endpoint/proj_p/$table -a "&

done

src_odps_tunnel_endpoint指源ODPS的tunnel endpoint,专有云环境下,请联系云管理人员获取。odps_config.ini.dst同上只目的端odps的配置。

Copy命令的解释如下,有助于帮助使用和理解该命令。

copy [-a 或-o] -d [import 或 export] -url [TUNNEL 服务的url地址] -t [本地 ODPS 表名] -p [本地 ODPS 分区名] -e [远端 ODPS];

-a (追加模式)把数据附加到目标表已有数据之后

-o (覆盖模式)目标表已有数据被删除,新数据进入目标表

-d IMPORT或EXPORT。IMPORT表示数据从远端集群导入本地集群,EXPORT 表示数据从本地集群导入远端集群

-url TUNNEL 服务的url地址,其中包含 Project 名,表名和分区名(如果是分区表的话)

-t 本地ODPS集群的表名

-p 本地ODPS集群的分区名,如果该表没有分区,该选项被省略

-e 远端ODPS的访问点(end point)

∙append(-a)和overwrite(-o)的语义很明确,不过tunnel其实是只支持append操作的,所以-o 命令只不过是帮你执行了一下alter table drop partition然后add partition的操作。

∙-url指定的是tunnel地址,分区表的写法

http://odps_endpoint_tunnel/prj_name/table_name/month=1,day=1,不需要写引号,多级分区用逗号分隔。

∙-t 可以写成project_name.table_name的名字

∙-p 分区名称不需要写引号,多级分区逗号分隔

∙-e 当前tunnel支持路由功能,copy task将使用-e指定的远端odps endpoint路由到对应的tunnel endpoint

以下举个例子。从源ODPS的project_a.table_a,分区是ds='ds1'/pt=‘pt1’,导入到目的生产的project_b.table_b,分区是ds='ds2'/pt='pt2',在目的生产的ODPS CMD上运行:

copy -o -d import -url /pr oject_a/table_a/ds=ds1,pt=pt1 -t project_b.table_b -p ds=ds2,pt =pt2 -e /api;

3.2.2 使用DataX工具

本步骤利用DataX工具(原文链接:

https:///alibaba/DataX?spm=5176.100239.blogcont71062.14.SoO1VB)进行数据迁移,DataX是阿里巴巴集团内被广泛使用的离线数据同步工具。

相关文档
最新文档