MMA大数据迁移实训
1. 创建实验资源
开始实验之前,您需要先创建实验相关资源。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。
说明:资源创建过程需要3~5分钟。
2. 启动MMA
本步骤指导您如何启动并登录大数据迁移工具MMA。
说明:本实验已在云服务器ECS中安装好大数据迁移工具MMA和相关服务。
- 在实验室页面右侧,单击图标,切换至Web Terminal。
- 在Web Terminal终端中,执行如下命令,启动容器。
docker start cf4a0b2a433f
- 执行如下命令,进入容器。
docker exec -it hadoop_centos /bin/bash
- 执行如下命令,启动MySQL服务。
service mysql start
- 执行如下命令,source环境变量生效。
source /etc/profile
- 执行如下命令,启动hadoop集群服务。
start-dfs.sh start-yarn.sh
- 执行如下命令,启动hive服务。
说明:如下两个命令执行之后,按回车可继续。
nohup hiveserver2 & hive --service metastore -p 9083 &
- 修改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配置文件。
- 执行如下命令,启动mma服务。
cd /usr/local/mma-0.1.0/bin/ ./mma-server
- 执行如下命令,修改nginx对应访问ip。
vim /etc/nginx/conf.d/mma.conf
- 按i键进入编辑模式,将proxy_pass参数的ip修改为云产品资源列表中云服务器ECS的弹性ip。
- 修改完成后,按ECS键退出编辑模式,输入:wq然后回车,保存文件并退出。
- 执行如下命令,启动nginx。
cd /usr/sbin/ ./nginx
- 在实验室页面右侧,单击,切换至远程桌面。
- 在远程桌面,双击打开Chromium网页浏览器。
- 在Chromium网页浏览器打开新页签,在地址栏中输入并访问http://<ECS弹性IP>:8081。
说明:您需要将<ECS弹性IP>替换为云产品资源列表中的云服务器ECS的弹性IP。
返回如下页面,表示您已成功登录MMA。
3. 创建数据源
本步骤指导您如何在迁移工具MMA上创建Hive数据源和MaxCompute数据源,通过创建Hive数据源来选择迁移源端,创建MaxCompute数据源来选择迁移的目标端。
- 在左侧导航栏,单击数据源管理。
- 配置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 在新增数据源对话框中,测试连接成功之后,单击保存。
- 配置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工具进行库资产管理和表资产管理。
- 库资产管理。
库资产管理功能:对数据源中数据库基本信息盘点(DB大小、表总数、视图个数、普通表个数、分区表个数和外部表个数等)。
1.1 在左侧导航栏中,单击资产管理。
1.2 在库资产管理页签,单击新建盘点。
1.3 在新建盘点对话框中,选择数据源为Hive,选择库为test,然后单击保存。
1.4 在库资产管理页签,选择数据源、DB名称和盘点状态,然后单击查询。
返回如下页面,您可查看成功盘点库的基本信息。
- 表资产管理。
表资产管理功能:对数据库中表资产基本信息盘点,查看来源表、表类型、分区字段名和盘点状态等信息。
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.2 在批次管理页签,单击新建任务。
1.3 在配置源端、目标端的页面,迁移计划名称输入test01,批次号输入1,单击添加一行数据。
1.4 在配置源端、目标端的页面,源端数据源配置区域中数据源和库分别选择为Hive和test,目标的数据源配置区域中数据源和工作空间选择为MaxCompute和云产品资源列表中的MaxCompute工作空间名称,单击测试连通性。连接通过后单击下一步。
1.5 在配置任务信息页面,迁移对象选择迁移结果与数据,迁移方式选择tunnel,单击下一步。
1.6 在预览,完成配置页面,单击提交。
返回如下页面,同步任务已创建成功,稍等片刻,同步任务即可完成。
- 通过查询条件提交同步任务。
2.1在左侧导航栏中,单击资产管理。
2.2 在库资产管理页签,单击表资产管理。
2.3 在表资产管理页签,选择数据源为Hive,DB名称为test,盘点状态为已完成,然后单击查询。
2.4 在表资产管理页签,单击按查询新建批次。
2.5 在配置源端、目标端的页面,迁移计划名称输入test02,批次号输入2,目标的数据源配置区域中数据源和工作空间选择为MaxCompute和云产品资源列表中的MaxCompute工作空间名称,单击测试连通性。连接通过后单击下一步。
2.6 在配置任务信息页面,迁移对象选择迁移结果与数据,迁移方式选择tunnel,单击下一步。
2.7在预览,完成配置页面,单击提交。
6. 查看任务运行状态及日志信息
- 通过批次管理查看任务完成情况。
在批次管理页签,输入迁移计划名称和批次号,单击查询。
返回如下页面,您可查看到任务完成情况。
- 通过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命令。
说明:本步骤仅供阅读学习,无序操作体验。
一般的失败处理过程为:
- 查找导致失败的具体Action。
1.1 获取失败任务Job ID。
1.2 获取任务失败原因(对应 Task ID)。
1.3 根据Task ID获取失败Action。
- 查看文档中各种Action可能的失败原因及调查方法。
接下来我们对失败处理过程进行具体介绍:
- 查找导致失败的具体Action。
执行以下命令查看当前迁移失败的Job,获取Job ID。
$ path/to/mma/bin/mma-client --action ListJobs | grep FAILED Job ID: 2263e913e9ba4130ac1e930b909dafab, status: FAILED, progress: 0.00% OK
- 获得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
- 通过以上日志,我们可以看到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