1.背景

公司自建的Hadoop集群,后期使用阿里的Maxcompute,就需要迁移数据到新环境中,阿里提供众多的迁移方案,在经过我们的实践后,最终选择了MMA,迁移数据Hive到Maxcompute。

2.MMA介绍

MMA(MaxCompute Migration Assist)是一款MaxCompute数据迁移工具。

在 Hive 迁移至 MaxCompute 的场景下,MMA 实现了 Hive 的 UDTF,通过 Hive 的分布式能力,实现 Hive 数据向 MaxCompute 的高并发传输。

这种迁移方式的优点有:

  • 读数据由 Hive 自身完成,因此可以被 Hive 读的数据(包括 Hive 外表),都可以用 MMA 向 MaxCompute 迁移,且不存在任何数据格式问题
  • 支持增量数据迁移
  • 迁移效率高,迁移速率可以随资源分配线性提高

这种迁移方式的前置条件有:

  • Hive 集群各节点需要具备访问 MaxCompute 的能力

架构与原理

当用户通过 MMA client 向 MMA server 提交一个迁移 Job 后,MMA 首先会将该 Job 的配置记录在元数据中,并初始化其状态为 PENDING。

随后,MMA 调度器将会把这个 Job 状态置为 RUNNING,向 Hive 请求这张表的元数据,并开始调度执行。这个 Job 在 MMA 中会被拆分为若干 个 Task,每一个 Task 负责表中的一部分数据的传输,每个 Task 又会拆分为若干个 Action 进行具体传输和验证。在逻辑结构上,每一个 Job 将会包含若干个 Task 组成的 DAG,而每一个 Task 又会包含若干个 Action 组成的 DAG。整体的流程大致如下:

┌──────────────────────────────────────────────────────────────────────────────────────────────-┐│                                     HiveToMcTableJob                                         ││                                                                                               ││ ┌───────────────────────────┐                                                                ││ │         SetUpTask         │     ┌────────────────────────────────────────────────────────┐ ││ │                           │     │               TableDataTransmissionTask                │ ││ │      DropTableAction      │     │                                                        │ ││ │             |             │     │              TableDataTransmissionAction(数据传输)     │ ││ │     CreateTableAction     ├────►│                   |               |                    │ ││ │             |             │     │ HiveVerificationAction          McVerificationAction   │ ││ │    DropPartitionAction    │     │                   |               |                    │ ││ │             |             │     │                   VerificationAction(对比验证结果)      │ ││ │     AddPartitionAction    │     └────────────────────────────────────────────────────────┘ ││ └───────────────────────────┘                                                                ││                                                                                              │└──────────────────────────────────────────────────────────────────────────────────────────────┘

官方文档:https://github.com/aliyun/alibabacloud-maxcompute-tool-migrate/blob/master/documents/HiveToMaxCompute_zh_v0.1.0.md

3.安装

3.1下载解压

版本选择跟自己的Hive版本相符即可。这里选择mma-0.1.1-hive-2.x.zip

下载链接:https://github.com/aliyun/alibabacloud-maxcompute-tool-migrate/releases

下载解压后:

[root@bigdata-01 mma]# unzip mma-0.1.1-hive-2.x.zip
[root@bigdata-01 mma]# cd mma-0.1.1
[root@bigdata-01 mma-0.1.1]# pwd
/data/soft/mma/mma-0.1.1
[root@bigdata-01 mma-0.1.1]# ll
total 20
drwxr-xr-x 2 root root 4096 Mar 28 12:01 bin
drwxr-xr-x 2 root root 4096 Sep 19  2021 conf
drwxr-xr-x 5 root root 4096 Apr 22 16:25 lib
drwxr-xr-x 3 root root 4096 Apr 22 16:25 res
-rw-r--r-- 1 root root    5 Apr 22 16:25 version.txt
[root@bigdata-01 mma-0.1.1]#

后面操作失败的,可以试试这个版本:

链接: https://pan.baidu.com/s/1WMHTrnzVqRDqqjJuVI5nyw 提取码: 38f6

3.2配置 MMA server

解压安装包之后,运行配置引导脚本:/data/soft/mma/mma-0.1.1/bin

[root@bigdata-01 bin]# ./configure
Hive configurations
Please input Hive metastore URI(s):
HELP: See: "hive.metastore.uris" in hive-site.xml
EXAMPLE: thrift://localhost:9083
>{thrift}
Please input Hive JDBC connection string
HELP: Same as the connection string used in beeline, which starts with jdbc:hive2
EXAMPLE: jdbc:hive2://localhost:10000
>{hive2}
Please input Hive JDBC user name
HELP: Same as the user name used in beeline. The default value is "Hive"
EXAMPLE: Hive
>{username}
Please input Hive JDBC password
HELP: Same as the password used in beeline
>{password}
Hive security configurations
Has Kerberos authentication? (Y/N)
>{isKerberos}
MaxCompute configurations
Please input MaxCompute endpoint
HELP: See: https://help.aliyun.com/document_detail/34951.html
EXAMPLE: http://service.cn.maxcompute.aliyun-inc.com/api
>{maxComputeEndpoint}
Please input MaxCompute project name
HELP: The target MaxCompute project
>{maxComputeProject}
Please input Alibaba cloud accesskey id
HELP: See: https://help.aliyun.com/document_detail/27803.html
>{accesskeyId}
Please input Alibaba accesskey secret
HELP: See: https://help.aliyun.com/document_detail/27803.html
>{accesskeySecret}
Generating MMA server configuration
MMA server configuration file path: /data/soft/mma/mma-0.1.1/conf/mma_server_config.json
Validating MMA server configurations
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/data/soft/mma/mma-0.1.1/lib/client/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/data/soft/mma/mma-0.1.1/lib/connector/hive-uber.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
log4j:WARN No appenders could be found for logger (org.apache.hadoop.util.Shell).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Passed
Please execute the following commands manually to create required Hive UDTF
Upload Hive UDTF resource jar to HDFS:
hdfs dfs -put -f /data/soft/mma/mma-0.1.1/lib/data-transfer-hive-udtf-0.1.1-jar-with-dependencies.jar hdfs:///tmp/
Create Hive function in beeline:
DROP FUNCTION IF EXISTS default.odps_data_dump_multi;
CREATE FUNCTION default.odps_data_dump_multi as 'com.aliyun.odps.mma.io.McDataTransmissionUDTF' USING JAR 'hdfs:///tmp/data-transfer-hive-udtf-0.1.1-jar-with-dependencies.jar';
Press "ENTER" to confirm that the Hive UDTF has been created successfully
>
Congratulations! The configuration is completed!
[root@bigdata-01 bin]#

参数说明:
{thrift}:见 hive-site.xml 中"hive.metastore.uris"

{hive2}:通过 beeline 使用 Hive 时输入的 JDBC 连接串,必须为 default 库, 前缀为 jdbc:hive2

{username}:通常通过 beeline 使用 Hive 时输入的 JDBC 连接用户名, 默认值为 Hive

{password}:通常通过 beeline 使用 Hive 时输入的 JDBC 连接密码, 默认值为空

{isKerberos}:在使用 Kerberos 的情况下,需要配置其他参数,这里否

{maxComputeEndpoint}:经典网络Endpoint

{maxComputeProject}:建议配置为目标 MaxCompute project, 规避权限问题

{accesskeyId}:阿里云 accesskey id

{accesskeySecret}:阿里云 accesskey secret

3.3创建 Hive 函数

配置过程中还需要将某些文件上传至 HDFS,并在 beeline 中创建 MMA 需要的 Hive 永久函数。MMA 配置引导脚本会自动生成需要执行的命令,直接复制粘贴到安装有 hdfs 命令与 beeline 的服务器上执行即可。命令示例如下:

上传 Hive UDTF Jar 包至 HDFS:

hdfs dfs -put -f ${MMA_HOME}/res/data-transfer-hive-udtf-${MMA_VERSION}-jar-with-dependencies.jar hdfs:///tmp/

使用 beeline 创建 Hive 函数:

DROP FUNCTION IF EXISTS default.odps_data_dump_multi;
CREATE FUNCTION default.odps_data_dump_multi as 'com.aliyun.odps.mma.io.McDataTransmissionUDTF' USING JAR 'hdfs:///tmp/data-transfer-hive-udtf-${MMA_VERSION}-jar-with-dependencies.jar';

4.使用

4.1启动 MMA server

MMA server 进程在迁移期间应当一直保持运行。若 MMA server 因为各种原因中断了运行,直接执行以下命令重启即可。MMA server 进程在一台服务器最多只能存在一个。默认端口为 18889

/bin/mma-server

启动成功后,MMA支持WebUI:http://${hostname}:18888

4.2生成任务配置

在生成配置任务前,需要先组织临时映射文件,有表级别和库级别,这里演示表级别,复制模板

[root@bigdata-01 ~]# cd /data/soft/mma/mma-0.1.1/conf/
[root@bigdata-01 conf]# cp table_mapping.txt.template table_mapping.txt

然后修改映射文件:vim table_mapping.txt

# generated for each of the following lines. Take the first line for an example, the source
# catalog(or database) and table are 'source_catalog' and 'source_table1', while the destination
# MaxCompute project and table are 'dest_pjt' and 'dest_table1'.
# 通过bin/gen-job-conf工具,以下每一行一行将会分别生成一个表迁移任务配置文件。每一行中,冒号(:)前后分别为源表和目标表
# 的全名。全名的格式为库名.表名,如source_catalog.source_table1:dest_pjt.dest_table1表示源表为source_catalog
# 库中的表source_table1,目标表为dest_pjt项目下的表dest_table1。
db_assets_pool.t_abs_payable:edy_dbwarehouse.db_assets_pool_t_abs_payable_mma
db_assets_pool.t_assets_device_backup:edy_dbwarehouse.db_assets_pool_t_assets_device_backup_mma
db_assets_pool.t_customer_received:edy_dbwarehouse.db_assets_pool_t_customer_received_mma

然后执行生成任务命令:

/bin/gen-job-conf --objecttype TABLE --tablemapping ${table_mapping_file}

其他参数

-jobid:可以指定 Job ID

-output:可以指定配置文件输出路径,不指定会默认生成到/conf目录下${objectType}-${sourceCatalog}-${destCatalog}-${job_id}.json

修改配置

生成配置文件后,需要指定迁移分区

{"mma.filter.partition.begin":"2020-01-01","mma.filter.partition.end":"2020-05-01","mma.filter.partition.orders":"lex"
}

修改后:

{"mma.object.source.catalog.name": "db_core_assets","mma.object.source.name": "b_asset","mma.object.type": "TABLE","mma.object.dest.catalog.name": "edy_dbwarehouse","mma.object.dest.name": "db_core_assets_b_asset_mma","mma.filter.partition.begin":"2020-01-01","mma.filter.partition.end":"2020-05-01","mma.filter.partition.orders":"lex"
}

4.3提交任务

/bin/mma-client --action SubmitJob --conf

4.4查看任务状态

先查看所有迁移任务列表:

/bin/mma-client --action ListJobs
Job ID: 2263e913e9ba4130ac1e930b909dafab, status: FAILED, progress: 0.00%
Job ID: cf2c5f2f335041a1a1729b340c1d5fde, status: SUCCEEDED, progress: 0.00%
OK
/bin/mma-client --action GetJobInfo --jobid YOUR_JOB_ID

4.5其他命令

停止任务

/bin/mma-client --action StopJob --jobid YOUR_JOB_ID

重置任务

  • 状态为 SUCCEEDED FAILED CANCELED 三种状态下的任务可以被重置
  • 当需要增量同步时,重置 SUCCEEDED 状态下的任务
  • 当需要重试失败任务时,重置 FAILED CANCELED 状态下的任务
/bin/mma-client --action ResetJob --jobid YOUR_JOB_ID

删除任务

/bin/mma-client --action DeleteJob --jobid YOUR_JOB_ID

5.优化

为了更自动化执行任务,生成任务配置,修改分区,提交任务,分别编写以下脚本

首先最新目录结构如下,db_crm,db_risk是对应的任务配置目录,后期再有其他库,可按照此方式添加

MMA_HOME
└── bin├── configure                     # 生成 mma server 配置的工具├── gen-job-conf           # 生成任务配置的工具├── mma-client               # 客户端命令行工具└── mma-server                # 服务端命令行工具
└── conf├── gss-jaas.conf.template                  ├── mma_server_config.json.template                 └── table_mapping.txt.template└── db_crm├── finished             # 完成的任务存放目录        ├── table_mapping.txt    # 任务配置文件└── TABLE-*              # 生成的任务json文件└── db_risk├── finished             # 完成的任务存放目录      ├── table_mapping.txt    # 任务配置文件└── TABLE-*              # 生成的任务json文件

5.1 生成配置任务脚本

vim /data/soft/mma/mma-0.1.0/bin/mma_gen_job

#!/bin/bash
#desc: 生成任务jobpcount=$#
if((pcount==0)); then
echo no args;
exit;
fimma=/data/soft/mma/mma-0.1.0
db=$@ #所dd有参数
echo  $db
$mma/bin/gen-job-conf  --objecttype TABLE --output $mma/conf/$db --tablemapping $mma/conf/$db/table_mapping.txt

使用示例:mma_gen_job db_crm

[root@data-es21 db_crm]# mma_gen_job db_crm
db_crm
mma_1bee5728-e5a3-4735-8818-9070ef47d0c1
Job configuration generated: /data/soft/mma/mma-0.1.0/conf/db_crm/TABLE-db_crm.t_visit_record-edy_dbwarehouse.db_crm_t_visit_record_mma-1658900626169.json
[root@data-es21 db_crm]# ll
total 12
drwxr-xr-x 2 root root 4096 Jul 27 11:44 done
-rw-r--r-- 1 root root  232 Jul 27 13:43 TABLE-db_crm.t_visit_record-edy_dbwarehouse.db_crm_t_visit_record_mma-1658900626169.json
-rw-r--r-- 1 root root  794 Jul 27 13:38 table_mapping.txt

完成后,将生成json文件,目录在 /conf/{db}下

5.2 添加分区任务

任务脚本生成之后,需要添加分区

vim /data/soft/mma/mma-0.1.0/bin/mma_modify_job

#!/bin/bash
#desc: 修改任务文件,添加分区范围pcount=$#
if((pcount <3)); then
echo no args;
exit;
fi#获取文件名称
p1=$1
fname=`basename $p1`
fname_bak=`basename $p1`_bak
echo fname=$fname#获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir#分区开始时间
p2=$2
#分区结束时间
p3=$3#自定义jobid
uuid=`cat /proc/sys/kernel/random/uuid`
jobid=ods_`echo ${uuid//-/}`
#新的json文件名
nfname=`echo $fname |cut -d"-" -f1-3`-"$jobid".json
echo "最新json文件名"$nfname
echo "任务jobid为:"$jobidmma=/data/soft/mma/mma-0.1.0/bin
#提交任务
cat $pdir/$fname | jq '. + {"mma.filter.partition.begin":"'$p2'","mma.filter.partition.end":"'$p3'","mma.filter.partition.orders":"lex","mma.job.id":"'$jobid'"}' >> $pdir/$fname_bak
#重新生成json文件
rm -rf $pdir/$fname
cat $pdir/$fname_bak >> $pdir/$nfname
rm -rf $pdir/$fname_bak

使用示例:

mma_modify_job TABLE-db_crm.t_visit_record-edy_dbwarehouse.db_crm_t_visit_record_mma-1658902900181.json 2015-01-01 2022-05-01

[root@data-es21 db_crm]# mma_modify_job TABLE-db_crm.t_visit_record-edy_dbwarehouse.db_crm_t_visit_record_mma-1658902900181.json 2015-01-01 2022-05-01
fname=TABLE-db_crm.t_visit_record-edy_dbwarehouse.db_crm_t_visit_record_mma-1658902900181.json
pdir=/data/soft/mma/mma-0.1.0/conf/db_crm
最新json文件名TABLE-db_crm.t_visit_record-edy_dbwarehouse.db_crm_t_visit_record_mma-mma_f45c37bd31f64775b73bd6f88518ad07.json
任务jobid为:mma_f45c37bd31f64775b73bd6f88518ad07

5.3 提交任务脚本

vim /data/soft/mma/mma-0.1.0/bin/mma_submit_job

#!/bin/bash
#desc: 提交单个mma任务pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi#获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname#获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdirmma=/data/soft/mma/mma-0.1.0/bin
#提交任务
nohup $mma/mma-client --action SubmitJob --conf $pdir/$fname 2>&1 &

使用示例

mma_submit_job TABLE-db_crm.t_call_log_current-edy_dbwarehouse.db_crm_t_call_log_current_mma-mma_1b37cda58bd446afabe355a86d488309.json

5.4查看任务脚本

vim /data/soft/mma/mma-0.1.0/bin/mma_getinfo_job

#!/bin/bash
#desc: 查看任务列表mma=/data/soft/mma/mma-0.1.0
$mma/bin/mma-client --action GetJobInfo --jobid $1

5.5一键批量迁移任务

以上各脚本是单独执行,下面把这些脚本合成到一个脚本中,实现更加自动化的操作。

目前按照一个库迁移。

迁移步骤

  • mapping映射文件需要手动一次性完成,文件目录:/data/soft/mma/mma-0.1.0/conf/db_crm/table_mapping.txt
  • 根据映射文件生成json配置文件,对应一个表的迁移,使用脚本:mma_gen_job
  • 根据json配置文件添加迁移分区,按照年迁移,一个json配置文件可生成多个,表示一个表对应多个迁移任务,使用脚本:mma_modify_job
  • 按照顺序提交任务,使用脚本:mma_submit_job

vim /data/soft/mma/mma-0.1.0/bin/mma_batch_job

#!/bin/bash
#desc: 一键批量迁移任务
# 1.生成任务
# 2.添加分区
# 3.提交任务
# 参数 $1:数据库  $2:分区开始  $3:分区结束pcount=$#
#分区开始时间
p2=2015-01-01
#分区结束时间
p3=2022-05-01
if((pcount==1)); thenecho "批量迁移$1,默认迁移分区:$p2~$p3";
elif((pcount==3)); then#分区开始时间p2=$2#分区结束时间p3=$3
elseecho "命令实例:mma_batch_job db_crm 2015-01-01 2022-01-01"echo "或者:mma_batch_job db_crm,不填分区,会使用默认分区"exit;
fifunction ding_alert() {webhook="https://oapi.dingtalk.com/robot/send?access_token=钉钉群机器人"curl ${webhook} \-H 'Content-Type: application/json' \-d '{"msgtype": "text","text": {"content": "'$1'"}}'
}path=/data/soft/mma/mma-0.1.0/conf/$1echo "批量迁移任务 $1 >> 开始分区:$p2,结束分区:$p3"mma=/data/soft/mma/mma-0.1.0/bin
#根据映射文件生成配置任务
$mma/mma_gen_job $1#添加分区
for fname in $path/TABLE*
doif [[ $fname =~ "ods_" ]];# 包含ods_则表示已经添加了分区,跳过即可then continuefiecho "添加任务分区:$fname"$mma/mma_modify_job $fname $p2 $p3
done#提交任务
for fname in $path/TABLE*
doif [[ $fname =~ "ods_" ]]; thenecho "提交任务:$fname"$mma/mma_submit_job $fnameding_alert "迁移任务提交:$fname"fi
done

使用示例:mma_batch_job db_crm,或者:mma_batch_job db_crm 2015-01-01 2022-05-01

5.6监测任务进度

前面已经指定,完成的配置任务单独备份到 finished 目录下,这里加一个监测任务进度的脚本,成功后将配置迁移走

vim /data/soft/mma/mma-0.1.0/bin/mma_check_job

#!/bin/bash
#desc: 查看mma任务状态,如果成功,则将配置任务移动到finished目录下
#需要走定时,是环境变量生效
source /etc/profilepath=/data/soft/mma/mma-0.1.0/conf
mma=/data/soft/mma/mma-0.1.0/binfunction ding_alert() {webhook="https://oapi.dingtalk.com/robot/send?access_token=钉钉群机器人"curl ${webhook} \-H 'Content-Type: application/json' \-d '{"msgtype": "text","text": {"content": "'$1\ $2'"}}'
}#循环每个库的配置任务是否完成
for db in $path/db*
doecho "监测的库:"$dbfor fname in $db/TABLE*doif [[ $fname =~ "ods_" ]]; thenecho "json配置任务:"$fnamejobid=`echo "$fname"|cut -d'-' -f5|cut -d'.' -f1`echo "获取任务jobid:"$jobidecho "获取任务进度..."result=`$mma/mma_getinfo_job $jobid |grep "status:"|awk -F ' ' '{print $NF}'`echo "当前任务进度:$result"dt=$(date +'%Y-%m-%d %H:%M:%S')if [[ $result == 'SUCCEEDED' ]];thenecho "完成时间:$dt"echo "任务同步完成,完成时间:$dt,将任务移动到finished目录下"mv $fname $db/finishedmsg="迁移任务<"$fname">已完成,完成时间:"$dt""ding_alert $msgelif [[ $result != 'PENDING' && $result != 'RUNNING' && $result != 'SUCCEEDED' && $result != 'FAILED' && $result != 'CANCELED'  ]];thenecho "未获取到任务进度,尝试重新提交任务..."$mma/mma_submit_job $fnamefifidone
done

6.问题排查

查找导致失败的具体 Action

获取失败的jobid

/bin/mma-client --action ListJobs | grep FAILED

[root@data-es21 log]# ../bin/mma-client --action ListJobs | grep FAILED
Job ID: mma_1b37cda58bd446afabe355a86d488309, status: FAILED, progress: 0.00%
Job ID: 4bdc8676092a4dbc9dfd509936a03c07, status: FAILED, progress: 0.00%
OK

获得 Job ID 后可以执行以下命令获取失败的原因

grep "Job failed" /log/mma_server.LOG | grep mma_1b37cda58bd446afabe355a86d488309

[root@data-es21 log]# grep "Job failed" mma_server.LOG|grep mma_1b37cda58bd446afabe355a86d488309
2022-07-27 15:10:46,960 INFO  [main] job.AbstractJob (AbstractJob.java:fail(326)) - Job failed, id: mma_1b37cda58bd446afabe355a86d488309, reason: com.aliyun.odps.mma.server.task.HiveToMcTableDataTransmissionTask failed, id(s): 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.3,2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.6,2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.7
2022-07-27 15:21:39,333 INFO  [main] job.AbstractJob (AbstractJob.java:fail(326)) - Job failed, id: mma_1b37cda58bd446afabe355a86d488309, reason: com.aliyun.odps.mma.server.task.HiveToMcTableDataTransmissionTask failed, id(s): 7b0ae9cc-5cb7-4a3d-81c4-381a31ccf1c8.DataTransmission.part.0,7b0ae9cc-5cb7-4a3d-81c4-381a31ccf1c8.DataTransmission.part.1,7b0ae9cc-5cb7-4a3d-81c4-381a31ccf1c8.DataTransmission.part.2
2022-07-27 15:32:36,619 INFO  [main] job.AbstractJob (AbstractJob.java:fail(326)) - Job failed, id: mma_1b37cda58bd446afabe355a86d488309, reason: com.aliyun.odps.mma.server.task.HiveToMcTableDataTransmissionTask failed, id(s): 2618bc2e-da37-421b-afd1-ca1c55cf3941.DataTransmission.part.0,2618bc2e-da37-421b-afd1-ca1c55cf3941.DataTransmission.part.1,2618bc2e-da37-421b-afd1-ca1c55cf3941.DataTransmission.part.2
[root@data-es21 log]#

获取失败的Action

grep 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.3 mma_server.LOG | grep FAIL

[root@data-es21 log]# grep 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.3 mma_server.LOG | grep FAIL
2022-07-27 14:58:19,139 ERROR [main] action.AbstractAction (AbstractAction.java:afterExecution(135)) - Action failed, actionId: 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.3.DataTransmission, stack trace: java.util.concurrent.ExecutionException: java.sql.SQLException: org.apache.hive.service.cli.HiveSQLException: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
2022-07-27 14:58:19,139 INFO  [main] action.AbstractAction (AbstractAction.java:setProgress(160)) - Set action status, id: 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.3.DataTransmission, from: RUNNING, to: FAILED
2022-07-27 14:58:19,139 INFO  [main] task.DagTask (DagTask.java:setStatus(92)) - Set task status, id: 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.3, from: RUNNING, to: FAILED
2022-07-27 14:58:20,460 INFO  [main] server.JobScheduler (JobScheduler.java:handleTerminatedActions(245)) - Action terminated, id: 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.3.DataTransmission, status: FAILED
2022-07-27 14:58:30,547 INFO  [main] server.JobScheduler (JobScheduler.java:handleTerminatedTasks(202)) - Task terminated, id: 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.3, status: FAILED
2022-07-27 15:11:17,880 INFO  [main] job.JobManager (JobManager.java:listSubJobsByStatus(736)) - List sub jobs by status, parent job id: basics: mma_1b37cda58bd446afabe355a86d488309, TABLE, Hive, Hive, MaxCompute, MaxCompute, db_crm, t_call_log_current, PENDING, extended: 98a44535-3bb8-4465-894a-791a557d8095.SetUp, SUCCEEDED, 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.0, SUCCEEDED, 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.1, SUCCEEDED, 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.2, SUCCEEDED, 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.3, FAILED, 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.4, SUCCEEDED, 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.5, SUCCEEDED, 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.6, FAILED, 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.7, FAILED, 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.8, SUCCEEDED, status: PENDING
[root@data-es21 log]#

Action失败类型,这里是DataTransmission,继续查找错误

grep 2ba83078-9db8-4d68-bf4c-f63aa60139bf.DataTransmission.part.3 mma_server.LOG | grep "stack trace"

按照这个步骤基本上可以确定错误原因。

更多请在公号平台搜索:选手一号位,本文编号:2006,回复即可获取。

MMA安装及使用优化相关推荐

  1. 阿里云主机安装Memcached扩展优化WordPress

    2019独角兽企业重金招聘Python工程师标准>>> 前言 最近发现阿里云主机在使用中,并发访问量稍大,页面加载速度就很慢.于是学习了一些服务器优化的文章,决定安装Memcache ...

  2. ubuntu18.04安装chrome和优化界面

    一分钟安装教程chrome教程! 1.将下载源加入到系统的源列表(添加依赖) sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P ...

  3. 服务器最小化安装后的优化脚本

    服务器最小化安装后的优化脚本,此脚本在CentOS[5.5-5.8] x86_64系统下测试均顺利通过, 由于现在Linux服务器系统都是采用Kickstart批量安装的方式,此脚本可以由Puppet ...

  4. mysql 5.1.53_mysql 5.1.53免安装版的优化配备和精简

    mysql 5.1.53免安装版的优化配置和精简 [摘要]MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内.这样就增加了速度并提高了灵活性.本文介 ...

  5. 高洛峰mysql_【干货】MySQL 安装与安全优化

    Ubuntu 环境下 MySQL 安装与安全优化 sudo apt-get updatesudo apt-get install mysql-server mysql-client  # 设置root ...

  6. Tigo Energy通过Stark Renováveis安装案例向巴西安装商展示优化技术

    该电气分销商在其位于巴西中部的总部安装带有Tigo优化器的商用太阳能系统 加州坎贝尔--(美国商业资讯)--太阳能行业领先的柔性组件级电力电子(FlexMLPE)供应商TigoEnergy, Inc. ...

  7. ssd 安装linux 教程,在Ubuntu中操作SSD固态驱动器的安装步骤和优化技巧

    毫无疑问,SSD硬盘对我们计算机的重要性.好的SSD硬盘驱动器可以帮助我们节省大量计算机空间.一些朋友在网络上提问.需要在Ubuntu系统中安装使用SSD固态驱动器.优化时,我不知道如何设置.关于这个 ...

  8. office ubuntu图形操作_Ubuntu16.04安装完初级优化步骤

    ## ubuntu16.04 安装后初级优化 -1.安装 netselect ,用其测试哪个源最快(或者直接跳转到 0 步骤) sudo dpkg -i netselect_0.3.ds1-26_am ...

  9. 【电商数仓】数仓即席查询之Presto简介,安装,Presto优化之数据存储、查询SQL、一些注意事项

    文章目录 一 Presto简介 1 Presto概念 2 Presto架构 3 Presto优缺点 4 Presto.Impala性能比较 二 Presto安装 1 Presto Server安装 2 ...

最新文章

  1. 图片的奇怪Cache_MISS原因!
  2. c# Process类使用小例
  3. Yarn基本架构和工作机制
  4. 赌场圣手(从不失手)——隐马尔可夫!
  5. runas/cpau/lsrunase使用小结(以管理员运行指定程序)
  6. Flutter社区和资源传送门
  7. Java中instanceof与getClass的区别
  8. 风变编程python第一关_风变编程【学习笔记】,第8关学习心得及代码扩展
  9. 【javascript笔记】关于javascript中的闭包
  10. 转:MOSS 中的计算公式
  11. 计算机新生导论感言,新生入学感言范文精选
  12. 【Leccture 4.1】Classes and Objects - the Basics
  13. 电商(一) 创建订单业务流程
  14. 批量插入图片到Excel中批注中,Excel插件 E灵
  15. 物联网-电力监控平台(汇总)
  16. Cesium加载OpenStreetMap
  17. 山寨免费软件的阴谋!
  18. 华为路由器命令手册_用数据说话,华为路由Q2 Pro与网件R7800对比测评
  19. 4大领域、33篇课题成果,2021阿里研究生态报告集来了
  20. 按照计算机名共享打印机,添加网络共享打印机

热门文章

  1. 主板CMOS电池异常耗电维修一例
  2. 光电耦合器的工作原理以及应用
  3. MySQL下载和安装教程--windows版
  4. Docker容器化技术笔记
  5. outlook2007 菜单灰色 不能使用的解决方案
  6. 163VIP邮箱如何注册?163VIP企业邮箱申请介绍!
  7. java使用poi给excel文件插入数据
  8. 航空工装的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. XX市智慧环卫管理系统解决方案V1.0
  10. 论文翻译-Scene Text Detection and Recognition: The Deep Learning Era