0


通过 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 -yinstall 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--nowdockerdocker--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 exportLANG=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 -chmod777 /flink

# 登录 flink 容器dockerexec-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 -n2-jm1024-tm1024-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 -p10-ys4 ./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

往期推荐:

  • 一文带你了解什么是CNCF&云原生
  • Hadoop HA on k8s 快速部署
  • 【云原生】zookeeper + kafka on k8s 环境部署
  • 【云原生】Presto/Trino on k8s 环境部署
  • 【云原生】Azkaban on k8s 讲解与实战操作
  • 【云原生】Flink on k8s 讲解与实战操作
  • 【云原生】Spark on k8s 讲解与实战操作
  • 【云原生】Elasticsearch + Kibana on k8s 讲解与实战操作
  • 【云原生】k8s 管理平台 rancher
  • 【云原生】Prometheus+Grafana on K8s 环境部署
  • 通过 docker-compose 快速部署 Hadoop 集群极简教程
  • 通过 docker-compose 快速部署 Hive 详细教程
  • 通过 docker-compose 快速部署 Presto(Trino)保姆级教程
  • 通过 docker-compose 快速部署 Apache Ambari 保姆级教程
  • 通过 docker-compose 快速部署 DolphinScheduler 保姆级教程

通过 docker-compose 快速部署 Flink 保姆级教程就先到这里了,有任何疑问也可关注我公众号:大数据与云原生技术分享,进行技术交流,如本篇文章对您有所帮助,麻烦帮忙一键三连(点赞、转发、收藏)~

标签: docker flink 容器

本文转载自: https://blog.csdn.net/qq_35745940/article/details/137438636
版权归原作者 大数据老司机 所有, 如有侵权,请联系我们删除。

“通过 docker-compose 快速部署 Flink 保姆级教程”的评论:

还没有评论