MaxCompute 搬站的原理、实践以及常见问题

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 本文主要介绍了Hadoop到MaxCompute数据迁移的多种方式及其原理和适用场景,并着重介绍了使用MaxCompute Migrate Assist (MMA)进行数据迁移时的常见问题及解法。

MaxCompute 是阿里巴巴自研的旗舰大数据仓库服务,与开源 Hadoop 搭建的数仓相比,一个很大的不同点是 MaxCompute 并不直接开放类似 HDFS 这样的分布式文件系统的接口,数据进出 MaxCompute 都要经由结构化数据通道 Tunnel。因此已经使用 Hadoop 建仓的用户在选择 MaxCompute 时,首先需要考虑的问题是数据怎么搬迁。

搬站形式和使用场景

目前其实有多种途径将数据迁移至 MaxCompute,下表分别列出各种途径的优缺点及适用场景:

搬迁形式 需要使用的工具/服务 原理 适用场景
数据集成 DataWorks 数据集成提供资源执行作业,拉取数据
- 数据集成支持的数据源
- 表数量有限(目前需要按表单独配置)
MMA: 闪电立方 MMA、闪电立方、OSS
1. 邮寄闪电立方设备进入用户机房进行本地拷贝
1. 闪电立方邮寄回阿里云并挂载到 OSS
1. MaxCompute 通过 OSS 外表机制导入数据

- MaxC 外表支持的文件格式
- 大数据量一次性搬迁
- 机房出口带宽受限或不具备安装专线条件
MMA: Hive SQL MMA 使用客户 Hadoop 集群资源执行 Hive SQL,通过 UDTF 的形式读取数据并写入 MaxCompute
- 最好的数据格式支持(包括 Hive 外表)
- 数据量有限或具备到阿里云的专线
- 现有集群能够承担搬站任务的资源负载

表格中的 MMA 为 MaxCompute Migrate Assist 的缩写,是一套辅助 Hadoop 用户搬迁数据的工具。这套工具可以自动化批量爬取 Hive Meta,创建对应的 MaxCompute 表和分区,为客户 Hadoop 集群生成配套的 Hive SQL 搬迁任务或为 OSS 外表生成 MaxCompute 外表导入任务,并能够自动调度、监督、管理这些任务的执行,以及数据搬迁完毕后的校验工作,从而大大简化搬站中的手工操作步骤。

本文主要讨论使用 MMA: Hive SQL 形式进行大规模数据搬站时的常见问题及解法。

MMA: Hive SQL 常见问题及解法

MMA 搬站工具的原理是在用户侧的 Hadoop 集群执行 Hive SQL读取数据,并使用 UDTF 通过 Tunnel 将数据写入 MaxCompute。因此,MMA 搬站任务重度依赖于 Hive SQL 在客户集群的正常运行,背后其实体现对 Hadoop 集群的管理运维水平。当集群负载较高或情况复杂时,搬站作业可能会因多种原因失败而延迟搬迁进度。

作业规模问题:OOM

首先常见的问题是 OOM。MMA 使用 MR 模式执行 Hive SQL,因为当输入表文件非常多,hive cli 在进行 SQL 解析并生成 MR 任务时非常容易内存不足。

现象是 hive cli 会消耗较长时间频繁 Full GC,并最终因内存不足退出:

FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. GC overhead limit exceeded
FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Java heap space
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main-EventThread"

因为内存不足发生在客户端,因此需要调大 hive cli 的 Xmx 设置,如 HADOOP_CLIENT_OPTS。但具体设置生效的做法可能会因 Hadoop 部署版本不同,而且因为某些 Hadoop 版本 bug 的原因,在 java 进程启动参数中可能有多个 Xmx,比较难以准确找到并控制实际生效的参数,因此,MMA 提供了一个更加直接的解决办法:找到 hadoop 的启动脚本(不同版本的 Hadoop 部署也会稍微不同,这里以 Aliyun E-MapReduce 为例),在 exec java 的 class 前加上 MMA_OPTS 环境变量(如下),MMA 会在调用 hive cli 时通过 MMA_OPTS 将搬站作业的 Xmx 控制在 5GB,同时不影响集群现有的默认配置。

[root@emr-header-1 bin]# which hadoop
/usr/lib/hadoop-current/bin/hadoop

[root@emr-header-1 bin]# tail /usr/lib/hadoop-current/bin/hadoop
    HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"

    #make sure security appender is turned off
    HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,NullAppender}"

    export CLASSPATH=$CLASSPATH
    exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $MMA_OPTS $CLASS "$@"
    ;;

esac

数据问题:HDFS

搬站作业失败或者不稳定的另一大类原因则跟 HDFS 相关。

  • 文件未正常关闭导致无法读取
Caused by: java.io.IOException: Cannot obtain block length for LocatedBlock{BP-2042735465-10.1.5.152-1530865291994:blk_1789042978_715673405; getBlockSize()=1724740; corrupt=false; offset=0; locs=[DatanodeInfoWithStorage[10.40.11.121:50010,DS-ad53ff64-1a7c-4656-b89e-180b8f53bd20,DISK], DatanodeInfoWithStorage[10.40.11.79:50010,DS-dd8bc397-2889-4e04-842b-e1b5eee3bdec,DISK], DatanodeInfoWithStorage[10.40.11.83:50010,DS-2fc4ff46-47aa-41bb-932f-080456fccbd7,DISK]]}

通常是软件 bug 导致(Flume 常见),解决办法参考文档,需要使用 hdfs 工具对指定文件做 recoverLease 操作

hdfs debug recoverLease -path <path-of-the-file> -retries 3
  • 文件损坏导致无法读取
Caused by: java.io.IOException: Could not obtain the last block locations.

输入表文件缺失了 block,需要对表对应的 hdfs location 进行 fsck。

  • HDFS IO 负载过高导致写出文件概率失败
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: java.io.IOException: Unable to close file because the last block BP-2042735465-10.1.5.152-1530865291994:blk_2290288983_1218244259 does not have enough number of replicas.

MMA 搬站作业在执行完毕之后,会向 HDFS 写入少量作业相关信息(Hive SQL 默认行为,非 MMA 刻意为之),如果 HDFS IO 负载特别高,有概率因写入失败导致作业失败。

此时可以选择重跑作业,当然还有一定概率失败,所以根治的办法是减轻 HDFS 的 IO 压力。IO 压力可能来自随 Hadoop 集群混部的其他系统,如 Presto。配置减少 Presto 实例数量可以缓解问题,提升搬站任务的成功率。

资源问题:vcore 优化

MMA 搬站作业是执行在客户 Hadoop 集群的 Hive SQL,因此,搬迁的效率实际上由作业能够并发的 Container 数量,集群出口带宽,以及 MaxCompute Tunnel 服务的入口带宽限制三者构成。

MMA 搬站作业为简单的读数据写 Tunnel 操作,单个 Container 使用的 CPU 和内存都非常受控,通常使用 Yarn 默认配置可以满足需求。如果因为集群默认配置被人为改动过,额外供给了 CPU 及内存,只会造成浪费。我们建议保持每个 Container 默认 1 vcore,不超过 4GB。可以通过调整集群以下参数来降低对集群 cpu 的浪费(MMA 搬站作业是 Map only 的 SQL,但校验作业带有 reducer)

mapreduce.map.cpu.vcore 1
mapreduce.map.memory.mb 4096 MMA 对作业内存没有高要求,此处可按照集群整体 CPU 和 Memory 配比来配置
mapreduce.reduce.cpu.vcore 1

资源问题:memory 优化

当 Hadoop 集群处于资源超卖状态且实际内存使用负载较高时,MMA 任务容易因为内存不足而失败(此时内存不足的问题发生在 Hadoop 集群而非提交作业的客户端)。

在 Hadoop 与 Presto 混合部署的场景中,Presto 很可能不仅有很高的 IO 负载,在繁忙时段还会消耗大量的内存,进而影响 Hive SQL 作业的正常运行。典型的报错如下:

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 232259584 bytes for committing reserved memory.
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000007aa780000, 232259584, 0) failed; error='Cannot allocate memory' (errno=12)

此时减小 MMA 作业并发可以在一定程度上降低作业失败的概率,根本性的做法需要控制 Presto 内存使用。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
3月前
|
SQL 消息中间件 分布式计算
大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
101 5
|
18天前
|
数据采集 人工智能 分布式计算
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
阿里云推出的MaxFrame是链接大数据与AI的分布式Python计算框架,提供类似Pandas的操作接口和分布式处理能力。本文从部署、功能验证到实际场景全面评测MaxFrame,涵盖分布式Pandas操作、大语言模型数据预处理及企业级应用。结果显示,MaxFrame在处理大规模数据时性能显著提升,代码兼容性强,适合从数据清洗到训练数据生成的全链路场景...
59 5
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
|
2月前
|
存储 消息中间件 分布式计算
Cisco WebEx 数据平台:统一 Trino、Pinot、Iceberg 及 Kyuubi,探索 Apache Doris 在 Cisco 的改造实践
Cisco WebEx 早期数据平台采用了多系统架构(包括 Trino、Pinot、Iceberg 、 Kyuubi 等),面临架构复杂、数据冗余存储、运维困难、资源利用率低、数据时效性差等问题。因此,引入 Apache Doris 替换了 Trino、Pinot 、 Iceberg 及 Kyuubi 技术栈,依赖于 Doris 的实时数据湖能力及高性能 OLAP 分析能力,统一数据湖仓及查询分析引擎,显著提升了查询性能及系统稳定性,同时实现资源成本降低 30%。
Cisco WebEx 数据平台:统一 Trino、Pinot、Iceberg 及 Kyuubi,探索 Apache Doris 在 Cisco 的改造实践
|
2月前
|
边缘计算 人工智能 搜索推荐
大数据与零售业:精准营销的实践
【10月更文挑战第31天】在信息化社会,大数据技术正成为推动零售业革新的重要驱动力。本文探讨了大数据在零售业中的应用,包括客户细分、个性化推荐、动态定价、营销自动化、预测性分析、忠诚度管理和社交网络洞察等方面,通过实际案例展示了大数据如何帮助商家洞悉消费者行为,优化决策,实现精准营销。同时,文章也讨论了大数据面临的挑战和未来展望。
|
3月前
|
存储 分布式计算 druid
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
89 3
|
3月前
|
消息中间件 分布式计算 druid
大数据-154 Apache Druid 架构与原理详解 基础架构、架构演进
大数据-154 Apache Druid 架构与原理详解 基础架构、架构演进
96 2
|
3月前
|
SQL 消息中间件 分布式计算
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
127 0
|
3月前
|
SQL 大数据
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
95 0
|
3月前
|
SQL 消息中间件 分布式计算
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(一)
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(一)
104 0
|
3月前
|
SQL 大数据
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(二)
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(二)
97 0

热门文章

最新文章

相关产品

  • 云原生大数据计算服务 MaxCompute