通过 docker-compose 快速部署 Flink 保姆级教程
一、概述
Apache Flink 是一个开源的流处理框架,用于处理和分析实时数据流。它支持事件驱动的应用和复杂的事件处理(CEP),并且可以处理批处理任务。Flink 提供了高吞吐量、低延迟以及强大的状态管理和容错能力。它可以在各种环境中运行,包括本地集群、云环境和容器化环境(如 Docker 和 Kubernetes)。
Flink 的一些关键特性包括:
-
高吞吐量和低延迟:Flink 能够处理大规模的数据流,同时保持毫秒级的处理延迟。
-
状态管理和容错:Flink 提供了强大的状态管理功能,允许在发生故障时从检查点或保存点恢复作业。
-
事件时间处理:Flink 支持基于事件时间的数据处理,可以处理乱序事件和长时间运行的计算。
-
CEP(复杂事件处理):Flink 可以识别和处理复杂的事件模式,这对于监控和警报等应用非常有用。
-
批流一体:Flink 统一了批处理和流处理,使得开发人员可以使用相同的 API 来编写批处理和流处理作业。
-
可伸缩性:Flink 可以在小型集群到大型集群中运行,支持水平伸缩以适应不同的负载需求。
-
生态系统:Flink 拥有丰富的连接器和库,可以与各种数据源和数据存储系统集成。
-
多语言支持:Flink 提供了 Java 和 Scala API,并且通过 DataStream API 支持 Python 和其他语言的集成。
Flink 适用于需要实时数据分析的场景,如金融市场监控、网络安全、物联网数据处理等。它的设计目标是提供一个易于使用、灵活且高性能的数据处理平台。
二、部署 hadoop 集群
容器部署 hadoop 环境可以参考我这篇文章:通过 docker-compose 快速部署 Hadoop 集群极简教程
# 拉取部署包
git clone https://gitee.com/hadoop-bigdata/docker-compose-hadoop.git
cd docker-compose-hadoop/hadoop
# 开始部署
# 这里-f docker-compose.yaml可以省略,如果文件名不是docker-compose.yaml就不能省略,-d 后台执行
docker-compose -f docker-compose.yaml up -d
# 查看部署状态
docker-compose -f docker-compose.yaml ps
三、开始编排部署 Flink 集群
在 Docker 中部署 Apache Flink 集群是一种流行的实践,因为它简化了环境的配置和管理工作。以下是关于使用 Docker 部署 Flink 的详细步骤和配置选项:
官方文档:https://nightlies.apache.org/flink/flink-docs-master/zh/docs/try-flink/flink-operations-playground/
1)部署 docker
# 安装yum-config-manager配置工具
yum -y install yum-utils
# 建议使用阿里云yum源:(推荐)
#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker-ce版本
yum install -y docker-ce
# 启动并开机启动
systemctl enable --now docker
docker --version
2)部署 docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/bin/docker-compose
docker-compose --version
4)构建镜像
FROM flink:1.17.2
RUN rm -f /etc/localtime && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
RUN export LANG=zh_CN.UTF-8
# 创建用户和用户组,跟yaml编排里的user: 10000:10000
RUN groupadd --system --gid=10000 hadoop && useradd --system --home-dir /home/hadoop --uid=10000 --gid=hadoop hadoop -m
# 给hadoop添加sudo权限
RUN echo "hadoop ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
RUN mkdir /opt/apache
ADD hadoop-3.3.5.tar.gz /opt/apache
RUN ln -s /opt/apache/hadoop-3.3.5 /opt/apache/hadoop
ENV HADOOP_HOME /opt/apache/hadoop
ENV PATH=$HADOOP_HOME/bin/:$PATH
RUN chown -R hadoop:hadoop /opt/
开始构建
# 需要查看构建镜像详细过程则需要加上 --progress=plain 选项
docker build -t registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/flink:1.17.2 . --no-cache --progress=plain
# 为了方便小伙伴下载即可使用,我这里将镜像文件推送到阿里云的镜像仓库
docker push registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/flink:1.17.2
### 参数解释
# -t:指定镜像名称
# . :当前目录Dockerfile
# -f:指定Dockerfile路径
# --no-cache:不缓存
5)编排 docker-compose.yaml 部署
docker-compose.yml
version: '3'
services:
jobmanager:
image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/flink:1.17.2
container_name: jobmanager
hostname: jobmanager
user: "hadoop:hadoop"
ports:
- "8081:8081"
command: jobmanager
volumes:
- ./checkpoint:/opt/flink/checkpoint
- ./savepoint:/opt/flink/savepoint
- ./hadoop/etc/hadoop/core-site.xml:/opt/apache/hadoop/etc/hadoop/core-site.xml
- ./hadoop/etc/hadoop/hdfs-site.xml:/opt/apache/hadoop/etc/hadoop/hdfs-site.xml
- ./hadoop/etc/hadoop/yarn-site.yml:/opt/apache/hadoop/etc/hadoop/yarn-site.yml
environment:
- TZ=Asia/Shanghai
- |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
networks:
- hadoop_hadoop_network
taskmanager:
image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/flink:1.17.2
user: "hadoop:hadoop"
depends_on:
- jobmanager
command: taskmanager
volumes:
- ./checkpoint:/opt/flink/checkpoint
- ./savepoint:/opt/flink/savepoint
- ./hadoop/etc/hadoop/core-site.xml:/opt/apache/hadoop/etc/hadoop/core-site.xml
- ./hadoop/etc/hadoop/hdfs-site.xml:/opt/apache/hadoop/etc/hadoop/hdfs-site.xml
- ./hadoop/etc/hadoop/yarn-site.yml:/opt/apache/hadoop/etc/hadoop/yarn-site.yml
environment:
- TZ=Asia/Shanghai
- |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
taskmanager.numberOfTaskSlots: 3
networks:
- hadoop_hadoop_network
# 连接外部网络
networks:
hadoop_hadoop_network:
external: true
可以使用 docker-compose scale 命令来调整 Flink TaskManager 服务的示例:
docker-compose scale taskmanager=3
6)测试验证
# 登录 hdfs 节点创建flink 目录
hdfs dfs -mkdir /flink
hdfs dfs -chmod 777 /flink
# 登录 flink 容器
docker exec -it docker-compose-flink_jobmanager_1_4495d6e63aa7 bash
# LICENSE 这个文件,读写HDFS文件
hadoop fs -mkdir /flink/
hadoop fs -put /opt/apache/hadoop/NOTICE.txt /flink/
hadoop fs -ls /flink/NOTICE.txt
### 1、提交到flink集群
flink run -m localhost:8081 ./examples/batch/WordCount.jar -input hdfs://hadoop-hdfs-nn:9000/flink/NOTICE.txt -output hdfs://hadoop-hdfs-nn:9000/flink/wordcount-result
### 2、提交任务到YARN 集群
# 1、yarn-session.sh 模式
# Yarn-session模式下,首先向Yarn提交一个长时运行的空应用,运行起来之后,任务跑完集群也不释放,可以重复使用在Yarn上开启的Flink集群,也称为共享型集群,适合小任务。
yarn-session.sh -n 2 -jm 1024 -tm 1024 -d
flink run ./examples/batch/WordCount.jar -input hdfs://hadoop-hdfs-nn:9000/flink/NOTICE.txt -output hdfs://hadoop-hdfs-nn:9000/flink/wordcount-result2
# 2、Yarn-cluster模式下
# 每个任务单独在Yarn上启动一套Flink集群,适合大任务,运行完后结束,集群释放,资源释放,再有任务,会再起新的Flink集群,需要频繁的在Yanr上开启Flink集群,集群相互独立,适合大任务。
flink run -m yarn-cluster -yd -yjm 1024m -ytm 1024m -ynm WordCountJob -p 10 -ys 4 ./examples/batch/WordCount.jar --input hdfs://hadoop-hdfs-nn:9000/flink/NOTICE.txt --output hdfs://hadoop-hdfs-nn:9000/flink/wordcount-result3
# 3、Application模式
# Application模式原本需要客户端做的三件事被转移到了JobManager里,也就是说main()方法在集群中执行(入口点位于ApplicationClusterEntryPoint),Deployer只需要负责发起部署请求了。另外,如果一个main()方法中有多个env.execute()/executeAsync()调用,在Application模式下,这些作业会被视为属于同一个应用,在同一个集群中执行(如果在Per-Job模式下,就会启动多个集群)。可见,Application模式本质上是Session和Per-Job模式的折衷。
./bin/flink run-application -t yarn-application \
-Djobmanager.memory.process.size=2048m \
-Dtaskmanager.memory.process.size=4096m \
-Dtaskmanager.numberOfTaskSlots=2 \
-Dparallelism.default=10 \
-Dyarn.application.name="MyFlinkApp" \
./examples/batch/WordCount.jar
# 查看任务列表
flink list -m localhost:8081
# 取消任务
# ./bin/flink cancel <job-id>
flink cancel -m localhost:8081 21b729b27dafc971ac8daba85622d2af
# 查看YARN 上的flink任务
# flink list -m yarn-cluster -yid <applicatio_id>
flink list -m yarn-cluster -yid application_1712987032680_0003
往期推荐:
通过 docker-compose 快速部署 Flink 保姆级教程就先到这里了,有任何疑问也可关注我公众号:大数据与云原生技术分享,进行技术交流,如本篇文章对您有所帮助,麻烦帮忙一键三连(点赞、转发、收藏)~