iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >docker 搭建 flink 并上传任务
  • 590
分享到

docker 搭建 flink 并上传任务

dockerflinkjava 2023-09-04 19:09:39 590人浏览 独家记忆
摘要

文章目录 一、docker 搭建 flink1、选择合适的 flink 版本2、重新创建 JobManager、TaskManager 容器并挂载配置文件 二、flink 简单示例1

文章目录

一、Docker 搭建 flink

1、选择合适的 flink 版本

docker 安装就不介绍了,去 dockerHub 搜索 flink 镜像,选择合适的版本安装 https://hub.docker.com/_/flink/tags

使用 docker 命令 docker pull flink: 1.16.0-Scala_2.12-java8拉去镜像
在这里插入图片描述

0-scala_2.12-java8 镜像版本说明,flink 1.16.0,flink 内置 scala 版本 2.12,Java 版本 8

建议先简单启动 flink 容器 JobManager、TaskManager 两个容器将配置文件复制出来方便挂载

# 创建 docker 网络,方便 JobManager 和 TaskManager 内部访问 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.16.0-scala_2.12-java8 jobmanager   # 创建 TaskManager  docker run \  -itd \  --name=taskmanager \  --network flink-network \  --env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \  flink:1.16.0-scala_2.12-java8 taskmanager 

启动成功
在这里插入图片描述
访问 8081 端口如下
在这里插入图片描述
copy 配置文件

# jobmanager 容器 docker cp jobmanager:/opt/flink/conf ./JobManager/# taskmanager 容器docker cp taskmanager:/opt/flink/conf ./TaskManager/
2、重新创建 JobManager、TaskManager 容器并挂载配置文件

修改 JobManager/conf/flink-conf.yaml WEB 端口号为 18081
在这里插入图片描述

修改 TaskManager/conf/flink-conf.yaml 容器任务槽为 5
在这里插入图片描述
启动容器挂载配置文件

# 启动 jobmanager   docker run -itd  -v /root/docker/flink/JobManager/conf/:/opt/flink/conf/ --name=jobmanager --publish 18081:18081 --env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" --network flink-network flink:1.16.0-scala_2.12-java8 jobmanager# 启动 taskmanager   docker run -itd  -v /root/docker/flink/TaskManager/conf/:/opt/flink/conf/ --name=taskmanager --network flink-network --env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager"  flink:1.16.0-scala_2.12-java8 taskmanager

参数解释

  • FLINK_PROPERTIES=“jobmanager.rpc.address: jobmanager” rpc 地址,必须设置,负责 jobmanager 和 taskmanager 的 rpc 地址都是随机生成,会连接不上,当然你也可以在直接修改配置文件 flink-conf.yaml

如下两个容器启动成功,可以看到 web 端口为 18081,taskmanager 启动一个,包含 5 个任务槽
在这里插入图片描述

二、flink 简单示例

官网参考地址:https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/dev/configuration/overview/

1、创建项目架构

使用 Maven 命令指定原型 Flink Maven Archetype 快速创建一个包含了必要依赖的 Flink 程序骨架,自定义项目 groupId、artifactId、package 等信息

mvn archetype:generate ^  -DarchetypeGroupId=org.apache.flink ^  -DarchetypeArtifactId=flink-quickstart-java ^  -DarchetypeVersion=1.16.0^  -DgroupId=com.ye ^  -dartifactId=flink-study ^  -Dversion=0.1 ^  -Dpackage=com.ye ^  -DinteractiveMode=false

下载成功打开项目目录

在这里插入图片描述
如下:注意运行需要设置启动参数,否则启动会找不到类,因为 pom.xml 文件 flink 相关包都添加了 provided 表示只用于生产环境,另一种方法就是将 provided 修改为runtime
在这里插入图片描述

流处理和批处理在 flink 低版本(貌似1.12)需要区分,目前都使用流处理写法

2、批处理简单示例

下面代码用来统计单词出现的的次数

public class DataBatchJob {        public static void main(String[] args) throws Exception {        // 获取 flink 环境        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();        // 添加数据源        DataStreamSource<String> streamSource = env.fromElements("hello world", "hello flink", "flink", "hello", "world");        // 对传入的流数据分组        SingleOutputStreamOperator<Tuple2<String, Integer>> streamOperator = streamSource.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {            // value 传入的数据,out            // Tuple2 二元组            // out 传出的值            @Override            public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {                String[] split = value.split(" ");                for (String s : split) {                    out.collect(Tuple2.of(s, 1));                }            }        });        // 按二元组的第 0 个位置分组        KeyedStream<Tuple2<String, Integer>, Tuple> keyBy = streamOperator.keyBy(0);        // 按二元组的第 1 个位置求和        SingleOutputStreamOperator<Tuple2<String, Integer>> sum = keyBy.sum(1);        sum.print();        env.execute("统计单词出现的次数");    }}

执行结果如下
在这里插入图片描述
上传 flink 集群

3、流处理简单示例

下面示例通过 Socket 文本源,对输入的大于 500 和小于 500 的分别求和

public class DataStreamJob {    private static final Logger logger = LoggerFactory.getLogger(DataStreamJob.class);        public static void main(String[] args) throws Exception {                // 获取 flink 环境        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();        // 添加 socket 文本流数据源        //DataStreamSource streamSource = env.fromElements("200", "100", "6000", "500", "2000", "300", "1500", "900");        DataStreamSource<String> streamSource = env.socketTextStream("127.0.0.1", 7777);        // 对大于 500 和小于 500 进行分组        KeyedStream<String, String> stringKeyedStream = streamSource.keyBy(new KeySelector<String, String>() {            @Override            public String geTKEy(String s) throws Exception {                int i = Integer.parseInt(s);                return i > 500 ? "ge" : "lt";            }        });        // 开 10 秒滚动窗口,每 10 秒为一批数据 【00:00:00 ~ 00:00:10)、【00:00:10 ~ 00:00:20)左闭右开区间        WindowedStream<String, String, TimeWindow> windowedStream = stringKeyedStream.window(TumblingProcessingTimewindows.of(Time.seconds(10)));                // 窗口处理函数,泛型 String, Integer, String, TimeWindow 依次对应 输入类型、输出类型、 KEY类型(即keyBy 返回的类型), 窗口        SingleOutputStreamOperator<Integer> outputStreamOperator = windowedStream.process(new ProcessWindowFunction<String, Integer, String, TimeWindow>() {                        @Override            public void process(String key, ProcessWindowFunction<String, Integer, String, TimeWindow>.Context context, Iterable<String> elements, Collector<Integer> out) throws Exception {                System.out.println(key);                AtomicInteger sum = new AtomicInteger();                elements.forEach(item -> sum.addAndGet(Integer.parseInt(item)));                out.collect(sum.get());            }        });        // 输出        outputStreamOperator.print();        env.execute("分组求和");    }}

在 window 或 linux 开启 Socket 文本流测试
在这里插入图片描述

4、上传 flink 集群

打包项目:可以在 pom.xml 修改启动类,也可以在命令启动或者 ui 界面上传设置启动类参数
在这里插入图片描述

①、UI 界面提交任务

使用 ui 界面上传 jar 到 flink 集群,点击 submit 运行

在这里插入图片描述

②、命令提交任务
# 如果集群( 即JobManager) 在当前服务器可以使用如下命令$ bin/flink run -Dexecution.runtime-mode=BATCH <jarFile># 如果集群( 即JobManager) 不在当前服务器,在 TaskManager 服务器提交作业可以使用如下命令# -m 指定 JobManager 服务器地址# -c 指定作业入口程序# -p 指定并行度$ bin/flink run -m 192.168.1.1:8081 -c com.ye.StreamWordCount -p 2 <jarFile># 撤销任务$ bin/flink cancle <jobId>
5、web-ui 提交查看撤销任务

批处理运行完成在这里插入图片描述
流处理正在运行
在这里插入图片描述

三、待解决

使用 docker 启动的 flink 集群发现 UI 界面的 stdout 没有 print 输出
在这里插入图片描述

来源地址:https://blog.csdn.net/qq_41538097/article/details/129113866

--结束END--

本文标题: docker 搭建 flink 并上传任务

本文链接: https://www.lsjlt.com/news/394142.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • docker 搭建 flink 并上传任务
    文章目录 一、docker 搭建 flink1、选择合适的 flink 版本2、重新创建 JobManager、TaskManager 容器并挂载配置文件 二、flink 简单示例1...
    99+
    2023-09-04
    docker flink java
  • Docker搭建Redis5.0并挂载数据
    目录 一、简单挂载持久化数据二、通过DockerFile构建镜像,指定配置文件启动记录 Docker 搭建 Redis5.0 并挂载数据过程,搭建参考自 Docker Hu...
    99+
    2024-04-02
  • Docker上实现Redis集群搭建
    目录1、拉取镜像2、创建Redis容器3、启动并组建集群启动容器4、存在的问题环境:Docker + ( Redis:5.0.5 * 3 ) 1、拉取镜像 docker pull...
    99+
    2024-04-02
  • 分布式任务调度系统xxl-job搭建(基于docker)
    XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。更多介绍,请访问官网:http://www.xuxueli.com/xxl-job/#/&n...
    99+
    2023-01-31
    分布式 系统 xxl
  • Docker怎么搭建Redis5.0并挂载数据
    本篇内容主要讲解“Docker怎么搭建Redis5.0并挂载数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker怎么搭建Redis5.0并挂载数据”吧!目录 一、简单挂载持久...
    99+
    2023-06-20
  • 怎么在云服务器上搭建传奇
    在云服务器上搭建传奇可以考虑以下步骤: 选择云服务器:您可以选择适合您服务器配置的云服务器,如AWS、阿里云等,也可以通过在线搜索等方式获取更多云服务器的选项。 配置云服务器:在云服务器上配置您的应用程序,包括用户名密码、数据库备份、虚...
    99+
    2023-10-26
    器上 传奇
  • Spring Boot如何搭建文件上传服务
    这篇文章主要介绍Spring Boot如何搭建文件上传服务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本文实例为大家分享了Spring Boot搭建文件上传服务的具体代码,供大家参考,具体内容如下一、服务端pom....
    99+
    2023-05-30
    spring boot
  • git服务器搭建docker
    近年来,随着云计算和容器技术的兴起,Docker成为最流行的容器化技术之一。而Git作为目前最常用的版本控制工具,也需要与Docker进行整合,以便更好地管理代码和应用程序。在本文中,将介绍如何在Docker容器中搭建Git服务器。安装Do...
    99+
    2023-10-22
  • 搭建网站如何上传源码
    使用宝塔搭建网站上传源码的方法首先,登录宝塔,进入宝塔操作界面;在宝塔操作界面中,点击“文件”选项,进入网站根目录;进入网站根目录后,点击“上传”按钮;最后,将网站源码上传到网站根目录“wwwroot”文件中即可;...
    99+
    2024-04-02
  • Docker搭建MySQL并挂载数据的全过程
    目录一、Docker搭建MySQL并挂载数据二、挂载是否生效其他总结 记录 Docker 搭建 MySQL 并挂载数据过程,搭建过程参考自 Docker Hub&...
    99+
    2024-04-02
  • 怎么在云服务器上搭建传奇服务器
    在云服务器上搭建传奇服务器可以采取以下步骤: 选择云服务器提供商:在您决定选择哪家云服务器提供商之前,应该仔细研究它的服务、价格和功能。选择可靠的云服务器提供商,确保你的服务器不会因为任何问题而停机或崩溃。 注册并登录:在浏览器中输入h...
    99+
    2023-10-26
    器上 服务器 传奇
  • 怎么在云服务器上搭建传奇账号
    在云服务器上搭建传奇账号的过程中,有一些常见的步骤和注意事项: 1.选择云服务器提供商:在选择云服务器提供商时,建议您选择那些信誉良好、拥有庞大的客户群体的公司,这样的公司在技术、服务和安全方面都会有更高的保障。 2.选择服务器硬件:如果...
    99+
    2023-10-26
    账号 器上 传奇
  • 云服务器怎么搭建网站上传文件
    要搭建一个网站并上传文件,你可以按照以下步骤操作:1. 购买云服务器:选择一家云服务提供商,注册账号并购买一个适合你需求的云服务器实...
    99+
    2023-09-26
    云服务器
  • 怎么在云服务器上搭建传奇服务器呢
    在云服务器上搭建传奇服务器有几个步骤: 选择云服务器提供商:选择一个提供大规模云计算服务的提供商可以帮助您节省购买和安装虚拟化软件的成本。例如,您可以选择微软的Azure、Google的GCPloud或OpenStack等云计算服务商,...
    99+
    2023-10-26
    器上 服务器 传奇
  • Docker Compose怎么搭建Wordpress服务
    本篇内容主要讲解“Docker Compose怎么搭建Wordpress服务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker Compose怎么搭建Wordpres...
    99+
    2023-07-05
  • docker-maven-plugin打包镜像并上传到私有仓库
    目录1、docker-maven-plugin 介绍2、环境、软件准备3、Demo 示例3.1 配置 DOCKER_HOST3.2 示例构建镜像3.3 执行命令3.4 绑定Docke...
    99+
    2024-04-02
  • 怎么在云服务器上搭建传奇账号呢
    在云服务器上搭建传奇账号可以有多种方式,以下是一些常见的方法: 购买:购买一个云服务器的虚拟主机。这种方法可以确保传奇账号能够正常使用,并且可以享受稳定的技术支持。 租用云服务器:租用云服务器是一种较为便宜的方法,需要付费使用。但需要注...
    99+
    2023-10-26
    账号 器上 传奇
  • 本地搭建网站怎么上传文件
    本地搭建网站时配置ftp服务器实现上传文件在Windows操作界面中,进入“控制板面”,打开“默认程序”应用;进入默认程序后,点击“程序和功能”,选择“打开或关闭Windows功能”;在弹出的“Windows功能”窗口中,勾选“FTP服务器...
    99+
    2024-04-02
  • 文件上传漏洞靶机搭建教程
    uplad-labs靶场 注意:该靶场为优秀的github开源项目,项目地址为:https://github.com/c0ny1/upload-labs 介绍 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到...
    99+
    2023-08-31
    安全 php web安全
  • 云服务器搭建传奇
    云服务器搭建传奇可以按照以下步骤进行: 确定服务器的配置和要求:在开始服务器搭建之前,需要确定自己的服务器需要哪些软件、硬件支持,如操作系统、数据库、存储设备等,这些信息可以让你的服务器搭建更加高效、安全。 选择云服务提供商:选择一个能...
    99+
    2023-10-26
    服务器 传奇
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作