文档

使用ECI弹性调度Flink作业

更新时间:

使用阿里云弹性容器实例(Elastic Container Instance)调度Flink作业,可以不受限于ACK集群的节点计算容量,灵活动态地按需创建Pod(容器组),有效地降低计算成本。本文为您介绍如何使用ECI弹性调度Flink作业。

背景信息

如果您需要使用更多ECI的高级功能,可以通过设置更多的Annotation(注解)对ECI按需进行参数配置,详情请参见ECI Pod Annotation

前提条件

  • 已在E-MapReduce on ACK控制台创建Flink集群,详情请参见快速入门

  • 已开通弹性容器实例服务,详情请参见使用流程

操作步骤

  1. 在ACK集群中安装ECI所需的虚拟节点,详情请参见步骤一:在ACK集群中部署ack-virtual-node组件

  2. 在EMR on ACK上提交Flink作业时,可以通过设置Label(标签)或Annotation(注解)来实现ECI调度Flink作业。

    提交Flink作业详情,请参见提交Flink作业

    说明

    本文示例中版本以Flink 1.13(EMR-3.41.0-ack)为例,其他版本时请修改flinkVersion的配置。详细配置项请参见Flink Kubernetes Operator

    • 方式一:配置Pod Label。

      设置参数alibabacloud.com/eci为true,将指定Pod调度到ECI上运行,参考示例如下。

      
      apiVersion: flink.apache.org/v1beta1
      kind: FlinkDeployment
      metadata:
        name: basic-emr-example
      spec:
        flinkVersion: v1_13
        flinkConfiguration:
          state.savepoints.dir: file:///flink-data/flink-savepoints
          state.checkpoints.dir: file:///flink-data/flink-checkpoints
          metrics.reporter.prom.factory.class: org.apache.flink.metrics.prometheus.PrometheusReporterFactory
          # 通过配置Label,Flink的JobManager和TaskManager使用ECI。
          kubernetes.jobmanager.labels: alibabacloud.com/eci:true
          kubernetes.taskmanager.labels: alibabacloud.com/eci:true
          #(可选)配置ECI镜像缓存,提升性能。
          kubernetes.jobmanager.annotations: k8s.aliyun.com/eci-image-cache:true
          kubernetes.taskmanager.annotations: k8s.aliyun.com/eci-image-cache:true
        serviceAccount: flink
        podTemplate:
          metadata:
            annotations:
              prometheus.io/path: /metrics
              prometheus.io/port: "9249"
              prometheus.io/scrape: "true"
          spec:
            serviceAccount: flink
            containers:
              - name: flink-main-container
                volumeMounts:
                  - mountPath: /flink-data
                    name: flink-volume
                ports:
                  - containerPort: 9249
                    name: metrics
                    protocol: TCP
            volumes:
              - name: flink-volume
                emptyDir: {}
      
        jobManager:
          replicas: 1
          resource:
            memory: "2048m"
            cpu: 1
        taskManager:
          resource:
            memory: "2048m"
            cpu: 1
      
        job:
          jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar
          parallelism: 2
          upgradeMode: stateless
      
                                          
    • 方式二:配置Pod Annotation。

      设置参数alibabacloud.com/burst-resource为eci,将指定Pod调度到ECI上运行,Annotation取值包含两种类型:

      • eci:当集群普通节点的资源不足时,使用ECI。

      • eci_only:只使用ECI。

      参考示例如下。

      
      apiVersion: flink.apache.org/v1beta1
      kind: FlinkDeployment
      metadata:
        name: basic-emr-example
      spec:
        flinkVersion: v1_13
        flinkConfiguration:
          state.savepoints.dir: file:///flink-data/flink-savepoints
          state.checkpoints.dir: file:///flink-data/flink-checkpoints
          metrics.reporter.prom.factory.class: org.apache.flink.metrics.prometheus.PrometheusReporterFactory
          # 通过配置Annotation,Flink的JobManager和TaskManager使用ECI。
          kubernetes.jobmanager.annotations: alibabacloud.com/burst-resource:eci_only
          kubernetes.taskmanager.annotations: alibabacloud.com/burst-resource:eci_only
          #(可选)配置ECI镜像缓存,提升性能。
          kubernetes.jobmanager.annotations: k8s.aliyun.com/eci-image-cache:true
          kubernetes.taskmanager.annotations: k8s.aliyun.com/eci-image-cache:true
        serviceAccount: flink
        podTemplate:
          metadata:
            annotations:
              prometheus.io/path: /metrics
              prometheus.io/port: "9249"
              prometheus.io/scrape: "true"
          spec:
            serviceAccount: flink
            containers:
              - name: flink-main-container
                volumeMounts:
                  - mountPath: /flink-data
                    name: flink-volume
                ports:
                  - containerPort: 9249
                    name: metrics
                    protocol: TCP
            volumes:
              - name: flink-volume
                emptyDir: {}
      
        jobManager:
          replicas: 1
          resource:
            memory: "2048m"
            cpu: 1
        taskManager:
          resource:
            memory: "2048m"
            cpu: 1
      
        job:
          jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar
          parallelism: 2
          upgradeMode: stateless                              
    • 方式三:每次提交作业时默认使用ECI Pod。

      1. 进入flink-conf.yaml页签。

        1. 登录EMR on ACK控制台

        2. 在EMR on ACK页面,单击目标集群所在行的配置

        3. 配置页签,单击flink-conf.yaml

      2. 配置Flink集群以启用ECI。

        1. 单击新增配置项

        2. 新增配置项对话框中,添加以下配置。

          参数

          描述

          kubernetes.jobmanager.annotations

          固定值为alibabacloud.com/burst-resource:eci_only,k8s.aliyun.com/eci-image-cache:true

          kubernetes.taskmanager.annotations

          固定值为alibabacloud.com/burst-resource:eci_only,k8s.aliyun.com/eci-image-cache:true

        3. 单击确定

        4. 在弹出的对话框中,输入执行原因,单击保存

      3. 生效配置。

        1. 单击下方的部署客户端配置

        2. 在弹出的对话框中,输入执行原因,单击确定

        3. 确认对话框中,单击确定

          等待30秒左右后,再次新建作业时即可看到默认配置的修改已生效。

  • 本页导读 (1)
文档反馈