本文为您介绍从原有集群(线下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集群中运行,详细方法如下:
|
对接自建平台
如果您自建了一套大数据平台,则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模式进行提交。