MMA大数据迁移实训

简介: 本场景带您体验通过大数据迁移工具MMA,完成从Hive数据源向MaxCompute数据源的迁移。

MMA大数据迁移实训

1. 创建实验资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。

说明:资源创建过程需要3~5分钟。


2. 启动MMA

本步骤指导您如何启动并登录大数据迁移工具MMA。

说明:本实验已在云服务器ECS中安装好大数据迁移工具MMA和相关服务。

  1. 在实验室页面右侧,单击图标,切换至Web Terminal。

  1. 在Web Terminal终端中,执行如下命令,启动容器。
docker start cf4a0b2a433f
  1. 执行如下命令,进入容器。
docker exec -it hadoop_centos /bin/bash
  1. 执行如下命令,启动MySQL服务。
service mysql start
  1. 执行如下命令,source环境变量生效。
source /etc/profile
  1. 执行如下命令,启动hadoop集群服务。
start-dfs.sh
start-yarn.sh
  1. 执行如下命令,启动hive服务。

说明:如下两个命令执行之后,按回车可继续。

nohup hiveserver2 &
hive --service metastore -p 9083 &
  1. 修改mma配置。

8.1 执行如下命令,下载odps_config.ini配置文件。

hdfs dfs -get /user/odps_config.ini

8.2 执行如下命令,编辑odps_config.ini配置文件。

vim odps_config.ini

8.3 按i进入编辑模式,根据参数说明,修改project_name、access_id和access_key三个参数。

参数说明:

  • project_name:填写云产品资源列表中的MAXCOMPUTE的项目名称。
  • access_id:填写云产品资源列表中的AK ID。
  • access_key:填写云产品资源列表中的AK Secret。

8.4 按下Esc键,退出编辑模式。输入:wq并按下enter键,保存并退出odps_config.ini配置文件。

8.5 执行如下命令,上传并覆盖odps_config.ini配置文件。

hdfs dfs -put -f odps_config.ini /user

8.6 执行如下命令,进入mma的conf目录。

cd /usr/local/mma-0.1.0/conf

8.7 执行如下命令,编辑mma_server_config.json配置文件。

vim mma_server_config.json

8.8 按i进入编辑模式,根据参数说明,修改如下五个参数。

参数说明:

  • mma.job.execution.mc.project:填写云产品资源列表中的MAXCOMPUTE的项目名称。
  • mma.data.dest.mc.access.key.id:填写云产品资源列表中的AK ID。
  • mma.data.dest.mc.access.key.secret:填写云产品资源列表中的AK Secret。
  • mma.metadata.dest.mc.access.key.id:填写云产品资源列表中的AK ID。
  • mma.metadata.dest.mc.access.key.secret:填写云产品资源列表中的AK Secret。

8.9 按下Esc键,退出编辑模式。输入:wq并按下enter键,保存并退出odps_config.ini配置文件。

  1. 执行如下命令,启动mma服务。
cd /usr/local/mma-0.1.0/bin/
./mma-server
  1. 执行如下命令,修改nginx对应访问ip。
vim /etc/nginx/conf.d/mma.conf
  1. i键进入编辑模式,将proxy_pass参数的ip修改为云产品资源列表中云服务器ECS的弹性ip。

  1. 修改完成后,按ECS键退出编辑模式,输入:wq然后回车,保存文件并退出。
  2. 执行如下命令,启动nginx。
cd /usr/sbin/
./nginx
  1. 在实验室页面右侧,单击,切换至远程桌面。

  1. 在远程桌面,双击打开Chromium网页浏览器

  1. 在Chromium网页浏览器打开新页签,在地址栏中输入并访问http://<ECS弹性IP>:8081

说明:您需要将<ECS弹性IP>替换为云产品资源列表中的云服务器ECS的弹性IP。

返回如下页面,表示您已成功登录MMA。


3. 创建数据源

本步骤指导您如何在迁移工具MMA上创建Hive数据源和MaxCompute数据源,通过创建Hive数据源来选择迁移源端,创建MaxCompute数据源来选择迁移的目标端。

  1. 在左侧导航栏,单击数据源管理

  1. 配置MaxCompute数据源。

2.1 在数据源管理页面,单击新增数据源

2.2 在新增数据源对话框中,参考如下说明配置数据源,然后单击测试连接

参数说明:

  • 数据源类型:选择MaxCompute。
  • 数据源名称:自定义数据源名称。例如在本实验中,填写MaxCompute。
  • ODPS Endpoint:填写http://service.cn-shanghai.maxcompute.aliyun.com/api
  • AsseccKey ID:填写云产品资源列表中的AK ID。
  • AsseccKey Sercret:填写云产品资源列表中的AK Secret。

2.3 在新增数据源对话框中,测试连接成功之后,单击保存

  1. 配置Hive数据源。

3.1 在数据源管理页面,单击新增数据源

3.2 在新增数据源对话框中,参考如下说明配置数据源,然后单击测试连接

参数说明:

  • 数据源类型:选择Hive。
  • 数据源名称:自定义数据源名称。例如在本实验中,填写Hive。
  • 特殊认证方式:选择无。
  • 用户名:在本实验中填写hive。
  • 数据库名:在本实验中填写test。
  • Hive版本:选择Hive MetaStore。
  • Hive JDBC:在本实验中填写jdbc:hive2://172.17.0.2:10000/default。
  • 元数据类型:选择0.81。
  • metastoreUris:在本实验中填写thrift://172.17.0.2:9083。
  • metastoreDb:在本实验中填写jdbc:mysql://172.17.0.2:3306/hive?useSSL=false。
  • 元数据用户名:在本实验中填写root。
  • 元数据密码:在本实验中填写hyfroot。

3.3 在新增数据源对话框中,测试连接成功之后,单击保存


4. 进行数据盘点

本步骤指导您如何使用MMA工具进行库资产管理和表资产管理。

  1. 库资产管理。

库资产管理功能:对数据源中数据库基本信息盘点(DB大小、表总数、视图个数、普通表个数、分区表个数和外部表个数等)。

1.1 在左侧导航栏中,单击资产管理

1.2 在库资产管理页签,单击新建盘点

1.3 在新建盘点对话框中,选择数据源为Hive,选择库为test,然后单击保存

1.4 在库资产管理页签,选择数据源DB名称盘点状态,然后单击查询

返回如下页面,您可查看成功盘点库的基本信息。

  1. 表资产管理。

表资产管理功能:对数据库中表资产基本信息盘点,查看来源表、表类型、分区字段名和盘点状态等信息。

2.1 在库资源管理页签,单击表资产管理

2.2 在表资产管理页签,单击新建盘点

2.3 在新建盘点对话框中,选择数据源为Hive,选择库为test,选择来源表为test.tb_test,然后单击保存

2.4 在表资产管理页签,选择数据源为Hive,DB名称为test,来源表为tb_test,盘点状态为已完成,然后单击查询

返回如下页面,您可查看成功盘点表的基本信息。


5. 创建同步任务

本步骤指导您如何通过创建同步任务将盘点完成的Hive数据源中DB信息及数据同步到MaxCompute环境中。

  1. 创建同步任务。

1.1 在左侧导航栏中,单击任务管理

1.2 在批次管理页签,单击新建任务

1.3 在配置源端、目标端的页面,迁移计划名称输入test01,批次号输入1,单击添加一行数据

1.4 在配置源端、目标端的页面,源端数据源配置区域中数据源分别选择为Hive和test,目标的数据源配置区域中数据源工作空间选择为MaxCompute和云产品资源列表中的MaxCompute工作空间名称,单击测试连通性。连接通过后单击下一步

1.5 在配置任务信息页面,迁移对象选择迁移结果与数据,迁移方式选择tunnel,单击下一步

1.6 在预览,完成配置页面,单击提交

返回如下页面,同步任务已创建成功,稍等片刻,同步任务即可完成。

  1. 通过查询条件提交同步任务。

2.1在左侧导航栏中,单击资产管理

2.2 在库资产管理页签,单击表资产管理

2.3 在表资产管理页签,选择数据源为Hive,DB名称为test,盘点状态为已完成,然后单击查询

2.4 在表资产管理页签,单击按查询新建批次

2.5 在配置源端、目标端的页面,迁移计划名称输入test02,批次号输入2,目标的数据源配置区域中数据源工作空间选择为MaxCompute和云产品资源列表中的MaxCompute工作空间名称,单击测试连通性。连接通过后单击下一步

2.6 在配置任务信息页面,迁移对象选择迁移结果与数据,迁移方式选择tunnel,单击下一步

2.7在预览,完成配置页面,单击提交


6. 查看任务运行状态及日志信息

  1. 通过批次管理查看任务完成情况。

批次管理页签,输入迁移计划名称批次号,单击查询

返回如下页面,您可查看到任务完成情况。

  1. 通过job列表查看任务完成情况及日志信息(包括已经删除的历史任务信息)。

2.1 在批次管理页签,单击job列表

2.2 在job列表,输入迁移计划名称批次号,单击查询

返回如下页面,您可查看到任务完成情况。

2.3 在job列表页签,找到您的迁移计划,单击JobId

返回如下页面,您可查看Job运行情况。

2.4 在Job运行情况页面,展开Task ID,选择任意的Action ID,然后单击右侧info列下的详情

返回如下页面,您可查看到日志信息。

2.5 在任务配置详情对话框中,复制MCInstanceTrackingURL到Chromium网页浏览器的地址栏中,并访问。

返回如下页面,您可查看到任务日志信息。


7. 失败处理

由于MMA会自动归档日志,以下grep命令请根据实际情况替换为zgrep命令。

说明:本步骤仅供阅读学习,无序操作体验。

一般的失败处理过程为:

  1. 查找导致失败的具体Action。

1.1 获取失败任务Job ID。

1.2 获取任务失败原因(对应 Task ID)。

1.3 根据Task ID获取失败Action。

  1. 查看文档中各种Action可能的失败原因及调查方法。

接下来我们对失败处理过程进行具体介绍:

  1. 查找导致失败的具体Action。

执行以下命令查看当前迁移失败的Job,获取Job ID。

$ path/to/mma/bin/mma-client --action ListJobs | grep FAILED Job ID: 2263e913e9ba4130ac1e930b909dafab, status: FAILED, progress: 0.00% OK
  1. 获得Job ID后可以执行以下命令获取失败的原因。
$ grep "Job failed" /path/to/mma/log/mma_server.LOG* | grep 2263e913e9ba4130ac1e930b909dafab 2021-08-19 13:50:54,141 INFO  [main] job.AbstractJob (AbstractJob.java:fail(310)) - Job failed, id: 2263e913e9ba4130ac1e930b909dafab, reason: com.aliyun.odps.mma.server.task.HiveToMcTableDataTransmiss ionTask failed, id(s): 492ef03d-d0e8-4cb3-afc4-6f540c2f420a.DataTransmission.part.0
  1. 通过以上日志,我们可以看到Job失败的原因是HiveToMcTableDataTransmissionTask的失败。通过这个Task ID可以进一步查看具体失败的Action。
$ grep 492ef03d-d0e8-4cb3-afc4-6f540c2f420a.DataTransmission.part.0 log/mma_server.LOG* | grep FAIL 2021-08-19 13:50:49,594 INFO  [main] action.AbstractAction (AbstractAction.java:setProgress(163)) -  Set action status, id: 492ef03d-d0e8-4cb3-afc4-6f540c2f420a.DataTransmission.part.0.DataTransmission,  from: RUNNING, to: FAILED

输出中会包含失败的Action信息,我们需要的是最后一条Set action status信息。综合以上信息,我们得出结论:是HiveToMcTableDataTransmissionTask中的DataTransmission Action(Action ID = Task ID + Action Name)导致任务失败。

接下来,我们将介绍各种Action可能的失败原因,以及调查方法。

Action 失败原因参考

  • CreateTable

这个Action失败通常因为MaxCompute中没有打开新类型开关,请参考准备工作中的MaxCompute配置一节。

调查方法:

根据ActionID在mma/log/task_runner.LOG中查找DDL 在MC中执行的logview。

$ grep "${ACTION_ID}" /path/to/mma/log/action_executor.LOG 2020-10-26 18:03:47,658 [ActionExecutor- #17] ActionId: 0df1368f-cbb5-4605-946e-c5ef8961dd87.SetUp.CreateTable,  InstanceId: 20201026100347413gvsu46pr2 2020-10-26 18:03:47,695 [ActionExecutor- #17] ActionId: 0df1368f-cbb5-4605-946e-c5ef8961dd87.SetUp.CreateTable,  LogView http://logview.odps.aliyun.com/logview/?h=http://service.cn.maxcompute.aliyun-inc.com/api&p=odps_mma_test&i=20201026100347413gvsu46pr2&token=SC83c2JOODVtWG9XT3BKSWxPZTNoNVdYM0R3PSxPRFBTX09CTzoxNTU4MzkxOTQ2NTYxODIxLDE2MDM5NjU4MjcseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL29kcHNfbW1hX3Rlc3QvaW5zdGFuY2VzLzIwMjAxMDI2MTAwMzQ3NDEzZ3ZzdTQ2cHIyIl19XSwiVmVyc2lvbiI6IjEifQ==

此时可以将在浏览器中打开logview URL,即可看到具体失败原因。

  • AddPartitions

这个Action可能因为元数据并发操作太多导致失败,在绝大多数情况下可以靠MMA自动重试解决,用户无需介入。

调查方法同CreateTable。

  • DataTransmission 这个Action可能的失败情况比较多,常见的如下:
  • Hive UDTF没有正确创建,请参考配置中创建UDTF部分。
  • 集群网络环境问题,MapReduce任务报错如UnknownHost(DNS 问题),或Connection Timeout(Endpoint 配置或路由问题)。
  • string超过8MB,这个问题请提交工单解决。
  • 脏数据,此时这张表或分区往往已经无法正常读出数据。
  • 并发数量高,压力大导致失败,由于MMA自动重试机制,这个问题目前很少出现。

调查方法:

首先,根据Action ID在mma/log/mma_server.LOG中查找报错。

$ grep "${ACTION_ID}" /path/to/mma/log/mma_server.LOG* | grep "stack trace" log/mma_server.LOG:2021-08-19 13:52:54,719 ERROR [main] action.AbstractAction (AbstractAction.java:afterExecution(138)) -  Action failed, actionId: f8a5952b-a634-4e16-a77c-8d47e58173f2.DataTransmission.part.0.DataTransmission,  stack trace: java.util.concurrent.ExecutionException: org.apache.hive.service.cli.HiveSQLException:  Error while compiling statement: FAILED: SemanticException Line 0:-1 Invalid function 'default.odps_data_dump_multi'

输出中会包含失败原因,以上的输出信息告诉我们Action失败是因为Hive UDTF没有正确创建。

如果失败原因为MapReduce Job执行失败,则需要查找MapReduce Job失败原因。根据Action ID 在mma/log/action_executor.LOG中查找Hive SQL的tracking URL,命令如下。

$ grep "${ACTION_ID}" /path/to/mma/log/action_executor.LOG 2020-10-26 16:38:20,116 [Thread-12] ActionId: 0df1368f-cbb5-4605-946e-c5ef8961dd87.DataTransmission.part.1.DataTransmission,  jobId:  job_1591948285564_0267 2020-10-26 16:38:20,116 [Thread-12] ActionId: 0df1368f-cbb5-4605-946e-c5ef8961dd87.DataTransmission.part.1.DataTransmission,  tracking url:  http://emr-header-1.cluster-177129:20888/proxy/application_1591948285564_0267/

根据上面的信息,可以在yarn上查找这个MapReduce Job的日志。

  • HiveDataVerification

这个Action失败通常与Hive集群相关。

调查方法:

根据Action ID在mma/log/action_executor.LOG中查找 Hive SQL的tracking URL:

$ grep "${ACTION_ID}" /path/to/mma/log/action_executor.LOG 2020-10-26 16:38:20,116 [Thread-12] ActionId: 0df1368f-cbb5-4605-946e-c5ef8961dd87.DataTransmission.part.1.HiveDataVerification,  jobId:  job_1591948285564_0267 2020-10-26 16:38:20,116 [Thread-12] ActionId: 0df1368f-cbb5-4605-946e-c5ef8961dd87.DataTransmission.part.1.HiveDataVerification,  tracking url:  http://emr-header-1.cluster-177129:20888/proxy/application_1591948285564_0267/
  • McDataVerification

这个Action失败通常与MC相关。

调查方法:

根据Action ID在mma/log/action_executor.LOG中查找DDL在MC中执行的logview:

$ grep "${ACTION_ID}" /path/to/mma/log/action_executor.LOG 2020-10-26 18:03:47,658 [ActionExecutor- #17] ActionId: 0df1368f-cbb5-4605-946e-c5ef8961dd87.DataTransmission.part.1.McDataVerification,  InstanceId: 20201026100347413gvsu46pr2 2020-10-26 18:03:47,695 [ActionExecutor- #17] ActionId: 0df1368f-cbb5-4605-946e-c5ef8961dd87.DataTransmission.part.1.McDataVerification,  LogView http://logview.odps.aliyun.com/logview/?h=http://service.cn.maxcompute.aliyun-inc.com/api&p=odps_mma_test&i=20201026100347413gvsu46pr2&token=SC83c2JOODVtWG9XT3BKSWxPZTNoNVdYM0R3PSxPRFBTX09CTzoxNTU4MzkxOTQ2NTYxODIxLDE2MDM5NjU4MjcseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL29kcHNfbW1hX3Rlc3QvaW5zdGFuY2VzLzIwMjAxMDI2MTAwMzQ3NDEzZ3ZzdTQ2cHIyIl19XSwiVmVyc2lvbiI6IjEifQ==

此时可以将在浏览器中打开logview URL,即可看到具体失败原因。

  • FinalVerification

这个Action失败通常因为MC和Hive中数据不一致,MMA的重试机制通常可以自动解决这个问题。

调查方法:

根据Action ID在mma/log/mma_server.LOG中查找日志:

$ grep "${ACTION_ID}" /path/to/mma/log/mma_server.LOG 2020-10-27 14:56:37,781 ERROR [Scheduler] action.AbstractAction (VerificationAction.java:call(77)) -  ActionId: 0df1368f-cbb5-4605-946e-c5ef8961dd87.DataTransmission.part.1.FinalVerification, verification failed, source: 1, dest: 2

实验链接:https://developer.aliyun.com/adc/scenario/c6868a89d7b946b3a9c5a81683e8dee6

相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
16天前
|
算法 大数据 数据库
云计算与大数据平台的数据库迁移与同步
本文详细介绍了云计算与大数据平台的数据库迁移与同步的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例及未来发展趋势与挑战。涵盖全量与增量迁移、一致性与异步复制等内容,旨在帮助读者全面了解并应对相关技术挑战。
27 3
|
5月前
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之需要将mysql 表(有longtext类型字段) 迁移到odps,但odps好像没有对应的类型支持,该怎么办
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
安全 关系型数据库 MySQL
揭秘MySQL海量数据迁移终极秘籍:从逻辑备份到物理复制,解锁大数据迁移的高效与安全之道
【8月更文挑战第2天】MySQL数据量很大的数据库迁移最优方案
606 17
|
5月前
|
存储 分布式计算 专有云
MaxCompute产品使用问题之阿里公有云的数据如何迁移到阿里专有云
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
59 10
|
5月前
|
存储 数据采集 NoSQL
DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
【6月更文挑战第4天】DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
139 1
|
5月前
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之新创建的工作空间,任务提交了,但是周期实例里面没任何数据,是什么导致的
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
分布式计算 Oracle Hadoop
【大数据实训】—Hadoop开发环境搭建(一)
【大数据实训】—Hadoop开发环境搭建(一)
|
6月前
|
存储 数据采集 数据可视化
【大数据实训】python石油大数据可视化(八)
【大数据实训】python石油大数据可视化(八)
114 1
|
6月前
|
分布式计算 Hadoop Java
【大数据实训】基于Hadoop的2019年11月至2020年2月宁波天气数据分析(五)
【大数据实训】基于Hadoop的2019年11月至2020年2月宁波天气数据分析(五)
121 1
|
6月前
|
数据采集 搜索推荐 Java
【大数据实训】用Hbase模拟电影搜索引擎(四)
【大数据实训】用Hbase模拟电影搜索引擎(四)
99 1