Flink in docker 部署

作者: AlienPaul | 来源:发表于2019-11-26 08:41 被阅读0次

Flink 系列博客

Flink QuickStart
Flink双流操作
Flink on Yarn Kerberos的配置
Flink on Yarn部署和任务提交操作
Flink配置Prometheus监控
Flink in docker 部署
Flink HA 部署
Flink 常见调优参数总结
Flink 源码之任务提交流程分析
Flink 源码之基本算子
Flink 源码之Trigger
Flink 源码之Evictor

背景

本篇博客为大家讲解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部署完毕。

相关文章

网友评论

    本文标题:Flink in docker 部署

    本文链接:https://www.haomeiwen.com/subject/mgeswctx.html