目录

Flink任务容器化

概述

1
2
3
4
5
6
7
8
9
/path/to/flink/flink-container/docker
├── Dockerfile
├── README.md
├── build.sh
├── docker-compose.yml
├── docker-entrypoint.sh
└── test-job-cluster.sh

0 directories, 6 files

Flink Dockerfile 走读已经介绍了 Flink 的镜像应该如何构建了,接下来,本文解释一下如何利用 Docker 来部署 Flink。

Docker Compose

以下是 docker-compose.yml 的内容。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 省略 License
# Docker compose file for a Flink job cluster deployment.
# 注意下面这些参数的设置
# Parameters:
# * FLINK_DOCKER_IMAGE_NAME - Image name to use for the deployment (default: flink-job:latest)
# * FLINK_JOB - Name of the Flink job to execute (default: none)
# * DEFAULT_PARALLELISM - Default parallelism with which to start the job (default: 1)
# * FLINK_JOB_ARGUMENTS - Additional arguments which will be passed to the job cluster (default: none)
# * SAVEPOINT_OPTIONS - Savepoint options to start the cluster with (default: none)

version: "2.2"
services:
  job-cluster:
    image: ${FLINK_DOCKER_IMAGE_NAME:-flink-job}
    ports:
      - "8081:8081"
    command: job-cluster --job-classname ${FLINK_JOB} -Djobmanager.rpc.address=job-cluster -Dparallelism.default=${DEFAULT_PARALLELISM:-1} ${SAVEPOINT_OPTIONS} ${FLINK_JOB_ARGUMENTS}

  taskmanager:
    image: ${FLINK_DOCKER_IMAGE_NAME:-flink-job}
    command: task-manager -Djobmanager.rpc.address=job-cluster
    scale: ${DEFAULT_PARALLELISM:-1}

Example

好了,万事俱备,现在就在本地跑起来一个 Flink Job on Docker!

首先先构建镜像,可以参考下面的命令,当然这些变量可以根据文档自行定义。因为我没有自己写的用户代码,这里用 Flink 的 Example 下面的 WordCount.jar 来构建镜像,到时候就跑一个 WordCount 的 Job。而且我用的是官网下载的发行版,所以可以看到参数 --from-archive。默认构建的镜像叫做 flink-job:latest

1
./build.sh --from-archive ~/Downloads/flink-1.8.1-bin-scala_2.11.tgz --job-artifacts /Users/runzhliu/Downloads/flink-1.8.1/examples/batch/WordCount.jar
/flink%E4%BB%BB%E5%8A%A1%E5%AE%B9%E5%99%A8%E5%8C%96/image_1dg6ll62ce86n0daq61lb61q181j.png

镜像构建好了,就用 docker compose up,启动容器。可以参考下面的命令。注意 FLINK_JOB 需要输入包含包名的类名,否则会找不到类。

1
FLINK_JOB=org.apache.flink.examples.java.wordcount.WordCount docker-compose up
/flink%E4%BB%BB%E5%8A%A1%E5%AE%B9%E5%99%A8%E5%8C%96/image_1dg6lahldmopcnk1df819tjub316.png

运行中的日志。

/flink%E4%BB%BB%E5%8A%A1%E5%AE%B9%E5%99%A8%E5%8C%96/image_1dg6l9iff4to1trllth17kf16fvp.png

如果速度快,可以看到 Flink UI。

/flink%E4%BB%BB%E5%8A%A1%E5%AE%B9%E5%99%A8%E5%8C%96/image_1dg6l930k4qd1498l3uc41d5dc.png

总结

根据官方提供的工具,现在就已经可以将 Flink Job 以 Docker 的方式运行起来了,这是给后面将 Flink Job 运行在 K8S 上的基础。

警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。