Flink in docker 部署

Flink 使用介绍相关文档目录

Flink 使用介绍相关文档目录

背景

本篇博客为大家讲解Flink在docker中的部署方式。

基础知识回顾

在本博客,我们使用standalone的方式,在docker中部署Flink集群。
回顾下Flink的启动方式。在传统的物理机或者虚拟机中部署Flink,如果配置了免密和slave节点信息,我们可以使用Flink的start-cluster.sh,一条命令启动整个集群。但是在docker中,我们无法这样操作。在镜像中通常不会安装ssh服务。此外,docker镜像的主进程要求使用前台的方式运行,否则该container会运行完毕退出。Flink的job manager和task manager也需要分别启动。因此我们需要熟悉下Flink中单独启动这些进程的方式。

我们可以运行$FLINK_HOME/bin/jobmanager.sh,或得该命令的帮助信息,如下所示:

Usage: jobmanager.sh ((start|start-foreground) [host] [webui-port])|stop|stop-all

该提示告诉我们,可以使用start-foreground命令以前台方式启用job manager。Task manager和job manager的命令类似,在此不再赘述。

Flink前台启动jm和tm的方法:

$FLINK_HOME/bin/jobmanager.sh start-foreground

$FLINK_HOME/bin/taskmanager.sh start-foreground

Flink的job manager和task manager使用的是同一套配置文件和代码,他们可以使用同一个镜像。启动不同的进程只需要传递不同的启动命令。接下来我们需要为Flink镜像编写一个入口文件。
run.sh:

#!/bin/bash

FLINK_JOB_MANAGER_SH=$FLINK_HOME/bin/jobmanager.sh
FLINK_TASK_MANAGER_SH=$FLINK_HOME/bin/taskmanager.sh

case "$1" in
"jobmanager")
$FLINK_JOB_MANAGER_SH start-foreground
;;

"taskmanager")
$FLINK_TASK_MANAGER_SH start-foreground
;;

*)
echo "COMMAND ERROR"
;;
esac

最后还有一个问题,job manager和task manager分别在两个container中,Task manager是怎样知道job manager的地址的呢?我们可以查看$FLINK_HOME/conf/flink-conf.yaml文件,发现如下配置项:

jobmanager.rpc.address: manager.bigdata
jobmanager.rpc.port: 6123

Task manager正是通过这两个配置,才能成功找到Job manager的。

Flink镜像制作

我们使用centos7作为基础镜像。编写如下的Dockerfile:

FROM centos:centos7
MAINTAINER paul8263
RUN yum install java-1.8.0-openjdk -y
ARG FLINK_VERSION=1.8.1
ARG SCALA_VERSION=2.11
ARG FLINK_TAR_NAME=flink-${FLINK_VERSION}-bin-scala_${SCALA_VERSION}.tgz
ENV FLINK_HOME=/flink-${FLINK_VERSION}
ADD ${FLINK_TAR_NAME} /
COPY run.sh /root/
EXPOSE 8088
VOLUME $FLINK_HOME/conf
ENTRYPOINT ["/root/run.sh"]

使用如下命令构建Flink镜像:

docker build -t paul8263/flink:1.8.1 .

启动和停止Flink

首先需要创建Flink的network:

docker network create flink

然后准备一份Flink的配置文件,解压flink.tar.gz的conf目录到任意文件夹,例如/home/paul8263/flink_docker/conf,修改并保存配置。

启动job manager:

docker run -itd --rm --name flink-jm -h flink-jm -p 10000:8088 -v /home/paul8263/flink_docker/conf:/flink-1.8.1/conf --network flink paul8263/flink:1.8.1 jobmanager

需要注意的是,这里的-h参数指定了job manager这个container的hostname为flink-jm,和flink-conf.yaml配置文件中的jobmanager.rpc.address配置项必须一致。

启动task manager:

docker run -itd --rm --name flink-tm -h flink-tm -v /home/paul8263/flink_docker/conf:/flink-1.8.1/conf --network flink paul8263/flink:1.8.1 taskmanager

验证是否启动成功

执行docker ps -a命令,查看是否存在flink-jm和flink-tm进程。

docker ps -a

使用浏览器打开flink的管理页面(ip:10000端口),观察页面是否能打开,task manager数量是否正确。
Flink管理页面

图中信息告诉我们,有一个task manager启动成功。至此Flink in docker部署完毕。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容