flink集群(docker版)配置及使用

1 环境说明

注意:以下所有操作都在root用户下完成 sudo su – root

ip

操作系统版本

用途

192.168.30.18

Ubuntu 18.04.4 LTS

jobmanager容器、nfs服务(存储flink的checkpoint、savepoint)

192.168.30.17

Ubuntu 18.04.4 LTS

taskmanager02容器

192.168.30.16

Ubuntu 18.04.4 LTS

taskmanager01容器

2 部署nfs

在192.168.30.18节点上操作

2.1安装nfs软件包

# apt-get install rpcbind -y

# apt-get install nfs-kernel-server -y

2.2 配置参数,映射checkpoints存储目录

# vim /etc/exports

/home/liuchan/config/flink/ 192.168.30.0/24(rw,sync,no_root_squash,no_all_squash)

2.3 重启nfs服务并加入开机自启动

# systemctl restart rpcbind

# systemctl enable rpcbind

# systemctl restart nfs-kernel-server

# systemctl enable nfs-kernel-server

2.4 查看nfs状态

# rpcinfo -p localhost

   program vers proto   port  service

   100000    4   tcp    111  portmapper

    100000    3   tcp    111  portmapper

    100000    2   tcp    111  portmapper

    100000    4   udp    111  portmapper

    100000    3   udp    111  portmapper

    100000    2   udp    111  portmapper

    100005    1   udp  34715  mountd

    100005    1   tcp  46897  mountd

    100005    2   udp  48806  mountd

    100005    2   tcp  39469  mountd

    100005    3   udp  41227  mountd

    100005    3   tcp  34733  mountd

    100003    3   tcp   2049  nfs

    100003    4   tcp   2049  nfs

    100227    3   tcp   2049

    100003    3   udp   2049  nfs

    100227    3   udp   2049

    100021    1   udp  35642  nlockmgr

    100021    3   udp  35642  nlockmgr

    100021    4   udp  35642  nlockmgr

    100021    1   tcp  42347  nlockmgr

    100021    3   tcp  42347  nlockmgr

    100021    4   tcp  42347  nlockmgr

2.5 查看nfs映射信息

# exportfs -v

/home/liuchan/config/flink

192.168.30.0/24(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

3 客户端挂载nfs

在192.168.30.16、17节点上操作

3.1 安装nfs挂载工具

# apt install nfs-common

# showmount -e 192.168.30.18

Export list for 192.168.30.18:

/home/liuchan/config/flink 192.168.30.0/24

3.2 创建挂载目录

# mkdir -p /home/liuchan/config/flink

3.3 挂载nfs并写入到/etc/fstab

# echo ‘192.168.30.18:/home/liuchan/config/flink /home/liuchan/config/flink nfs defaults 0 0’ >> /etc/fstab

# mount -a

4 集群通用配置说明

4.1 docker-compose说明

1 compose目录结构

# tree -LFa 1 flink/

flink

├── conf/                 # flink容器配置文件目录

├── docker-compose.yml    # docker-compose配置文件

├── Dockerfile            # 构建flink镜像用到的Dockerfile文件

├── .env                  # docker-compose环境变量文件

├── flink-1.10.0.tar.gz   # 构建flink镜像用到的flink-1.10.0压缩包

├── jdk1.8.0_251.tar.gz   # 构建flink镜像用到的jdk1.8.0_251压缩包

├── log/                  # flink容器日志目录

├── run.sh                # 构建flink镜像用到的flink容器启动脚本

└── tmp/                  # flink容器临时文件目录

3 directories, 6 files

 

2 .env文件

# cat flink/.env

IMAGE=flink:1.10.0-v01

FLINK_HOME=/usr/local/flink-1.10.0

 

3 Dockerfile文件

# cat flink/Dockerfile

FROM centos:7

LABEL maintainer lc

ARG FLINK_VERSION=flink-1.10.0

ARG JDK_VERSION=jdk1.8.0_251

RUN yum install wget curl unzip iproute net-tools -y && \

    yum clean all && \

    rm -rf /var/cache/yum/* && \

    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ADD ${FLINK_VERSION}.tar.gz /usr/local

ADD ${JDK_VERSION}.tar.gz   /usr/local

ENV JAVA_HOME /usr/local/${JDK_VERSION}

ENV CLASSPATH $JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar

ENV PATH $JAVA_HOME/bin:$PATH

ENV FLINK_HOME=/usr/local/${FLINK_VERSION}

COPY run.sh /root

WORKDIR ${FLINK_HOME}

EXPOSE 8081 6123

ENTRYPOINT [“/root/run.sh”]

 

4 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

4.2 flink集群配置文件

1 修改flink-conf.yaml

# vim flink/conf/flink-conf.yaml

# jobmanager节点地址

jobmanager.rpc.address: 192.168.30.18

# checkpoints保留的个数,全局配置

state.checkpoints.num-retained: 16

# Blog Server

taskmanager.rpc.port: 40010-40020

# Task Manager

metrics.internal.query-service.port: 40030-40040

# Metrics

blob.server.port: 40050-40060

 

2 修改masters

# vim flink/conf/masters

192.168.30.18:8081

 

3 修改slaves

# cat flink/conf/slaves 

192.168.30.16

192.168.30.17

5 启动容器

5.1 jobmanager

192.168.30.18节点

1 docker-compose.yml配置文件

# cat flink/docker-compose.yml

version: ‘3’

networks:

  rulr-network:

    external: true

services:

  flink-1.10.0-v01:

    image: flink:1.10.0-v01

    build:

      context: ./

      dockerfile: Dockerfile

  jobmanager:

    container_name: jobmanager

    hostname: jobmanager

    image: ${IMAGE}

    volumes:

      – ./conf:${FLINK_HOME}/conf

      – ./tmp/jobmanager-tmp:/tmp

      – ./log/jobmanager-log:${FLINK_HOME}/log

      – /home/liuchan/config/flink:/home/liuchan/config/flink

      – /home/liuchan/servers/compute-streaming:/home/liuchan/servers/compute-streaming

      – /home/liuchan/config/servers:/home/liuchan/config/servers

    ports:

      – “8081:8081”

      – “6123:6123”

      – “40010-40020:40010-40020”

      – “40030-40040:40030-40040”

      – “40050-40060:40050-40060”

    command: jobmanager

    restart: always

    networks:

      – rulr-network

    deploy:

      resources:

        limits:

          cpus: ‘2’

          memory: 2G

 

2 构建容器

# cd flink-jobmanager/

# docker-compose build

# docker-compose up -d

5.2 taskmanager02

192.168.30.17节点

1 docker-compose.yml配置文件

# cat flink/docker-compose.yml

version: ‘3’

networks:

  rulr-network:

    external: true

services:

  flink-1.10.0-v01:

    image: flink:1.10.0-v01

    build:

      context: ./

      dockerfile: Dockerfile

  taskmanager02:

    container_name: taskmanager02

    hostname: taskmanager02

    image: ${IMAGE}

    ports:

      – “40010-40020:40010-40020”

      – “40030-40040:40030-40040”

      – “40050-40060:40050-40060”

    volumes:

      – ./conf:${FLINK_HOME}/conf

      – ./tmp/taskmanager02-tmp:/tmp

      – ./log/taskmanager02-log:${FLINK_HOME}/log

      – /home/liuchan/config/flink:/home/liuchan/config/flink

    command: taskmanager

    restart: always

    networks:

      – rulr-network

    deploy:

      resources:

        limits:

          cpus: ‘2’

          memory: 2G

 

2 构建容器

# cd flink-taskmanager02/

# docker-compose build

# docker-compose up -d

5.3 taskmanager01

192.168.30.16节点

1 docker-compose.yml配置文件

# cat flink/docker-compose.yml

version: ‘3’

networks:

  rulr-network:

    external: true

services:

  flink-1.10.0-v01:

    image: flink:1.10.0-v01

    build:

      context: ./

      dockerfile: Dockerfile

  taskmanager01:

    container_name: taskmanager01

    hostname: taskmanager01

    image: ${IMAGE}

    ports:

      – “40010-40020:40010-40020”

      – “40030-40040:40030-40040”

      – “40050-40060:40050-40060”

    volumes:

      – ./conf:${FLINK_HOME}/conf

      – ./tmp/taskmanager01-tmp:/tmp

      – ./log/taskmanager01-log:${FLINK_HOME}/log

      – /home/liuchan/config/flink:/home/liuchan/config/flink

    command: taskmanager

    restart: always

    networks:

      – rulr-network

    deploy:

      resources:

        limits:

          cpus: ‘2’

          memory: 2G

 

2 构建容器

# cd flink-taskmanager01/

# docker-compose build

# docker-compose up -d

6 运行flink任务

6.1 运行jar包

# docker exec -it flink-jobmanager bash

[root@jobmanager flink-1.10.0]# bin/flink run -d /home/liuchan/servers/compute-streaming/compute-streaming.jar –appMode=2

6.2 在flink的UI页面查看

URL: http://192.168.30.18:8081/

# 总体概览

# Task Managers信息

# 查看JOB详细信息

6.3 测试

1 停掉正在运行job的TaskManager容器

从上面的截图可以判断出ip为172.18.0.10容器正在运行job,该容器在192.168.30.17服务器上。停掉taskmanager02容器。

# cd flink-taskmanager02/

# docker-compose down

 

2 在flink的UI中查看

从下图可以看到,job经历超时报错后,运行的TaskManager节点由taskmanager02容器转移到了taskmanager01容器

 

 

 

 

 

3 恢复taskmanager02容器

# cd flink-taskmanager02/

# docker-compose up -d

# 在flink的UI可以看到taskmanager02容器又上线了

7 Checkpoint、Savepoint

7.1 Checkpoint、Savepoint说明

1 Checkpoint

(1) Flink Checkpoint是一种容错恢复机制。这种机制保证了实时程序运行时,即使突然遇到异常也能够进行自我恢复,不需要用户指定。Checkpoint是增量做的,每次的时间较短,数据量较小。

(2) Checkpoint对于用户层面,是透明的,用户会感觉程序一直在运行。

(3) Flink Checkpoint是Flink自身的系统行为,用户无法对其进行交互,用户可以在程序启动之前,设置好实时程序Checkpoint相关参数,当程序启动之后,剩下的就全交给Flink自行管理。

(4) Checkpoint默认关闭,Checkpoint的启用、存储方式、存储位置,在应用代码中配置,其中存储方式、存储位置,也可以在flink-conf.yaml文件中通过state.backend、state.checkpoints.dir参数配置全局参数,但应用代码中配置优先级更高。

(5) Checkpoint 默认保留数为1,通过修改flink-conf.yaml文件中state.checkpoints.num-retained参数设置Checkpoint保留数量。

(6) Checkpoint默认job程序取消后删除,在应用代码中通过设置以下代码实现保留:

“getCheckpointConfig().enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);”

(5) Checkpoint的组成:Checkpoint根目录/CheckpointID

 

2 Savepoint

(1) Flink Savepoint你可以把它当做在某个时间点程序状态全局镜像,以后程序在进行升级,或者修改bug、并行度等情况,还能从保存的状态位继续启动恢复,需要用户指定。是全量做的,每次的时间较长,数据量较大。

(2) Flink Savepoint一般存储在文件系统上面,它需要用户主动进行触发。

(3) Savepoint会一直保存,除非用户删除。

(4) flink-conf.yaml文件state.savepoints.dir参数用以配置savepoints的存储目录,默认none。

(5) Savepoint的组成:Savepoint根目录/savepoint-jobid前六位-12随机数字及字母组合

7.2 flink常用命令

1 通用命令

(1) 命令执行

bin/flink run [OPTIONS]

options:

-d: 任务提交后,断开session,会话继续保持,即表示将job放到后台运行。

示例:后台运行job

# bin/flink run -d /home/liuchan/servers/compute-streaming/compute-streaming.jar –appMode=2

(2) 查看任务列表

bin/flink list [OPTIONS]

options:

-a: 全部显示所有程序及其作业ID

-r: 仅显示正在运行的程序及其作业ID

-s: 仅显示计划的程序及其作业ID

示例:查看正在运行的job

# bin/flink list -r

 

2 操作Savepoint

(1) 在取消任务时保存Savepoint

bin/flink cancel [OPTIONS]

options: 

-s: 触发保存点并取消作业。目标目录是可选的。如果未指定目录,则

配置的默认目录使用(state.savepoints.dir)。

官方文档已经不推荐使用,建议使用stop。

示例:

# bin/flink cancel -s /home/liuchan/config/flink/savepoints 1af3e95778850085614d175657948369

(2) 在停止任务时保存Savepoint

bin/flink stop [OPTIONS]

options:

-p: 保存点的路径,如果没有指定目录时,将使

用默认值配置(state.savepoints.dir)。

示例:

# bin/flink stop -p /home/liuchan/config/flink/savepoints 1504a27aaecba591877a68a233ee9240

(3) 触发Savepoint

bin/flink savepoint [OPTIONS] []

options:

示例:

# bin/flink savepoint 3b74f51cc4186aa4bf5bf84e7e716d0f /home/liuchan/config/flink/savepoints

(4) 从指定的savepoint运行job

bin/flink run [OPTIONS]

options:

-s: 从savepoint路径到用于还原作业的保存点

示例:

# bin/flink run -d -s /home/liuchan/config/flink/savepoints/savepoint-1af3e9-7a3891c86538 /home/liuchan/servers/compute-streaming/compute-streaming.jar –appMode=2

 

3 取消和停止job的区别如下

(1) cancel()调用,立即调用作业算子的cancel()方法,以尽快取消他们。如果算子在接

到cancel()调用后没有停止,flink将开始定期中断算子线程的执行,直到所有算子停止

为止。

(2) stop()是更加优雅的方式,仅适用于source实现了stoppableFunction接口的作业。

当用户请求停止作业时,作业的所有source都将被stop()方法调用,指导所有source

正常关闭时,作业才会正常结束,这种方式,使作业正常处理完所有作业。

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/f7ac547963.html