You need to enable JavaScript to run this app.
导航

迁移作业至火山引擎 EMR

最近更新时间2023.03.01 18:59:58

首次发布时间2023.01.20 16:47:16

本文为您介绍几类 Apache 作业迁移至火山引擎 E-MapReduce(简称“EMR”)上的案例。

1 迁移 Apache Airflow 到火山引擎 EMR

Apache Airflow 是一个提供了编程形式去进行编写、调度与监控工作流的开源组件。 在 Airflow 中,工作流由一个个具体的任务(task)组成的有向无环图(DAGs)构成。Airflow Scheduler 基于一系列的 Workers,以 DAG 规定的依赖关系进行具体任务的执行。其 Webserver,提供了丰富的用户界面,让用户可视化地查看当前工作流运行现状,进行历史回顾,监控执行过程,并且在必要的时候通过查看执行日志进行故障排除。 同时,Airflow 提供了丰富的命令行实用命令,在 DAG 文件编写完正式投入生产前,让您可以更简洁地对其执行复杂的调试。 以代码形式定义的工作流,使其具有更好的可维护性,结合 VCS 可进行更好的版本管理,更具可测试性与协同性。

火山引擎 EMR 集成了 Airflow,支持用户在创建集群时选择安装 Airflow 组件。详见创建集群

若集群已创建完成,火山引擎 EMR 也支持您在集群创建后,以添加服务的方式安装 Airflow 组件。详见添加服务

迁移 Apache Airflow 主要是 Airflow DAG 迁移。

  • 对于同一大版本,即 2.x 版本的 Airflow,对应的 DAG 文件可以直接迁移到 EMR 中使用,如果代码中使用到一些特定的依赖,则需要您手动在对应的 Airflow venv 中进行依赖安装。

  • 如果是从 1.x 版本的 Airflow 服务迁移过来,由于 1.x 版本的 Airflow 使用的是 python2,而 EMR 的 Airflow 2.x 使用的是 python 3,因此这样的迁移可能需要您对 DAG 进行代码改造。有需要协助的地方,请通过工单系统与我们联系。

2 迁移 Apache Spark 作业至火山引擎 EMR

火山引擎 EMR 支持您使用 Apache Spark 开发应用程序来进行作业数据的导入、查询以及分析处理。
借助火山引擎 EMR 的特定实例规格和弹性伸缩能力, Apache Spark 在性能和成本方面有效优化。您可以通过火山引擎大数据研发治理套件 Dataleap 对 Spark 作业进行开发、调试和部署, 详见 DataLeap + EMR 快速入门。也可以通过 EMR 集群内置的 Apache Hue 提交 Spark 作业,详见 HUE 最佳操作

2.1 使用弹性伸缩实现成本优化

开启弹性伸缩可以减少 Spark 作业的成本。在使用 EMR 集群过程中,计算高峰时扩展一部分临时计算能力帮助渡过业务计算高峰,渡过业务高峰后进行缩容操作,降低计算资源使用成本。详见弹性伸缩

2.2 诊断 Spark 作业

排查常见的问题,可以通过:

  • Spark Web UI, 通过 EMR 集群 Master 节点的 8443 端口访问 Spark History Server UI。

  • Yarn Web UI, Yarn Application 包含 Spark Job,通过 EMR 集群 Master 节点的 8443 端口访问 Yarn Resource Manager UI。

    详见访问链接

  • 登录EMR 控制台 > 日志中心 > 服务日志,EMR 管控的日志中心支持对 Spark 日志的搜索和查看。详见日志中心

Apache Flink 是一个面向有限流和无限流有状态计算的分布式计算框架,它能够支持流处理和批处理两种应用类型。Flink 不仅能够提供同时支持高吞吐、低延迟和 Exactly-Once 语义的实时计算能力,同时 Flink 还提供了基于流式计算引擎处理批量数据的计算能力,真正意义上实现了流批统一 。您可以通过火山引擎大数据研发治理套件 Dataleap 对 Flink 作业进行开发、调试和部署。详见 DataLeap + EMR 快速入门

3.1 双跑验证

双跑验证期间需要对数据正确性、业务性能和业务稳定性进行验证:

  • 数据质量是实时计算数据产出对业务的重要保障,和实时计算任务日常变更一样,迁移工作也需要对新任务产出的数据质量进行验证。

  • 对比作业的吞吐和延时情况来判断新作业性能是否符合需求。

  • 业务稳定性和数据质量同样重要,任务的稳定性通常要求实现较长时间的平稳运行(建议至少7天)。

  • Yarn Web UI, Yarn Application 包含 Flink Job,通过 EMR 集群 Master 节点的 8443 端口访问 Yarn Resource Manager UI。

  • 服务日志,EMR 管控的日志中心支持对 Flink 日志的搜索和查看。

  • 服务监控,云监控和 EMR 集群详情中支持对 Flink 的监控和告警配置。

4 迁移 DolphinScheduler 到火山引擎 EMR

Apache DolphinScheduler 是一个分布式、易扩展的可视化 DAG 工作流任务调度系统,适用于企业级场景,提供了可视化的任务操作、工作流编排,以及全生命周期数据处理过程的解决方案。
DolphinScheduler 的迁移主要是原有负载的数据库表迁移,且不需要增量迁移,因而使用 Mysqldump 工具进行全量备份,再到火山引擎 EMR 中的 DolphinScheduler 对应数据库进行恢复,再通过官方 upgrade 脚本升级即可。

4.1 mysqldump 备份工具使用

mysqldump -u [user name] –p [password] [database_name] > [dumpfilename.sql]

mysqldump 工具原生支持更多的选项,比如选中某些特定的表,或者决定是否备份结构而忽略数据等等。
在我们的场景中,只需要对整个库表的结构与数据进行备份,请您按照上述语句格式进行执行。

4.2 重建数据库

该步骤中,预设您持有一个 2.1.0 / 3.1.0 及以上版本的 Hadoop 类型集群,并且已经添加了 DolphinScheduler 服务。如有需要,请参阅创建集群添加服务文档。
在进行库表恢复之前,请您通过控制台的服务操作功能,先关停集群内的 DolphinScheduler 服务。
关闭后,请您将 4.1 步骤中生成的 sql 文件,上传到火山引擎 EMR 集群的 master-1 机器上。该步骤可以通过对集群机器进行公网绑定,通过 scp 命令进行上传来完成。如果 sql 文件不大,也可以直接复制代码,粘贴保存在机器上。
接下来,请您根据数据库连接信息(假如您在 master-1 机器上,可从以下位置 /etc/emr/dolphinscheduler/api-server/conf/application.yaml 中的 datasource 配置中获取,包括数据库名与连接使用的账号密码等,我们假设数据库名称为 dolphin_scheduler),通过 mysql 命令连接到数据库中,执行如下命令,将原有库表进行删除:

drop database `dolphin_scheduler`;

接下来,运行 create语句,创建新的数据库以供恢复使用:

CREATE DATABASE `dolphin_scheduler` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

4.3 库表恢复

下一步,我们通过 4.2 步骤中上传的 sql 文件,把库表结构与数据恢复到新的数据库中。命令如下:

mysql -u [username] –p[password] [database_name] < [dumpfilename.sql]

在这里,username 、 password 与 database_name 同 4.2 步骤中获取到的连接信息一致,请留意 -p 选项后面不接空格,或者 -p 后不接内容,执行命令后根据提示再输入密码即可。

4.4 库表升级

首先,请您执行命令 sudo dpkg-reconfigure dash ,提示输入时输入 no 即可,将系统默认的 sh 变更为 bash,dash 与 DolphinScheduler 原生升级脚本中的 source 命令不兼容。
接着,切换工作目录到 /usr/lib/emr/current/dolphinscheduler/ ,修改 ./bin/env/dolphinscheduler_env.sh ,作如下对应修改

# emr JAVA_HOME
export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-8-openjdk-velinux-amd64}
```shell
export DATABASE=${DATABASE:-mysql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="{jdbc_url}"
export SPRING_DATASOURCE_USERNAME={user}
export SPRING_DATASOURCE_PASSWORD={password}

其中 DATASOURCE 的配置对齐 4.2 步骤中获取到的连接信息即可。

说明

假设您使用的是 2023/02/28 日期之前 3.1.1 版本的 DolphinScheduler,请您编辑 ./tools/sql/sql/upgrade/3.1.1_schema/mysql/dolphinscheduler_dml.sql 文件,修改其中 dml 语句的 qrtz_job_details 为 QRTZ_JOB_DETAILS。

接下来,通过 DolphinScheduler 的脚本进行一键升级即可。
sh ./tools/bin/upgrade-schema.sh
升级完成后,便可以在 EMR 控制台,对 DolphinScheduler 服务进行启动使用,完成整个升级过程。
如果希望系统中默认的 sh 保持 dash,可以重新执行 sudo dpkg-reconfigure dash,输入 yes 即可。