【Flink】基于Docker下的Flink运行环境搭建(Mac)

这篇具有很好参考价值的文章主要介绍了【Flink】基于Docker下的Flink运行环境搭建(Mac)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

创建一个本地运行环境是提高开发效率和便捷进行代码调试的关键。我们将一起构建一个本地环境,专门用于执行Flink任务。

此环境以Flink 1.17.2版本为基础,采用Docker技术搭建而成。通过这种方式,我们能够模拟出一个接近实际生产环境的运行条件,帮助我们更好地测试和优化我们的Flink应用。

代码链接: flink_study_notes

一、环境搭建

选择flink版本

选择自己实际应用的flink版本,本次我选择1.17.2flink版本作为演示版本。
链接: Docker-Hub-flink-1.17.2
flink maven docker,flink,flink,docker,macos
flink maven docker,flink,flink,docker,macos
镜像说明:

  • flink 1.13.0
  • flink 内置 :scala 版本 2.12,Java 版本 8

配置文件准备

获取配置文件

为了轻松获得完整的配置设置,建议首先启动镜像,然后将内置的配置文件复制到外部。这一步骤将简化未来对配置的修改以及环境的快速部署。通过预先准备好配置文件,你可以避免从零开始的重复工作,并能够快速地调整和应用新的配置参数。

生成配置文件

为环境创建一个独立的网络1

使用Docker网络可以让你将多个容器连接在一起,允许容器间相互通信并组成一个隔离的网络环境,类似于在宿主机上创建一个虚拟子网。

 docker network create flink-network

创建JobManager

docker run \
  -itd \
  --name=jobmanager \
  --publish 8081:8081 \
  --network flink-network \
  --env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \
  flink:1.17.2-scala_2.12-java8 jobmanager 

创建 TaskManager

docker run \
  -itd \
  --name=taskmanager \
  --network flink-network \
  --env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \
  flink:1.17.2-scala_2.12-java8 taskmanager 

运行结果
flink maven docker,flink,flink,docker,macos

命令与参数解析

这条命令在flink-network网络下以后台模式运行一个新的Flink
TaskManager容器,容器名称为taskmanager,并将作业管理器的RPC地址设置为同网络中的jobmanager容器。

  • –network flink-network: 将容器连接到预先创建的网络flink-network,容器将使用该网络的配置与其他容器通信。
  • –env FLINK_PROPERTIES=“jobmanager.rpc.address: jobmanager”: 设置环境变量FLINK_PROPERTIES。该变量定义了Apache
    Flink的配置,jobmanager.rpc.address是指明连接到的JobManager的地址,在这里被设置为容器名称jobmanager,表示TaskManager将会连接到同一Docker网络内名为jobmanager的容器。
文件拷贝至本地
#本地创建目录
mkdir -p ~/app/flink/
#进入目录
cd ~/app/flink/
# jobmanager 容器
docker cp jobmanager:/opt/flink/conf ./JobManager/
# taskmanager 容器
docker cp taskmanager:/opt/flink/conf ./TaskManager/

命令说明:
该命令会将名为jobmanager|taskmanager的容器的/opt/flink/conf目录中的内容复制到当前工作目录下的JobManager|TaskManager文件夹中。这样做的目的是为了方便修改Flink的配置文件。

删除容器
docker rm -f taskmanager
docker rm -f jobmanager
修改配置
#修改 JobManager/flink-conf.yaml web 端口号为 18081
rest.port: 18081

flink maven docker,flink,flink,docker,macos

#修改 TaskManager/flink-conf.yaml 容器任务槽为 5
taskmanager.numberOfTaskSlots: 5

flink maven docker,flink,flink,docker,macos

重新挂载并创建容器

启动 jobmanager

docker run \
-itd  \
-v ~/app/flink/JobManager/:/opt/flink/conf/ \
--name=jobmanager \
--publish 18081:18081 \
--env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \
--network flink-network flink:1.17.2-scala_2.12-java8 jobmanager

启动 taskmanager

docker run \
-itd  \
-v ~/app/flink/TaskManager/:/opt/flink/conf/ \
--name=taskmanager --network flink-network \
--env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager"  \
flink:1.17.2-scala_2.12-java8 taskmanager

容器启动成功
flink maven docker,flink,flink,docker,macos
链接: 访问地址
flink maven docker,flink,flink,docker,macos

二、Flink example

官网地址: 项目配置

创建项目脚手架

maven命令:根据自己实际情况修改

mvn archetype:generate \
 -DarchetypeGroupId=org.apache.flink  \
 -DarchetypeArtifactId=flink-quickstart-java  \
 -DarchetypeVersion=1.17.2 \
 -DgroupId=cn.demo  \
 -DartifactId=flink_study_notes  \
 -Dversion=0.1 \
 -Dpackage=cn.demo \
 -DinteractiveMode=false

命令解释:
这个命令的功能是创建一个新的Maven项目,项目类型是Apache Flink的Java快速开始项目,项目的groupId是cn.demo,artifactId是flink_study_notes,版本号是0.1,最终项目的包路径也是cn.demo。并且在指定这些参数后,禁用了交互,所以该命令可以自动完成所有操作无需任何用户交互。

打开工程
flink maven docker,flink,flink,docker,macos
provided: 项目中provided作为默认参数,可以让你更加精确地管理你的依赖关系,在你的项目环境中提供所需的资源,而在实际运行环境中,则由运行平台或者容器来提供。但是在本地ide中运行时会有如下错误:
flink maven docker,flink,flink,docker,macos
为了解决这个问题,我们需要在ide appliation运行配置中进行如下设置:
flink maven docker,flink,flink,docker,macos

批处理示例

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class DataBatchJob {
    public static void main(String[] args) throws Exception {
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        DataStreamSource<String> streamSource = env.fromElements("world count", "hello world", "hello flink", "flink", "hello",
                "hello world", "hello flink", "flink", "hello", "world");
        SingleOutputStreamOperator<Tuple2<String, Integer>> streamOperator = streamSource.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
            @Override
            public void flatMap(String value, org.apache.flink.util.Collector<Tuple2<String, Integer>> out) throws Exception {
                String[] split = value.split(" ");
                for (String s : split) {
                    out.collect(Tuple2.of(s, 1));
                }
            }
        });
        streamOperator.keyBy(value -> value.f0).sum(1).print();
        env.execute("count the number of times a word appears");
    }
}

流处理示例

import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;

public class DataStreamJob {
	public static void main(String[] args) throws Exception {
		StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
		env.setParallelism(3);
		DataStreamSource<String> socketDS = env.socketTextStream("127.0.0.1", 7777);
		SingleOutputStreamOperator<Tuple2<String, Integer>> sum = socketDS
				.flatMap(
						(String value, Collector<Tuple2<String, Integer>> out) -> {
							String[] words = value.split(" ");
							for (String word : words) {
								out.collect(Tuple2.of(word, 1));
							}
						}
				)
				.setParallelism(2)
				.returns(Types.TUPLE(Types.STRING, Types.INT))
				.keyBy(value -> value.f0)
				.sum(1);
		sum.print();
		env.execute();
	}
}

运行结果:
flink maven docker,flink,flink,docker,macos
flink maven docker,flink,flink,docker,macos

jar包上传flink集群运行

flink maven docker,flink,flink,docker,macos

方式一:界面提交

flink maven docker,flink,flink,docker,macos

方式二: 命令提交
#提交任务
flink run -m 127.0.0.1:18081 -c cn.demo.DataBatchJob  -p 2 flink_study_notes-0.1.jar
#取消任务
flink cancle <JobID>
界面效果

flink maven docker,flink,flink,docker,macos
flink maven docker,flink,flink,docker,macos


  1. 当你创建了一个如flink-network的自定义网络后,你可以在启动Docker容器时使用--network标志将容器附加到这个网络上,例如docker run --network flink-network your-image。这使得容器能够以更细粒度的网络设置进行通信,并且比默认的桥接网络提供更好的安全性和灵活性。 ↩︎文章来源地址https://www.toymoban.com/news/detail-827962.html

到了这里,关于【Flink】基于Docker下的Flink运行环境搭建(Mac)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink高手之路:Flink的环境搭建

    本地单机模式,一般用于测试环境是否搭建成功,很少使用 flink 自带集群,开发测试使用 StandAloneHA :独立集群的高可用模式,也是 flink 自带,用于开发测试环境 计算资源统一由hadoop yarn管理,生产环境使用   上传到hadoop001 [root@hadoop001 software]# tar -xzvf flink-1.12.2-bin-scala_2.1

    2023年04月24日
    浏览(50)
  • Apache Flink连载(十八):Flink On Yarn运行原理及环境准备

     🏡 个人主页:IT贫道-CSDN博客  🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~  🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. Flink On Yarn运行原理

    2024年02月03日
    浏览(40)
  • 206.Flink(一):flink概述,flink集群搭建,flink中执行任务,单节点、yarn运行模式,三种部署模式的具体实现

    Flink官网地址:Apache Flink® — Stateful Computations over Data Streams | Apache Flink Flink是一个 框架 和 分布式处理引擎 ,用于对 无界 和 有界 数据流进行 有状态计算 。 无界流(流): 有定义流的开始,没有定义结束。会无休止产生数据 无界流数据必须持续处理 有界流(批): 有定

    2024年02月11日
    浏览(49)
  • Flink第一章:环境搭建

    Flink第一章:环境搭建 Flink也是现在现在大数据技术中火爆的一门,反正大数据的热门技术学的也差不多了,啃完Flink基本的大数据技术就差不多哦学完了. 略 这里说明一下我选择的环境. java8 scala2.12 flink采用最新的1.17 请大家根据自己的环境更换版本 注 :这里使用DataSet对数据进行

    2024年02月04日
    浏览(57)
  • flink cdc环境搭建

    1.下载flink 2.修改flink-conf.yaml #根据自己电脑核数修改,这里我设置为4,因为系统分配了4核 jobmanager.rpc.address: localhost #主机名根据自己设定 taskmanager.numberOfTaskSlots: 4  3.下载flink-sql mysql cdc包 flink-sql-connector-mysql-cdc-1.2.0.jar 4.下载fink jdbc包  5.下载flink changelog-json数据格式包 6.将以

    2024年02月15日
    浏览(53)
  • Flink编程——基础环境搭建

    准备环境搭建 我们先把电脑的准备环境给安装好,这样后面才能顺利的学习和时间 因为后面可能用到的有:Kafka、MySQL、ElasticSearch 等,另外像 Flink 编写程序还需要依赖Java,还有就是我们项目是用 Maven来管理依赖的,所以需要把这些环境搭建起来,如果可以的话也可以把Ha

    2024年01月23日
    浏览(83)
  • flink1.13环境搭建

    最简单的启动方式,其实是不搭建集群,直接本地启动。本地部署非常简单,直接解压安装包就可以使用,不用进行任何配置;一般用来做一些简单的测试。 具体安装步骤如下: 1.1 下载安装包 进入 Flink 官网,下载 1.13.0 版本安装包 flink-1.13.0-bin-scala_2.12.tgz,注意此处选用对

    2024年01月22日
    浏览(45)
  • 【Flink SQL】Flink SQL 基础概念(一):SQL & Table 运行环境、基本概念及常用 API

    《 Flink SQL 基础概念 》系列,共包含以下 5 篇文章: Flink SQL 基础概念(一):SQL Table 运行环境、基本概念及常用 API Flink SQL 基础概念(二):数据类型 Flink SQL 基础概念(三):SQL 动态表 连续查询 Flink SQL 基础概念(四):SQL 的时间属性 Flink SQL 基础概念(五):SQL 时区问

    2024年03月21日
    浏览(78)
  • 【极数系列】Flink环境搭建(02)

    tips:下载地址https://repo.huaweicloud.com/java/jdk/ 双击解压后jdk的exe运行文件 tips:一般不安装在C盘,修改路径,接着直接next 此电脑–属性–高级系统设置–环境变量–找到系统变量path–选择新建–把jdk与jre目录均加上 进入oracle目录,如我的是C:ProgramDataOracleJavajavapath,删除该

    2024年01月24日
    浏览(49)
  • 搭建单机版K8S运行Flink集群

    环境要求 操作系统: CentOS 7.x 64位 Kubernetes版本:v1.16.2 Docker版本:19.03.13-ce Flink版本:1.14.3 使用中国YUM及镜像源  1.安装Kubernetes: 1.1 创建文件:/etc/yum.repos.d/kubernetes.repo,内容如下: 1.2  执行安装命令:  1.3 启动kubelet服务并设置开机自启: 2.安装Docker: 2.1 创建文件:

    2023年04月26日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包