文档

迁移方案

更新时间:

本文为您介绍从原有集群(线下IDC自建集群或ECS自建)迁移Flink作业到DataFlow集群的整体流程,包括准备工作,如何迁移作业,以及常见问题等。

背景信息

EMR集群的基础信息,请参见集群规划

准备工作

集群规划

创建DataFlow集群时,集群Core实例的CPU和内存总量可以参考原有集群的规模,再根据作业在DataFlow集群的实际运行情况进行微调。在选择具体机型时,您可以根据是否有本地盘需求、是否希望使用规模较大的物理机等条件进行选择。

Master实例规格通常与整体集群规模大小有关,对应集群最大CU规格经验值如下表所示。

Master型号

集群最大CU规格

4核16 GB

80 CU

8核32 GB

160 CU

16核64 GB

800 CU

24核96 GB

800 CU以上

网络互通

在EMR控制台创建完DataFlow集群之后,在迁移作业之前,您还需要确保提交Flink作业的客户端所在的机器与DataFlow集群之间的网络互通。

针对原集群的不同情况,您可以选择不同的解决方案:

  • 线下IDC自建集群:可以通过阿里云高速通道建立线下IDC和线上E-MapReduce所在VPC网络的连通。

  • ECS自建:由于VPC实现用户专有网络之间的逻辑隔离,所以建议使用VPC网络。

    • 经典网络与VPC网络互通:目前阿里云存在经典网络和VPC两种网络类型。由于E-MapReduce集群是在VPC网络中,而很多用户的业务系统还存在于经典网络中,为了解决此问题,阿里云推出了ClassicLink方案,您可以参见此方案进行网络互访,详情请参见建立ClassicLink连接

    • VPC网络之间的连通:选择新旧集群处在同一个区域的同一个可用区内。

环境配置

由于DataFlow集群采用YARN部署模式,如果提交Flink作业的客户端不位于DataFlow集群内,您还需要在提交Flink作业的客户端的机器上配置好Hadoop相关的配置项,并设置好相关的环境变量。

验证迁移环境

您自建集群的环境可能与DataFlow集群的环境不完全一致,例如JDK版本不同等。为了保证作业的正常迁移,强烈建议您在迁移生产作业之前,先通过多种方式验证迁移方案是否有效,例如:

  • 在迁移生产作业之前,先迁移若干测试作业,观察整个迁移流程是否完备。

  • 分批迁移,在迁移重要作业之前,先迁移优先级比较低的作业。甚至可以在条件允许的情况下,您可以继续运行原来的作业,将迁移过来的作业试运行,如果没有问题,再下掉原来的作业。

迁移和运行作业

类型

描述

迁移Checkpoint文件

将Checkpoint文件拷贝到DataFlow集群的HDFS上或者上传到OSS中,在提交Flink作业的时候,可以通过-s参数指定Checkpoint文件,即可在DataFlow集群中使用该Checkpoint文件恢复作业。

迁移Flink作业

与原集群中的提交方式类似,您只需要将Flink作业提交到DataFlow集群即可。

运行不同版本的Flink作业

您原集群中的作业使用的Flink版本可能不同,例如,既有基于Flink 1.9版本的,也有基于Flink 1.12版本的。如果您希望不同版本的Flink作业都可以在DataFlow集群中运行,详细方法如下:

  • 对于特定的Flink版本的作业,使用YARN per-job的方式提交。

    在该方式下,作业执行过程中所使用的Flink版本为提交作业的客户端所使用的Flink版本,因此只需要在提交作业的客户端使用指定版本的Flink提交作业即可。

    说明

    如果希望使用本地Flink runtime,则无需指定yarn.provided.lib.dirs参数。

  • 对于希望使用DataFlow集群自带的Flink版本的作业,则需要通过yarn.provided.lib.dirs参数指定使用集群HDFS中的Runtime(例如,-D yarn.provided.lib.dirs=hdfs:///flink-current/ ),并推荐使用YARN Application模式提交,充分利用集群资源。

对接自建平台

如果您自建了一套大数据平台,则DataFlow集群也可以轻松集成进您现有的平台中:

  • 资源管理与运维

    DataFlow集群基于YARN进行资源调度与管理,因此只需要按照集成YARN集群到已有平台的通常操作进行即可。您可以根据需要配置YARN队列的资源等,之后可通过YARN的REST API来访问YARN作业状态,并进行运维。

  • 日志查看

    • 对于运行中的作业,可以通过Flink Web UI进行查看,详细信息请参见基础使用

    • 对于已经运行结束的作业,可以通过Flink History Server查看状态或者通过YARN提供的命令,例如yarn logs -applicationId application_xxxx_yyyy来访问作业的日志。

      说明

      其中Flink History Server的日志默认存储在HDFS集群的hdfs:///flink/flink-jobs/目录下,YARN日志默认存储在HDFS集群的hdfs:///tmp/logs/$USERNAME/logs/目录下。

  • 指标监控

    如果您的自建平台已有监控报警系统,则可以在Flink的作业配置中,配置相关的Metric Reporter即可。另外,DataFlow集群的Flink作业的指标也对接了EMR的监控报警。

  • 报警

    除了可以使用您的报警体系之外,也可以使用阿里云提供的云监控(CloudMonitor)来配置报警规则,并对接邮箱、钉钉群等提醒机制。使用云监控配置详情,请参见创建阈值报警规则

常见问题

  • Q:JDK版本不一致,如何处理?

    A:DataFlow集群中使用的是OpenJDK,如果您在原来集群的作业中使用的是Oracle JDK,并且您的作业中使用了Oracle JDK中特有的功能时,JDK版本的不一致可能导致运行作业时部分类找不到(例如,javafx.util.Pair等)。因此,您的作业中需要避免显式使用Oracle JDK特有的依赖。

  • Q:是否可以支持多个Flink版本?

    A:可以。DataFlow集群支持多种作业提交方式,例如YARN per-job方式、YARN Application方式等。基于Flink on YARN的部署模式,在未设置yarn.provided.lib.dirs参数的情况下,Flink作业在YARN集群中运行时所使用的Flink Runtime为提交作业的客户端所使用的Flink(例如,开源Flink 1.13等)。因此如果您想使用特定的Flink版本运行作业,有两种方式:

    • 直接使用Flink的特定版本进行提交,并且不设置yarn.provided.lib.dirs参数。

    • 通过指定yarn.provided.lib.dirs参数,来使用特定的Flink Runtime。另外,在该场景下,考虑到兼容性,推荐您使用YARN per-job模式进行提交。