Flink系列之大数据分布式计算引擎设计实现剖析

news2024/11/24 8:32:54

声明:
        文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。


By luoyepiaoxue2014

B站:https://space.bilibili.com/1523287361 点击打开链接
微博地址: https://weibo.com/luoyepiaoxue2014 点击打开链接



title: Flink系列


大数据分布式计算引擎设计实现剖析

0.1 前言

其实整个互联网行业的所有的产品的本质需求: 存 、取、分析

存:HDFS + HBase + MySQL + Redis + MongoDB+ es + 时序数据库 + 图数据库 + 对象数据库 + 数据湖
取: 单点取(select * from table where id = 1),批量取(类似于 HBase 的范围查询),全量取(文件上传下载)
分析: 计算引擎(MR,spark,Flink),分析型数据库(hive, OLAP 体系)

剩下的都是衍生需求:完整整个体系,保证整个架构平稳高效运行的

0.2 各大分布式引擎剖析

分布式计算引擎:海量大文件的计算,WordCount作为一个入门需求举例理解这些 分布式执行引擎的设计和执行原理:

  • MapReduce 离线批处理 非常大的进步 鼻祖

  • Storm 流式实时处理 开源界第一个最受欢迎的流式计算引擎 不用管了

  • Spark 离线批处理 + 交互式查询 + 伪流式处理/微批处理 + 机器学习 ===> 批处理之王, 几乎所有的离线计算需求都是使用 Spark 去做

  • Flink 实时流式计算引擎 出生就是为了解决流式计算

  • Hive 框架 工具 / 壳 底层的引擎,可以使用 sprak mr tez 等

计算引擎:
1、Hive + SparkCore / MR
2、SparkSQL
3、MR + Storm + Spark + Flink 等

数据库:
1、HBase
2、OLAP体系: Clickhouse/Doris/Kylin/Kudu/Druid/Impala/Presto

HBase(低延时的单点随机读写) + Clickhouse(全量分析) 设计分析的对比

也是为了分析!

Flink 的真正的用途是干什么的?有三点!看官网解释!

0.2.1 MapReduce 执行引擎解析

MapReduce 执行引擎解析:

在这里插入图片描述

最核心的思想: 分而治之 + 分阶段执行

  • 一个任务太大了,太复杂了,分而治之 大事化小 小事化了

  • 必然衍生出来 分布式批处理计算必然要分阶段。 第二个阶段中的 Task 是否能执行完全取决于第一个阶段的 Task 是否全部完成

  • 中间必然需要通过 网络来执行数据混洗:其实就是把标记相同的 value 传输到同一个节点,启动 Task 来执行聚合计算

MaReduce 引擎:

  • Mapper 分。不是用来做计算的,是用来给第二个阶段准备计算数据的:提取待计算的数据,然后打上标签! Mapper 做计算是谓词下推的体现!本身计算做个事儿 reducer 去做,其实这个事儿,没必要非得等到 reducer 去做,mapper 可以先做一做!

  • Reducer 合。真正的计算在哪里?在这里,拿到了一组 key 相同的 value 数据然后执行聚合逻辑

有同学可能会问到:为什么 mapreduce 中的输出的 key 可以重复呢?不要把 这个key-value 当做 hashmap 中的 键值对来理解!

  • Key: 待计算数据的标记
  • value:待计算的数据

经典面试题:现在 有 1000亿 条数据,反正很大(1000T)(反正就一台机器搞不定),我需要统计一下,这些数据中最大的 50 条是谁?

  • 堆排序! 数据量小,确实可用。花的时间会特别长,占用的资源少

  • 1000T 分成 1000 个任务,每个任务执行 1T 数据的计算,可以采用堆(堆中只保存了最大的50条)的方式来搞定,每个堆得到 50 条数据,1000个堆 就是50000 条数据,再维护一个最终的堆就搞定了(因为这 1000 个小任务是并行执行的)

大数据的分布式批处理计算引擎:分布式分阶段并行执行引擎

MapReduce 的组件设计实现图:

在这里插入图片描述

面试题举例:使用 MR 来实现:

1000T数据求TopN 数据存储在HDFS 默认实现
定义 Mapper 逻辑 可选的动作 定义 Reducer 逻辑 默认组件 HDFS

读取一个分段文件  把1000个任务输出堆
维护一个小根堆    从5W条数据中求最大50

框架:半成品,把很多应用程序的共同部分做一个抽象和沉淀!
MapReduce : 分布式计算引用程序的编程框架!

类似于 责任链设计模式! 处理器1 -> 处理器2 -> 处理器3 -> 处理器4

1、数据源: 存储数据的

数据读取组件:InputFormat + RecordReader 提供了一种抽象,不管从读哪里读取数据都可以,有默认实现,有内置实现,当然也可以自定义

- FileInputFormat + LineRecordReader 逐行读取文件,默认实现
- DBInputFormat 读取数据库 MySQL 批量读取 + 单条记录读取

2、Mapper: 定义了每一条数据到底执行什么样的处理(怎么提取数据打标记?用户来写)

3、Shuffle:到底使用哪个规则来决定什么样的数据作为一组传输到同一个节点来执行 reduce 计算

- Paritioner 分区规则: 用户要写
- Sorter 排序器: MR 内部直接默认使用了 归并排序 + 快速排序
- Combiner 局部合并器: 取决你的逻辑要不要,如果能写,最好写一个

4、Reducer: 定义了每一组数据到底执行什么样的处理(拿到key相同的一组数据之后,怎么执行计算呢?用户来写)

5、数据输出组件:OutputFormat + RecordWriter

FileOutputFormat + LineRecordWriter 默认实现

补充:海量数据的常见面试题

Spark、Flink 或者说 Java、Scala 到底谁多一点?归根结底都是工具。你的团队对那个熟悉就可以考虑用哪个,生态的多样性。

0.2.2 Spark 执行引擎解析

Spark 执行引擎解析:

在这里插入图片描述

Spark 相比于 MR的真正优势的地方在哪里:Simple Fast Scalable Unified

  • DAG 引擎
  • 中间计算结果可以进行内存持久化
  • 基于内存计算(不合适,如果要解释合理一些:我们可以把数据都加载(从内存中间件中读取)到内存中,然后来执行计算)
  • 生态多样,算子丰富,API 应用库丰富,支持的资源调度也丰富

真正的计算,都是迭代: 从文件中,读取一条,执行一条数据的计算 MR、Spark 读取 HDFS 的数据,执行计算的方式是一样的,因为底层使用的 读取数据是一样的

Spark 执行引擎组件图:

在这里插入图片描述

总结一下:

  • MapReduce:批计算引擎
  • Storm:流计算引擎
  • Spark:批计算引擎 + 流计算引擎(微批/伪流式)
  • Flink:批计算引擎 + 流计算引擎

​ 目前开源大数据计算引擎有很多选择,流计算如 Storm,Samza,Flink,Kafka Stream 等,批处理如 MapReduce,Spark,Hive,Pig,Flink 等。而同时支持流处理和批处理的计算引擎,只有两种选择:一个是 Apache Spark,一个是 Apache Flink。

而 Flink 和 Spark 的不同点在于

1、Spark的技术理念是基于批计算来模拟流计算。认为批处理是常态,而把流式处理看做是批处理的特例。
2、Flink的技术理念是基于流计算来模拟批计算。认为流处理是常态,而把批处理看做是流式处理的特例。

用批来模拟流有一定的技术局限性,所以从技术的长远发展来看,Flink会更持久。
针对待计算的数据来说的:

有开始,有结束
有开始,没有结束

经典:

1、Spark的技术理念是基于批实现批和流。
2、Flink的技术理念是基于流实现流和批。

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

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

相关文章

MySQL基本语句操作

目录 一. MySQKL基本操作命令(增,删,该,查) 1.1 基本概述 1.2 查看当前服务器种的数据库 1.3 查看数据库结构​编辑 二.SQL语句 三. 创建及删除数据库和表 3.1 创建新的数据库 3.2 创建新的表 ​3.3 删除指…

c++随机数问题研究

1、问题背景 某项目中有个复杂的排序,先是各种规则依次排序,最后如果依然并列的话,那就随机位置,名次并列。测试中发现一个诡异现象,并列时随机排序但随机后2个case打印的顺序每次都一样,随机数没有起到任…

基于PHP+MySQL个人信息管理系统的设计与实现

随着现代工作的日趋繁忙,人们越来越意识到信息管理的重要性与必要性,而具有个性化特色的个人信息管理系统能够高速有效的管理个人信息,从而提升自己的工作效率。该系统的基本功能包括用户登录,个人信息管理,通信名录管理,日程备忘管理,财物管理,随手笔记管理,修改密码等功能。 …

html+css+javascript+jquery+bootstarp响应式旅行社旅游平台网站模板(14页)

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

[附源码]Python计算机毕业设计SSM考试排考系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

乾元通多卡聚合设备 消防行业应用解决方案

近年来,灭火救援工作呈现出突发性强、处置难度大、作战时间长等特点,如何获取灾害现场的第一手资料为救援行动提供决策依据,如何在处置灾害事故的过程中保证多个消防队伍协同配合、指令畅通,对室外无线环境下的视/音频即时通信,提…

深度学习——池化层笔记+代码

1.对于卷积层来说,卷积对位置比降敏感 ①检测垂直边缘 使用K[-1,1] 的卷积核进行卷积操作,实现垂直边缘信息的检测 如果因为抖动曝光啥的同一个物体,1像素可能往右移位了。K的卷积核就得不到相应位置的边缘信息。 ②需要一定程度的平移不变性…

代码随想录训练营第36天|LeetCode 435. 无重叠区间、763.划分字母区间、 56. 合并区间

参考 代码随想录 题目一:LeetCode 435.无重叠区间 怎么判断重叠 按照题目给出的示例,第一个区间的右边界与第二个区间的左边界重合不算重叠。对于区间问题,一般都要对区间进行排序,可以按照左边界或者右边界排序。按照个人习惯…

[附源码]Python计算机毕业设计Django二手书店设计论文

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

8. 抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现

抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现 本系列Netty源码解析文章基于 4.1.56.Final版本 最近在 Review Netty 代码的时候,不小心用我的肉眼抓到了一个隐藏很深很深的内存泄露 Bug。 于是笔者将这个故事....哦不 .....事故&#…

介绍一款特别好用的java反编译工具jd-gui

目录 写在前面 开始 写在前面 之前用过另一款java反编译工具jad 但是这个工具有个问题就是对于一些java8的新特性,比如lambda表达式是解析不出来的,更不用说java9和java17了。关于这款工具的使用方法就不再这里赘述了,如果你感兴趣可以在网…

【JVM】主要组成部分及其作用

大致结构 JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、 Execution engine(执行引擎);两个组件为Runtime data area(运行时数据 区)、Native Interface(本地接口)。 Class loader(类装载):根据给定的全限定名类名(如&…

跳槽有技巧?超强测试开发面试经验等你pick

每一次跳槽,相信大家都有自己的一套方法论,一套准备和选择过程。当然面试也是一个双向选择,不排除有的时候看“缘分”。不管怎么说,这几年来,在面试过大大小小挺多家公司后,也算职场老鸟一枚了,…

论文浅尝 | Hybrid Transformer Fusion for Multimodal KG Completion

笔记整理:陈子强,天津大学硕士,研究方向为自然语言处理论文链接:https://arxiv.org/pdf/2205.02357.pdf动机尽管多模态知识图谱补全较单模态知识图谱补全已经有了很大的改进,但仍然存在两个限制。(1&#x…

Java内存模型与线程(1)

文章目录1. 概述2. 硬件的效率与一致性3. Java内存模型3.1 主内存与工作内存3.2 内存间交互操作并发处理的广泛应用是使得 Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力最有力的武器。Amdahl定律通过系统中 并行化与串行化…

MyBatis ---- MyBatis的高级查询功能

MyBatis ---- MyBatis的高级查询功能1. 查询一个实体类对象2. 查询一个list集合3. 查询单个数据4. 查询一条数据为map集合5. 查询多条数据为map集合方式一方式二1. 查询一个实体类对象 User getUserById(Param("id") int id);<!--User getUserById(Param("id…

Linux 内存虚实内存映射

Linux 内存虚实内存映射TOC 以前关于虚拟地址和物理地址的学习只是在书本上&#xff0c;今天在实际的开发板上实践了一下 代码&#xff1a; #include <linux/kernel.h> #include <linux/init.h> #include <linux/module.h> #include <linux/sched.h #i…

【Pandas数据处理100例】(九十一):Pandas读取txt文本文件

前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPandas版本:1.3.5N…

grid管理下的多实例配置不同监听端口

某现场有两个实例&#xff0c;且客户要求两个实例使用不同的端口&#xff0c;但是grid管理下的监听默认只能一个端口&#xff0c;可以通过以下方式解决 oracle下&#xff1a; srvctl add listener -l listener_cc -p 1522 -o $ORACLE_HOME srvctl add listener -l listener_…

[附源码]SSM计算机毕业设计学院竞赛管理信息系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…