使用Docker快速部署Flink分布式集群

前言

大家是否记得自己是怎么开始学习大数据的内容呢,估计关注我得同学会发现前面有点陆续有点关于Docker的小烂文,是因为使用Docker可以最快的速度让我们拥有一个学习的环境。大数据的东西都逃不过搭建环境测试跑通这么一个过程,我自己也是过来人,尤其是刚刚接触比较新的东西的时候受制于当前的网络,当前的配置一系列的问题,导致大量从入门到放弃的情况非常多,今天我通过一些实际的例子,让大家感受一下这种便利性。

误区

首先一定要纠正一个误区,尤其是这种技术类型的,不是说需要掌握100%才去使用,但凡了解了一丢丢,你就应该去做了,很多人一上来就干到很深的底层原理,那样学习本身的成本就很高了,没必要。另外一方面来说试错这个事情本身就是学习的过程。更重要的一点,一定是你自己亲自动手跑通的才算,因为参考学习视频学的时候,你发现老师操作的时候异常顺利,因为有些问题老师处理过了,有的问题在老师的环境上面就没有。

目标

我这里是两个小案例,通过这种案例让大家感受到docker作为工具给我们带来便利,一是自己编写的java使用docker跑通,第二个是使用docker快速获得flink的环境。 前提,大家机器里面有docker环境,注意了docker环境在mac和windows都是有图形安装的,所以和安装QQ这种完全是一样的,官网在这里,点击,下载安装包安装就行,不用很复杂的配置。我知道这里面在很多教学资料告诉怎么去linux上面安装,那是深入学习的时候才会到linux上面去,这个地方千万别花太多时间折腾了。
在这里插入图片描述

跑通一个自己的Java程序

首先当然是构建一个maven工程,大家养成习惯为了让后面的人工作顺利进行,前面的工作做好,我这里提前准备一下maven仓库的配置,内容如下

cat /Users/zhuxuemin/.m2/settings_aliyun.xml

这里面关键的内容其实是阿里云仓库配置,这样后面会顺利一些

<mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
            <mirrorOf>central</mirrorOf>
</mirror>

构建工程了,我是比较喜欢先命令行构建出来,再导入idea,所以下面的命令顺利会和前面工作有关系

mvn --settings /Users/zhuxuemin/.m2/settings_aliyun.xml archetype:generate -DgroupId=net.blog.csdn -DartifactId=docker-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

构建出来导入idea,就是一个简单的maven工程,帮我们输出一下。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ef0af76c7bc144eca352d18f5112208b.png在这里插入图片描述
在根目录下面新建Dockerfile文件,里面放入内容,如下:

FROM williamyeh/java8
COPY target/docker-app-1.0-SNAPSHOT.jar /usr/local/docker-app-1.0-SNAPSHOT.jar
CMD ["java", "-cp", "/usr/local/docker-app-1.0-SNAPSHOT.jar","net.blog.csdn.App"]

构建镜像

docker build . -t docker-java-app

显示如下:

Sending build context to Docker daemon  38.91kB
Step 1/3 : FROM williamyeh/java8
 ---> 00bc163fa009
Step 2/3 : COPY target/docker-app-1.0-SNAPSHOT.jar /usr/local/docker-app-1.0-SNAPSHOT.jar
 ---> 4738e15804e9
Step 3/3 : CMD ["java", "-jar", "/usr/local/docker-app-1.0-SNAPSHOT.jar"]
 ---> Running in d9a68086b6ce
Removing intermediate container d9a68086b6ce
 ---> 519ece8e6b16
Successfully built 519ece8e6b16
Successfully tagged docker-java-app:latest

运行如下,至此我们的程序顺利在docker环境下面运行了

docker run docker-java-app
Hello World!

接下来,学会学习,如果就是这样子copy过去,十有八九干不成功,事实上这个套路百度是可以搜索到的。现在都是大模型交互的方式,所以大家要学会去问了。
在这里插入图片描述
好了,这里面情况就是,下面myjavaapp还好理解,大家改成自己的工程名字就行,需要说明的情况是from这个命令

FROM openjdk:8-jdk-alpine

这里是这样的,我们运行java不是要一个java环境嘛,这里面按照docker的术语来说就是基于之前的镜像去走叠加,相当于他有一个床架子,我们可以往上面加我们喜欢的被子,这里面就是要看自己的仓库有哪些基础环境

docker search jdk

结果如下,这里面可以看到一堆相关的,选择一个就行,细心的同学可以看到,并没有我上面代码上面使用到的williamyeh/java8,这个是因为我之前使用的时候有,然后在本机已经有了,所以说这个镜像其实是会变化的,大家需要灵活调整。

NAME                                  DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
java                                  DEPRECATED; use "openjdk" (or other JDK impl…   2002      [OK]       
bellsoft/liberica-runtime-container   Alpaquita based image for Liberica JDK and J…   17                   
eclipse/ubuntu_jdk8                   Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, …   17                   [OK]
jdkato/vale                           The official Docker image for Vale.             10                   
eclipse/centos_jdk8                   CentOS, JDK8, Maven 3, git, curl, nmap, mc, …   5                    [OK]
dockette/jdk8                         My Oracle Java 8 Dockerfile                     5                    [OK]
jdkelley/simple-http-server                                                           1                    
eucm/maven                            Maven 3.3.9 with Java jdk 8 Docker image rep…   1                    [OK]
eclipse/ubuntu_jdk8_x11               Based on Ubuntu 14, JDK 8, Maven 3.3.9, x11 …   1                    [OK]
sismics/debian-java                   Debian Jessy + Oracle JDK                       1                    
eclipse/debian_jdk8                   Debian, JDK8, Maven 3, git, curl, nmap, mc, …   1                    [OK]
eclipse/debian_jdk8_node              Node (+ Angular stuff) + JDK8. Debian based     1                    [OK]
eclipse/alpine_jdk8                   Based on Alpine 3.3. JDK 1.8, Maven 3.3.9, T…   1                    [OK]
eclipse/ubuntu_wildfly8               Ubuntu 14.04, JDK 1.8, Maven 3.3.9, Wildfly 8   0                    [OK]
eclipse/hadoop-dev                    Ubuntu 14.04, Maven 3.3.9, JDK8, Tomcat 8       0                    [OK]
clarinpl/java                         Ubuntu with java ( jdk-8u161)                   0                    
eclipse/ubuntu_gradle                 Ubuntu, JDK1.8, Gradle2.3                       0                    [OK]
bellsoft/buildpacks.liberica          A Cloud Native Buildpack for Alpaquita Linux…   0                    
jdk1/php-redis-modified                                                               0                    
vespaengine/vespa-pipeline            Docker image with supported versions of Mave…   0           

快速上手flink环境

这个就比较有意思了,相信很多人想玩大数据的东西,第一时间是想找个地方爽一把先,但是往往搭建环境这个事情上怀疑人生,上网搜索吧,乱七八糟的讲啥都有。文档在这里,点我
其实官网就是给了2+N动作,首先就是设置一个配置参数,因为后面需要不断使用这个参数,再构建一个网络,可以理解后面的节点要相互通信,就都使用同一个网络就好了。

FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager"
docker network create flink-network

第二步,来个主节点

docker run \
    --rm \
    --name=jobmanager \
    --network flink-network \
    --publish 8081:8081 \
    --env FLINK_PROPERTIES="${FLINK_PROPERTIES}" \
    flink:1.18.1-scala_2.12 jobmanager

其实这个时候已经可以在浏览器输入 http://localhost:8081,访问到了,不过玩多了大数据的人都知道,这种时候管的是主备,不能光这个。
在这里插入图片描述
下面就是启动从节点了:

docker run \
    --rm \
    --name=taskmanager \
    --network flink-network \
    --env FLINK_PROPERTIES="${FLINK_PROPERTIES}" \
    flink:1.18.1-scala_2.12 taskmanager

不过有个问题发现启动主节点的时候那个控制台一直没有退出,卡着,从节点这里好像没有办法去写命令,这里可以开一个新窗口去搞,没问题。
在这里插入图片描述
当然一模一样抄过来代码也显得我这种博客其实是废物,还不如直接去官网抄就好。当然,只有实际动手的同学才会对下面的内容感兴趣,所以我们对节点启动命令调整一下,首先是启动节点,我们希望在后台运行就可以了。
–rm 其实是说退出后可以把容器都销毁的意思,主打一个绿色环保,我们调整成 -d ,deamon 的意思。
主节点启动命令:

docker run \
    -d \
    --name=jobmanager \
    --network flink-network \
    --publish 8081:8081 \
    --env FLINK_PROPERTIES="${FLINK_PROPERTIES}" \
    flink:1.18.1-scala_2.12 jobmanager

对应从节点, 相应改造即可,这个从节点,执行一次便会启动一个从节点,所以可以执行多次,但是如果每次执行的话taskmanager作为容器名字不能重复,不方便,所以我改了两个地方,一个是 调整为-d模式,后台执行
第二个是去掉指定容器名称的操作

docker run \
	-d \
    --network flink-network \
    --env FLINK_PROPERTIES="${FLINK_PROPERTIES}" \
    flink:1.18.1-scala_2.12 taskmanager

每次运行一次,都可以在Task managers的地方多新增节点,这便是分布式部署的样子啦。
在这里插入图片描述
这其实就结束了。

跑起来

flink其实是有很多开发好的应用的,不过在容器的环境,我们怎么跑起来,首先找到我们运行的容器,随便哪个都行

docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED             STATUS             PORTS                              NAMES
26d17915e2dd   flink:1.18.1-scala_2.12           "/docker-entrypoint.…"   24 minutes ago      Up 24 minutes      6123/tcp, 8081/tcp                 magical_carson
a244103c431b   flink:1.18.1-scala_2.12           "/docker-entrypoint.…"   24 minutes ago      Up 24 minutes      6123/tcp, 8081/tcp                 sharp_mestorf
926ecf993f0f   flink:1.18.1-scala_2.12           "/docker-entrypoint.…"   24 minutes ago      Up 24 minutes      6123/tcp, 8081/tcp                 epic_hofstadter
cc868476ee11   flink:1.18.1-scala_2.12           "/docker-entrypoint.…"   28 minutes ago      Up 28 minutes      6123/tcp, 8081/tcp                 taskmanager
cd422928babc   flink:1.18.1-scala_2.12           "/docker-entrypoint.…"   About an hour ago   Up About an hour   6123/tcp, 0.0.0.0:8081->8081/tcp   jobmanager

docker容器是支持写一部分id就可以匹配,我们从容器上把jar可以copy到本机

 docker cp 26d1:/opt/flink/examples/streaming/WordCount.jar .

然后在页面上上次jar即可

在这里插入图片描述
然后就跑起来了。
在这里插入图片描述

总结

本文其实是介绍了最长见的两种使用docker的场景,一个是自己开发的程序如何用docker跑起来,第二是使用现成的容器更快速让我们入门。这两种方式在以后会经常碰到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/426325.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【重温设计模式】命令模式及其Java示例

命令模式的介绍 在我们的编程世界中&#xff0c;设计模式如同一盏指路明灯&#xff0c;它们是前人智慧的结晶&#xff0c;为我们照亮了解决复杂问题的路径。 其中&#xff0c;命令模式是一种行为设计模式&#xff0c;其主要的目标是将操作封装到对象中。这种模式的一个显著特点…

Redis在中国火爆,为何MongoDB更受欢迎国外?

一、概念 Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个使用ANSI C编写的开源、支持网络、基于内存、分布式、可选持久性的键值对存储数据库。Redis是由Salvatore Sanfilippo于2009年启动开发的&#xff0c;首个版本于同年5月发布。 MongoDB MongoDB…

C语言指针的初步认识--学习笔记(2)

1.数组名的理解 我们在使⽤指针访问数组的内容时&#xff0c;有这样的代码&#xff1a; int arr[10]{1,2,3,4,5,6,7,8,9,10}; int* p&arr[0]; 这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;⽽且 是数组…

redis 缓存击穿问题(互斥锁,逻辑过期)

1、缓存击穿问题 缓存击穿问题:一个被高并发访问并且缓存重建业务较复杂的key突然失效了&#xff0c;无数的请求访问会在瞬间给数据库带来巨大的冲击。 场景:假设线程1在查询缓存之后&#xff0c;本来应该去查询数据库&#xff0c;然后把这个数据重新加…

LeetCode第125场双周赛个人题解

目录 100231. 超过阈值的最少操作数 I 原题链接 思路分析 AC代码 100232. 超过阈值的最少操作数 II 原题链接 思路分析 AC代码 100226. 在带权树网络中统计可连接服务器对数目 原题链接 思路分析 AC代码 100210. 最大节点价值之和 原题链接 思路分析 AC代码 10023…

react native封装ScrollView,实现(滑到底部)和(滑到顶部+手指继续向下滑)时拉取新数据

里面的tw是在react native中使用tailwind的第三方库 只求读者把样式看个大概&#xff0c;主要还是功能的实现 ScrollView的官方文档如下 https://reactnative.cn/docs/scrollview import tw from twrnc import { View, Text, ScrollView, RefreshControl } from react-native …

docker的简介--安装--操作命令

1.docker的简介 1.1docker是什么 用一句话来说docker就是一个新一代虚拟化技术 Docker是一种开源的平台&#xff0c;用于开发、交付和运行应用程序。它允许开发人员将应用程序和它们的依赖打包在一个容器中&#xff0c;然后部署到任何支持Docker的环境中。Docker的主要特点包括…

Javaweb之SpringBootWeb案例之自动配置的@Conditional源码的详细解析

3.2.3.2 Conditional 我们在跟踪SpringBoot自动配置的源码的时候&#xff0c;在自动配置类声明bean的时候&#xff0c;除了在方法上加了一个Bean注解以外&#xff0c;还会经常用到一个注解&#xff0c;就是以Conditional开头的这一类的注解。以Conditional开头的这些注解都是条…

Vue中如何实现条件渲染?

在Vue中实现条件渲染非常简单且灵活&#xff0c;主要通过Vue的指令来实现。在Vue中&#xff0c;我们可以使用v-if和v-else指令来根据条件来渲染不同的内容。下面就让我们通过一个简单的示例来演示如何在Vue中实现条件渲染&#xff1a; <!DOCTYPE html> <html lang&qu…

pytest-allure报告生成

pytest生成allure报告步骤&#xff1a; 下载allure&#xff0c;配置allure报告的环境变量&#xff1a;把allure-2.13.7\bin 配置到环境变量path路径 验证&#xff1a;在dos窗口和pycharm窗口分别验证&#xff1a;allure –version 2. 生成临时的json报告 在pytest.ini配置文…

3、JavaWeb-Ajax/Axios-前端工程化-Element

P34 Ajax介绍 Ajax:Asynchroous JavaScript And XML&#xff0c;异步的JS和XML JS网页动作&#xff0c;XML一种标记语言&#xff0c;存储数据&#xff0c; 作用&#xff1a; 数据交换&#xff1a;通过Ajax给服务器发送请求&#xff0c; 并获取服务器响应的数据 异步交互&am…

代码随想录day11(1)字符串:反转字符串中的单词 (leetcode151)

题目要求&#xff1a;给定一个字符串&#xff0c;将其中单词顺序反转&#xff0c;且每个单词之间有且仅有一个空格。 思路&#xff1a;因为本题没有限制空间复杂度&#xff0c;所以首先想到的是用split直接分割单词&#xff0c;然后将单词倒叙相加。 但如果想让空间复杂度为O…

ChatGPT 4.0使用之论文阅读

文章目录 阅读环境准备打开AskYourPDF进入主站 粗读论文直接通过右侧边框进行提问选中文章内容翻译或概括插图的理解 总结 拥有了GPT4.0之后&#xff0c;最重要的就是学会如何充分发挥它的强大功能&#xff0c;不然一个月20美元的费用花费的可太心疼了&#xff08;家境贫寒&…

抖音视频评论挖掘工具|视频批量采集软件

抖音视频评论挖掘工具——让你轻松获取大量评论数据 抖音视频评论挖掘工具是一款基于C#开发的高效、便捷的工具&#xff0c;旨在为用户提供全面的数据采集和分析服务。无论你是想了解用户对某个话题或产品的看法&#xff0c;还是想分析评论中的热点和趋势&#xff0c;这款工具都…

从0开始学习NEON(1)

1、前言 在上个博客中对NEON有了基础的了解&#xff0c;本文将针对一个图像下采样的例子对NEON进行学习。 学习链接:CPU优化技术 - NEON 开发进阶 上文链接:https://blog.csdn.net/weixin_42108183/article/details/136412104 2、第一个例子 现在有一张图片&#xff0c;需…

自建Web视频会议,视频互动,SFU/MCU融合架构选型方案分析

网络越来越好&#xff0c;大家已经越来越多接受在家在线办公&#xff0c;在线工作越来越离不开视频会议&#xff0c;视频互动&#xff0c;当然云平台很多&#xff0c;但也用不同的需求&#xff0c;很多需要自建平台与自已的业务系统集成对接。因为大家业务系统多是b/s架构。一般…

Flink StreamGraph生成过程

文章目录 概要SteramGraph 核心对象SteramGraph 生成过程 概要 在 Flink 中&#xff0c;StreamGraph 是数据流的逻辑表示&#xff0c;它描述了如何在 Flink 作业中执行数据流转换。StreamGraph 是 Flink 运行时生成执行计划的基础。 使用DataStream API开发的应用程序&#x…

远程调用--Http Interface

远程调用--Http Interface 前言1、导入依赖2、定义接口3 创建代理&测试4、创建成配置变量 前言 这个功能是spring boot6提供的新功能&#xff0c;spring允许我们通过自定义接口的方式&#xff0c;给任意位置发送http请求&#xff0c;实现远程调用&#xff0c;可以用来简化…

Android 开发环境搭建的步骤

本文将为您详细讲解 Android 开发环境搭建的步骤。搭建 Android 开发环境需要准备一些软件和工具&#xff0c;以下是一些基础步骤&#xff1a; 1. 安装 Java Development Kit (JDK) 首先&#xff0c;您需要安装 Java Development Kit (JDK)。JDK 是 Android 开发的基础&#xf…

跨平台指南:在 Windows 和 Linux 上安装 OpenSSL 的完整流程

Windows安装 一&#xff1a;找到安装包&#xff0c;双击即可 https://gitee.com/wake-up-again/installation-package.git 二&#xff1a;按照提示&#xff0c;一步一步来&#xff0c;就可以啦 三&#xff1a;此界面意思是&#xff0c;是否想向创作者捐款&#xff0c;自己视情…