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;
相关文章
|
4月前
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之需要将mysql 表(有longtext类型字段) 迁移到odps,但odps好像没有对应的类型支持,该怎么办
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
2月前
|
机器学习/深度学习 存储 人工智能
自动化是解决大数据迁移障碍的答案
自动化是解决大数据迁移障碍的答案
|
2月前
|
安全 关系型数据库 MySQL
揭秘MySQL海量数据迁移终极秘籍:从逻辑备份到物理复制,解锁大数据迁移的高效与安全之道
【8月更文挑战第2天】MySQL数据量很大的数据库迁移最优方案
474 17
|
4月前
|
存储 分布式计算 专有云
MaxCompute产品使用问题之阿里公有云的数据如何迁移到阿里专有云
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
56 10
|
4月前
|
存储 数据采集 NoSQL
DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
【6月更文挑战第4天】DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
135 1
|
4月前
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之新创建的工作空间,任务提交了,但是周期实例里面没任何数据,是什么导致的
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
分布式计算 Oracle Hadoop
【大数据实训】—Hadoop开发环境搭建(一)
【大数据实训】—Hadoop开发环境搭建(一)
|
5月前
|
存储 数据采集 数据可视化
【大数据实训】python石油大数据可视化(八)
【大数据实训】python石油大数据可视化(八)
108 1
|
5月前
|
分布式计算 Hadoop Java
【大数据实训】基于Hadoop的2019年11月至2020年2月宁波天气数据分析(五)
【大数据实训】基于Hadoop的2019年11月至2020年2月宁波天气数据分析(五)
117 1
|
5月前
|
数据采集 搜索推荐 Java
【大数据实训】用Hbase模拟电影搜索引擎(四)
【大数据实训】用Hbase模拟电影搜索引擎(四)
93 1