1. 基础环境:

1.1 安装JDK

本次使用 jdk-11.0.26_linux-x64_bin.tar.gz

解压缩

tar -zxvf jdk-11.0.26_linux-x64_bin.tar.gz -C /usr/local/java/

 配置环境变量:

vi /etc/profileJAVA_HOME=/usr/local/java/jdk-11.0.26
CLASSPATH=.:${JAVA_HOME}/lib:$CLASSPATH
PATH=$PATH:${JAVA_HOME}/bin
export JAVA_HOME CLASS_PATH PATH

让环境变量生效:

source /etc/profile 

如果没生效就重启服务器

1.2 ssh免密码登录

集群内节点之间免密登录

2. 搭建Flink分布式集群

1. 下载

版本:flink-2.0.0-bin-scala_2.12.tgz
地址: https://www.apache.org/dyn/closer.lua/flink/flink-2.0.0/flink-2.0.0-bin-scala_2.12.tgz

2. 安装

通过虚拟机设置共享文件夹将需要的安装包复制到linux虚拟机中 localhost1。虚拟机的共享盘在 /mnt/hgfs/。 将共享盘安装包复制到 存在目标路径/opt/software/

解压缩

cd /opt/software/
tar -zxvf flink-2.0.0-bin-scala_2.12.tgz -C /usr/local/applications/

3,修改FLINK配置

修改 /conf/config.yaml 文件

at localhost1

jobmanager:bind-host: 0.0.0.0rpc:address: localhost1port: 6123taskmanager:bind-host: 0.0.0.0host: localhost1

at localhost2

jobmanager:bind-host: 0.0.0.0rpc:address: localhost1port: 6123taskmanager:bind-host: 0.0.0.0host: localhost2

at localhost3

jobmanager:bind-host: 0.0.0.0rpc:address: localhost1port: 6123taskmanager:bind-host: 0.0.0.0host: localhost3

修改 /conf/masters文件

localhost1:8081

修改 /conf/workers文件

localhost1
localhost2
localhost3

修改 /conf/zoo.cfg 文件 (可以不改)

server.1=localhost1:2888:3888
server.2=localhost2:2888:3888
server.3=localhost3:2888:3888

4. 将Spark软件分发到集群

先关闭防火墙

systemctl stop firewalldsystemctl disable firewalld

将Flink分发到localhost2 和 localhost3

scp -r flink-2.0.0 root@localhost2:/usr/local/applications/flink-2.0.0
scp -r flink-2.0.0 root@localhost3:/usr/local/applications/flink-2.0.0

5, 启动集群

[root@localhost1 flink-2.0.0]# bin/start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host localhost1.
Starting taskexecutor daemon on host localhost1.
Starting taskexecutor daemon on host localhost2.
Starting taskexecutor daemon on host localhost3.

6, 查看WEB页面

http://localhost1:8081/#/overview

3, Flink 开发

3.1 单词统计案例

Socket 模拟实时发送单词,使用 Flink 实时接收数据,并且对 数据进行聚合统计,并且把计算结果打印出来。

 创建一个Java项目 导入Flink依赖

     <properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><flink.version>2.0.0</flink.version></properties><dependencies><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java</artifactId><version>${flink.version}</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-core</artifactId><version>${flink.version}</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-clients</artifactId><version>${flink.version}</version></dependency></dependencies>

创建WordCount 类

package com.neilparker;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;
import org.apache.flink.util.Collector;public class WordCount {public static void main(String[] args) throws Exception {StreamExecutionEnvironment executionEnvironment =  StreamExecutionEnvironment.getExecutionEnvironment();DataStreamSource<String> source = executionEnvironment.socketTextStream("localhost1",7777,"\n");SingleOutputStreamOperator<Tuple2<String, Long>> dataStream = source.flatMap(new FlatMapFunction<String, Tuple2<String,Long>>(){@Overridepublic void flatMap (String string, Collector<Tuple2<String, Long>> collector) {String[] splits = string.split("\\s");for (String word : splits) {collector.collect(Tuple2.of(word, 1L));}}}).keyBy(value -> value.f0).sum(1);dataStream.print();executionEnvironment.execute("wordcount batch process");}}

启动nc 命令 模拟一个 Socket Server ,

然后运行java 代码,

然后再nc 命令行发送数据

然后就可以看到nc 命令行如下:

[root@localhost1 ~]# nc -lp 7777
hello neil hello jack
hello mike hello walker
hello sun

Java代码控制台看到单词统计结果:

5> (hello,1)
15> (neil,1)
14> (jack,1)
5> (hello,2)
4> (mike,1)
9> (walker,1)
5> (hello,3)
5> (hello,4)
15> (sun,1)
5> (hello,5)

3.2 提交代码到Flink集群中

先在pom文件中添加 打包插件
 <build><plugins><!-- 打jar插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters></configuration></execution></executions></plugin></plugins></build>

然后maven package

先启动nc命令

[root@localhost1 flink-2.0.0]# nc -lp 7777

然后到Flink UI 页面提交jar包

然后就看到job正常运行起来了

然后区nc 命令行 输入一些单词

到task manager 页面就能看到统计结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89089.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89089.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89089.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm校园综合服务系统微信小程序源码数据库文档

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;校园综合服务被用户普遍使用&#xff0c;为方便用户能够可…

桌面小屏幕实战课程:DesktopScreen 17 HTTPS

飞书文档http://https://x509p6c8to.feishu.cn/docx/doxcn8qjiNXmw2r3vBEdc7XCBCh 源码参考&#xff1a; /home/kemp/work/esp/esp-idf/examples/protocols/https_request 源码下载方式参考&#xff1a; 源码下载方式 获取网站ca证书 openssl s_client -showcerts -connec…

uniapp上传gitee

右键点击项目&#xff0c;选择git提交&#xff0c;会弹出这样的弹窗 在Message输入框里面输入更新的内容&#xff0c;选择更新过的文件&#xff0c;然后点击commit 然后点击push 后面会让你填写gitee的用户名和密码 用户名就是邮箱 密码就是登录gitee的密码

重写(Override)与重载(Overload)深度解析

在Java面向对象编程中&#xff0c;多态性是一个核心概念&#xff0c;它允许我们以统一的方式处理不同类型的对象。而实现多态性的两种重要机制便是方法的“重写”&#xff08;Override&#xff09;与“重载”&#xff08;Overload&#xff09;。透彻理解这两者之间的区别与联系…

Go 语言中操作 SQLite

sqlite以其无需安装和配置&#xff1a;直接使用数据库文件&#xff0c;无需启动独立的数据库服务进程。 单文件存储&#xff1a;整个数据库&#xff08;包括表、索引、数据等&#xff09;存储在单个跨平台文件中&#xff0c;便于迁移和备份。 在应对的小型应用软件中.有着不可…

【硬核数学】2.3 AI的“想象力”:概率深度学习与生成模型《从零构建机器学习、深度学习到LLM的数学认知》

欢迎来到本系列的第八篇文章。在前七章中&#xff0c;我们已经构建了一个强大的深度学习工具箱&#xff1a;我们用张量来处理高维数据&#xff0c;用反向传播来高效地计算梯度&#xff0c;用梯度下降来优化模型参数。我们训练出的模型在分类、回归等任务上表现出色。 但它们有…

华为云Flexus+DeepSeek征文|Dify平台开发搭建口腔牙科24小时在线问诊系统(AI知识库系统)

引言&#xff1a;为什么需要口腔牙科24小时在线问诊系统&#xff1f; 在口腔医疗领域&#xff0c;“时间”是患者最敏感的需求之一——深夜牙齿突发疼痛、周末想提前了解治疗方案、异地患者无法及时到院……传统“工作时间在线”的咨询模式已无法满足用户需求。同时&#xff0…

嵌入式硬件中电容的基本原理与详解

大家好我们今天重讨论点知识点如下: 1.电容在电路中的作用 2.用生活中水缸的例子来比喻电容 3.电容存储能力原理 4.电容封装的种类介绍电容种类图片辨识 5.X 电容的作用介绍 6.Y 电容的作用介绍7.钽电容的优点及特性 7.钽电容的缺点及特性 8. 铝电解电容的优点及特性…

中央空调控制系统深度解析:从原理到智能AIOT运维

——附水冷式系统全电路图解与技术参数 一、中央空调系统架构与技术演进 1. 两大主流系统对比 技术趋势&#xff1a;2023年全球冷水机组市场占比达68%&#xff08;BSRIA数据&#xff09;&#xff0c;其核心优势在于&#xff1a; - 分区控温精度&#xff1a;0.5℃&#…

document.write 和 innerHTML、innerText 的区别

document.write 与 innerHTML、innerText 的区别 document.write 直接写入 HTML 文档流&#xff0c;若在页面加载完成后调用会覆盖整个文档。常用于动态生成内容&#xff0c;但会破坏现有 DOM 结构&#xff0c;不推荐在现代开发中使用。 document.write("<p>直接写…

日志分析与实时监控:Elasticsearch在DevOps中的核心作用

引言 在现代DevOps实践中&#xff0c;日志分析与实时监控是保障系统稳定性与性能的关键。Elasticsearch作为分布式搜索与分析引擎&#xff0c;凭借其高效的索引与查询能力&#xff0c;成为构建日志管理与监控系统的核心组件。本文将深入探讨Elasticsearch在DevOps中的应用&…

Unity Catalog 三大升级:Data+AI 时代的统一治理再进化

在刚刚落幕的 2025 Databricks Data AI Summit 上&#xff0c;Databricks 重磅发布了多项 Lakehouse 相关功能更新。其中&#xff0c;面向数据湖治理场景的统一数据访问与管理方案 —— Unity Catalog&#xff0c;迎来了三大关键升级&#xff1a;全面支持 Apache Iceberg、面向…

电容屏触摸不灵敏及跳点问题分析

在电容屏的使用过程中&#xff0c;触摸不灵敏和触点不精准是极为常见且让人困扰的问题。这些问题不仅影响用户的操作体验&#xff0c;在一些对触摸精度要求较高的场景&#xff0c;如工业控制、绘图设计等领域&#xff0c;还可能导致严重的后果。下面我们就来深入剖析一下这两个…

小程序学习笔记:导航、刷新、加载、生命周期

在小程序开发的领域中&#xff0c;掌握视图与逻辑相关的技能是打造功能完备、用户体验良好应用的关键。今天&#xff0c;咱们就来深入梳理一下小程序视图与逻辑的学习要点&#xff0c;并结合代码示例&#xff0c;让大家有更直观的理解。 一、页面之间的导航跳转 在小程序里实…

生成树基础实验

以太网交换网络中为了进行链路备份&#xff0c;提高网络可靠性&#xff0c;通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路&#xff0c;引发广播风暴以及 MAC地址表不稳定等故障现象&#xff0c;从而导致用户通信质量较差&#xff0c;甚至通信中断。 为解决交换…

flex布局实例:把色子放进盒子里

目录 一、flex布局实例&#xff1a;把色子放进盒子里 1、基础样式 二、justify-content 属性 三、flex-direction 属性 四、align-items 属性 五、flex-wrap 属性 二、flex布局应用到常见场景 非常详细的讲解flex布局&#xff0c;看一看&#xff0c;练一练&#xff01; …

Netty编解码器

目录 1、概念 2、Netty提供的编解码器类型 2.1 解码器 2.1.1 ByteToMessageDecoder 2.1.2 ReplayingDecoder 2.1.3 MessageToMessageDecoder 2.2 编码器 2.2.1 MessageToByteEncoder 2.2.2 MessageToMessageEncoder 2.3 编解码器 2.3.1 ByteToMessageCodec 2.3.2 M…

企业内部安全组网技术解析:安全通道选型、零信任架构与数据合规加密防护

一、引言&#xff1a;企业内部安全组网的重要性 随着企业数字化转型的深入以及远程办公需求的增加&#xff0c;企业内部异地组网逐渐成为企业信息技术部门关注的重要话题。如何在合规合法的前提下&#xff0c;保障企业内部网络连接的安全性、稳定性&#xff0c;并有效保护企业…

Windows 4625日志类别解析:未成功的账户登录事件

Windows 4625日志类别解析&#xff1a;未成功的账户登录事件 什么是Windows 4625日志&#xff1f; Windows 4625日志属于安全日志&#xff08;Security Log&#xff09; 的一部分&#xff0c;记录系统中未成功的账户登录尝试&#xff08;Failed Logon&#xff09;。它是追踪非…

3D看房实现房屋的切换

作为3D看房的补充&#xff0c;在这里&#xff0c;我们讲一下如何实现房屋的切换&#xff0c;我这里提供两种思路&#xff0c; 切换贴图&#xff0c;切换场景&#xff0c; 接下我们按照较复杂的场景切换来讲&#xff0c;切换贴图也就水到渠成&#xff1a; 初始化场景&#xf…