Flink 知识点整理及八股文问题<第二、三部分 Flink快速上手和部署>

news2024/12/29 8:46:31

本篇为Flink的第二、三部分,Flink快速上手和Flink部署,全篇参考自 尚硅谷2022版1.13系列

        整个系列的目录如下:

💚<一>Flink简介 💚<二>Flink快速上手 💚<三>Flink 部署 💚<四>Flink 运行时架构 💚<五>DataStream API 💚<六>Flink 中的时间和窗口 💚<七>处理函数 💚<八>多流转换 💚<九>状态编程 💚<十>容错机制 💚<十一>Table API 和 SQL 💚<十二>Flink CEP

        本文章会着重记录比较重要知识点和架构,略过不重要信息和一些代码等,需要全文可以到b站观看,顺便投俩币。


<二、三> Flink快速上手和部署

知识点十二. 快速上手Flink项目的步骤

(1)在IDEA用Maven创建new Project

(2)添加项目依赖,主要是Flink依赖(flink-java、flink-streaming-java、flink-clients)和日志管理依赖(slf4j和log4j)

(3)配置日志管理(添加log4j.properties文件)

知识点十三. 用Flink做WordCount程序的步骤(批处理)(DataSet方法)

(1)创建执行环境

(2)从文件读取数据 按行读取(存储的元素就是每行的文本)(readTextFile)

(3)转换数据格式,调用 flatmap 方法可以对一行文字 进行分词转换,转换成(word,count)形式的二元组

(4)按照 word 进行分组,调用了 groupBy 方法

(5)分组内聚合统计,调用 sum 方法进行聚合

public class BatchWordCount {
 public static void main(String[] args) throws Exception {
 // 1. 创建执行环境
 ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
 // 2. 从文件读取数据 按行读取(存储的元素就是每行的文本)
 DataSource<String> lineDS = env.readTextFile("input/words.txt");
 // 3. 转换数据格式
 FlatMapOperator<String, Tuple2<String, Long>> wordAndOne = lineDS.flatMap((String line, Collector<Tuple2<String, Long>> out) -> {
 String[] words = line.split(" ");
 for (String word : words) {
 out.collect(Tuple2.of(word, 1L));
 }
 })
 .returns(Types.TUPLE(Types.STRING, Types.LONG)); //当 Lambda 表达式
使用 Java 泛型的时候, 由于泛型擦除的存在, 需要显示的声明类型信息
 // 4. 按照 word 进行分组
 UnsortedGrouping<Tuple2<String, Long>> wordAndOneUG = 
wordAndOne.groupBy(0);
 // 5. 分组内聚合统计
 AggregateOperator<Tuple2<String, Long>> sum = wordAndOneUG.sum(1);
 // 6. 打印结果
 sum.print();
 }
}

知识点十四. 用Flink做WordCount程序的步骤(流处理读取文件)(DataStream)

(1)创建流式执行环境StreamExecutionEnvironment

(2)读取文件,readTextFile

(3)转换数据格式,用flatMap转换成二元组

(4)调用keyBy进行分组,传入一个匿名函数作为键选择器 (KeySelector),指定当前分组的 key

(5)调用sum求和

(6)代码末尾需要调用 env 的 execute 方法,开始执行任务。

public class BoundedStreamWordCount {
 public static void main(String[] args) throws Exception {
 // 1. 创建流式执行环境
 StreamExecutionEnvironment env = 
StreamExecutionEnvironment.getExecutionEnvironment();
 // 2. 读取文件
 DataStreamSource<String> lineDSS = env.readTextFile("input/words.txt");
 // 3. 转换数据格式
 SingleOutputStreamOperator<Tuple2<String, Long>> wordAndOne = lineDSS
 .flatMap((String line, Collector<String> words) -> {
 Arrays.stream(line.split(" ")).forEach(words::collect);
 })
 .returns(Types.STRING)
 .map(word -> Tuple2.of(word, 1L))
 .returns(Types.TUPLE(Types.STRING, Types.LONG));
 // 4. 分组
 KeyedStream<Tuple2<String, Long>, String> wordAndOneKS = wordAndOne
 .keyBy(t -> t.f0);
 // 5. 求和
 SingleOutputStreamOperator<Tuple2<String, Long>> result = wordAndOneKS
 .sum(1);
 // 6. 打印
 result.print();
 // 7. 执行
 env.execute();
 }
}

知识点十五. 用Flink做WordCount程序的步骤(流处理读取文件流)(实时监听)

(1)创建流式执行环境StreamExecutionEnvironment

(2)读取文件流,设置主机名和端口号或者从配置文件中读取

(3)转换数据格式,用flatMap转换成二元组

(4)调用keyBy进行分组

(5)调用sum求和

(6)代码末尾需要调用 env 的 execute 方法,开始执行任务。

public class StreamWordCount {
    public static void main(String[] args) throws Exception {
        // 1. 创建流式执行环境
        StreamExecutionEnvironment env =
                StreamExecutionEnvironment.getExecutionEnvironment();
        // 2. 读取文本流
        DataStreamSource<String> lineDSS = env.socketTextStream("hadoop102",
                7777);
        // 3. 转换数据格式
        SingleOutputStreamOperator<Tuple2<String, Long>> wordAndOne = lineDSS
                .flatMap((String line, Collector<String> words) -> {
                    Arrays.stream(line.split(" ")).forEach(words::collect);
                })
                .returns(Types.STRING)
                .map(word -> Tuple2.of(word, 1L))
                .returns(Types.TUPLE(Types.STRING, Types.LONG));
        // 4. 分组
        KeyedStream<Tuple2<String, Long>, String> wordAndOneKS = wordAndOne
                .keyBy(t -> t.f0);
        // 5. 求和
        SingleOutputStreamOperator<Tuple2<String, Long>> result = wordAndOneKS
                .sum(1);
        // 6. 打印
        result.print();
        // 7. 执行
        env.execute();
    }
}

 

知识点十六. Flink集群安装步骤

(1)前置安装 linux系统,Java8,hadoop集群,配置环境变量,免密登录,关闭防火墙

(2)对安装包解压并安装,执行启动命令,通过jps可查看进程

(3)在其他节点解压并安装,修改集群配置,指定JobManager 节点,修改workers 文件,指定TaskManager 节点

知识点十七. Flink启动类型

(1)本地启动

        最简单的启动方式,其实是不搭建集群,直接本地启动。本地部署非常简单,直接解压安 装包就可以使用,不用进行任何配置;一般用来做一些简单的测试。

(2)集群启动

        如果想要扩 展成集群,其实启动命令是不变的,主要是需要指定节点之间的主从关系。指定JobManager 节点,修改workers 文件,指定TaskManager 节点即可。

知识点十八. Flink提交作业方式

(1)在 Web UI 上提交作业

(2)命令行提交作业

知识点十九. Flink部署模式

(1)会话模式

        启动一个集群,保持一个会话,在这个会话中 通过客户端提交作业,集群启动时所有资源就都已经确定,所以所有提交的 作业会竞争集群中的资源。缺点也是显而易见的:因为资源是共享的,所以资源不够了,提交新的 作业就会失败。另外,同一个 TaskManager 上可能运行了很多作业,如果其中一个发生故障导 致 TaskManager 宕机,那么所有作业都会受到影响。会话模式比较适合于单个规模小、执行时间短的大量作业。

(2)单作业模式

        单作业模式是严格的一对一,集群只为这个作业而生。作业被提交给 JobManager,进而分发给 TaskManager 执行。每个作业都有它自己的 JobManager 管理,占用独享的资源,即使发生故障,它的 TaskManager 宕机也不会影响其他作业。这些特性使得单作业模式在生产环境运行更加稳定,所以是实际应用的首选模式。注意的是,单作业模式一般需要借助一些资源管 理框架来启动集群,比如 YARN、Kubernetes。

(3)应用模式

        前面提到的两种模式下,应用代码都是在客户端上执行,然后由客户端提交给 JobManager 的。但是这种方式客户端需要占用大量网络带宽,去下载依赖和把二进制数据发送给 JobManager;加上很多情况下我们提交作业用的是同一个客户端,就会加重客户端所在节点的 资源消耗。所以解决办法就是,我们不要客户端了,直接把应用提交到 JobManger 上运行。而这也就 代表着,我们需要为每一个提交的应用单独启动一个 JobManager,也就是创建一个集群。这 个 JobManager 只为执行这一个应用而存在,执行结束之后 JobManager 也就关闭了,这就是所 谓的应用模式。应用模式与单作业模式,都是提交作业之后才创建集群;单作业模式是通过客户端来提交 的,客户端解析出的每一个作业对应一个集群;而应用模式下,是直接由 JobManager 执行应 用程序的,并且即使应用包含了多个作业,也只创建一个集群。

        

知识点二十. Flink部署模式(结合资源管理平台)

(1)独立模式(Standalone)

        独立模式(Standalone)是部署 Flink 最基本也是最简单的方式:所需要的所有 Flink 组件, 都只是操作系统上运行的一个 JVM 进程。 独立模式是独立运行的,不依赖任何外部的资源管理平台;当然独立也是有代价的:如果 资源不足,或者出现故障,没有自动扩展或重分配资源的保证,必须手动处理。所以独立模式 一般只用在开发测试或作业非常少的场景下。

(2)YARN 模式

        Flink 是大数据计算框架,不是资源 调度框架,这并不是它的强项;让专业的框架做专业的事,使用国内应用最为广泛的资源管理平台YARN来做资源管理的任务。客户端把 Flink 应用提交给 Yarn 的 ResourceManager, Yarn 的 ResourceManager 会向 Yarn 的 NodeManager 申请容器。在这些容器上,Flink 会部署 JobManager 和 TaskManager 的实例,从而启动集群。Flink 会根据运行在 JobManger 上的作业 所需要的 Slot 数量动态分配 TaskManager 资源。        

(3)K8S 模式

        容器化部署是如今业界流行的一项技术,基于 Docker 镜像运行能够让用户更加方便地对 应用进行管理和运维。容器管理工具中最为流行的就是 Kubernetes(k8s),而 Flink 也在最近 的版本中支持了 k8s 部署模式,基本原理与 YARN 是类似的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Revit标注墙偏移如何简便标注呢?万能标注?

一、Revit标注墙偏移如何简便标注呢? 1、如果墙定位线是核心层中心线&#xff0c;现在要标注墙偏移如何简便标注呢? 遇到上述问题大家可能想到的办法是用TAB键去选择墙的内外边缘。其实有更简便的方法&#xff0c;如图1所示。 红色框选部分是选项栏&#xff0c;当使用对齐尺寸…

JDBC高级——主键回显、批量插入、事务操作

自增主键回显 一般在插入数据时&#xff0c;设置主键为自增&#xff0c;然后我们就不用去维护这个主键值&#xff0c;其他的级联表可能以这个主键作为外键或参考&#xff0c;所以我们要拿到插入数据的主键值&#xff0c;这就是主键回显。 如何获取数据库自增的主键值&#xff…

自己写一个简单的工作流引擎V2

上一篇文中我们实现了顺序的工作流&#xff0c;对于多分支的工作流如下&#xff0c;该如何实现呢&#xff1f; 小明提交了一个申请单&#xff0c;然后经过经理审批&#xff0c;如果通过&#xff0c;发邮件通知&#xff0c;不通过&#xff0c;则打回重新填写申请单&#xff0c;…

计算机体系结构 | 函数栈帧 | 栈帧的创建与销毁讲解 | 篡改函数的返回地址

文章目录前言预备知识demo及其汇编代码汇编代码讲解返回值篡改&#xff08;111 ???&#xff09;前言 复习时遇到一些问题&#xff0c;可能是关于左值右值的概念理解不够透彻&#xff0c;于是转头去研究左值右值的问题&#xff0c;但是想要参透左右值&#xff0c;我又觉得需…

通信网络概论

一、通信网络概述 通信网络是一些设备、设施组成的集合&#xff0c;可以提供特定的服务&#xff0c;即可以实现位于任意地点的不同用户间信息的传递。 通信网络的基本问题&#xff1a;如何以尽可能低的成本有效地解决处于任何地理位置的任意两个用户之间即时信息传递问题&…

基于java springmvc+mybatis学生考试系统设计和实现

基于java springmvcmybatis学生考试系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

公司选择之外包

前言 简单介绍下人们常说的外包是什么&#xff0c;应届生未出社会没有经验&#xff0c;避免求职过程中的一些坑。 文章目录前言一、什么是外包&#xff1f;1、简介1、项目外包2、人力外包二、外包公司有哪些&#xff1f;三、优缺点1、优点2、缺点四、选择一、什么是外包&#x…

FreeRTOS的Systick和HAL时基

目录 分析 举个例子&#xff1a; 正确的做法&#xff1a; 总结 我们首先需要知道&#xff0c;使用了FreeRTOS会强制使用systick作为自己的心跳&#xff0c;这个os_tick的优先级是最低的&#xff0c;它主要的作用就是OS任务调度&#xff0c;时间片查询等工作。 在图中&#x…

【未解决乌龟问题】测试ROS是否安装成功

前提说明&#xff1a;虚拟机、ubuntu-18.04.1 1、操作流程&#xff1a; 1&#xff09;参考教程链接1&#xff0c;第一步输入roscore指令查看ROS的版本、节点、端号等内容时出现“Command roscore not found, but can be installed with: sudo apt install python-roslaunch”…

python-docx写入word

目录 字体大小参照 安装python-docx 引入依赖包 使用 标题设置字体、字号、居中、加粗、颜色 正文设置字体、字号、居中、加粗、颜色 添加图片 官方文档 字体大小参照 字号‘八号’对应磅值5 字号‘七号’对应磅值5.5 字号‘小六’对应磅值6.5 字号‘六号’对应磅值7.…

Java8-19新特性一览 ,认识全新的前沿技术

文章目录Java8-19新特性一览 ,认识全新的前沿技术前言你的收获Java发展趋势准备工作新特性1、接口private1&#xff09;、说明2&#xff09;、案例3&#xff09;、注意2、类型推断1&#xff09;、说明2&#xff09;、案例3&#xff09;、注意3、空指针优化1&#xff09;、说明2…

【5】SCI易中期刊推荐——计算机科学(中科院2区)

🚀🚀🚀NEW!!!SCI易中期刊推荐栏目来啦 ~ 📚🍀 SCI即《科学引文索引》(Science Citation Index, SCI),是1961年由美国科学信息研究所(Institute for Scientific Information, ISI)创办的文献检索工具,创始人是美国著名情报专家尤金加菲尔德(Eugene Garfield…

阿里云k8s一键部署有状态StatefulSet nacos2.0.3

阿里云k8s一键部署有状态StatefulSet nacos2.0.3 项目目录 centos 配置连接集群 kubectl 客户端执行k8s脚本 kubectl 执行结果&#xff0c;一键生成StatefulSetpodServiceconfig Deployment pod重启ip和名称随机分配&#xff0c;适合java服务类部署 StatefulSet pod重启ip和名…

再学C语言31:函数——递归

C允许一个函数调用其自身&#xff0c;这种调用过程被称为递归&#xff08;recursion&#xff09; 使用递归的风险&#xff1a;如果程序中没有设定可以终止递归的条件检测&#xff0c;会无限制地执行递归调用 所以涉及递归的程序需要谨慎设计 递归一般可以替代循环语句使用&a…

Mozi僵尸网络(P2P僵尸网络Mozi)

Mozi僵尸网络概述 Mozi僵尸网络是于2019年底首次出现在针对路由器和DVR 的攻击场景上的一种P2P僵尸网络。主要攻击物联网&#xff08;IoT&#xff09;设备&#xff0c;包括网件、D-Link和华为等路由设备。它本质上是Mirai的变种&#xff0c;但也包含Gafgyt和IoT Reaper的部分代…

springboot mybatis mysql快速开始(详细入门操作)(二)

七、创建service类。要注意相应的注解service,autowired不能丢&#xff0c;不然系统识别不到这些组件。里面写对应的mapper方法。Service public class SplineService { private static final Logger log LoggerFactory.getLogger(SplineService.class); Autowired private Sp…

国产音频ADC芯片的应用以及选型

想要让模拟信号和数字信号顺利“交往”&#xff0c;就需要一座像“鹊桥”一样的中介&#xff0c;将两种不同的语言转变成统一的语言&#xff0c;消除无语言障碍。这座鹊桥就是转换器芯片&#xff0c;也就是ADC芯片。ADC芯片的全称是Analog-to-Digital Converter, 即模拟数字转换…

设计模式_创建型模式 -《单例模式》

设计模式_创建型模式 -《单例模式》 笔记整理自 黑马程序员Java设计模式详解&#xff0c; 23种Java设计模式&#xff08;图解框架源码分析实战&#xff09; 创建型模式的主要关注点是“怎样创建对象&#xff1f;”&#xff0c;它的主要特点是“将对象的创建与使用分离”。 这样…

广州蓝景分享—Web前端开发培训机构如何选择

首先Web前端培训机构如何选择&#xff1f;相信很多人都不是很清楚&#xff0c;就是听别人推荐哪家好哪家不好&#xff0c;没有合理性的去实地了解&#xff0c;看看是否符合自己。所以&#xff0c;最好的方法就是自己在网上可以找一些判断web前端培训机构的条件&#xff0c;然后…

nacos原理和实战问题解决方案

nacos原理和集群搭建实战&#xff0c;在开始之前、我们先要知道nacos的官网并熟悉其基本特性 官网介绍 一、原理&#xff1a; 1、多种注册中心对比 2、nacos作为注册中心的核心功能 2.1、服务注册&#xff1a; Nacos Client会通过发送REST请求的方式向Nacos Server注册自己…