博客 一文讲明白大数据核心组件的底层逻辑是什么

一文讲明白大数据核心组件的底层逻辑是什么

   数栈君   发表于 2023-07-26 10:41  236  0

01

Spark


Spark系统组件:

Spark系统整体是一个集群架构,主要组件包括:

1. Spark Core:Spark最基础的框架,提供任务调度、内存管理、错误恢复、与存储系统对接等功能。

2. Spark SQL:提供结构化数据的处理功能,可以通过SQL或者DataFrame API进行数据查询和分析。

3. Spark Streaming:提供数据流的处理功能,可以从Kafka、Flume等接收数据,进行处理后推送到存储系统或Dashboard。

4. MLlib:提供机器学习算法和统计函数,可以在Spark上进行机器学习与数据挖掘。

5. GraphX:提供图计算和图算法,可以对图形数据进行处理和分析。

关键组件及功能:

- Driver:驱动节点,用于提交应用,将应用切分成多个任务,实现资源的请求和调度。

- Executor:执行器节点,运行任务并返回结果给Driver。

- Master:负责资源的调度和分配,接收Driver提交的作业,然后将作业切分成多个任务分配到Executor上运行。

- Worker:运行Executor,提供计算资源。

- RDD:弹性分布式数据集,表示一个只读的、分区记录的集合。支持两种类型的分区:Hash和Range。

- DAG:有向无环图,用于跟踪RDD之间的依赖关系,以便进行调度。


Spark工作机制:

Spark是计算任务时,以wordcount计算为例,各个组件的执行过程,其中Driver程序提交应用时,将DAG切分成若干Stage,每个Stage包含若干Task。接下来Driver向Master申请资源,Master分配Executor运行Task。Executor根据Task的计算逻辑,从相应的RDD中获取Partition数据进行计算。每个Task计算完自己的Partition数据后,返回结果给Driver。Driver将所有Task的结果进行合并,最终得到完整的结果。如果有依赖关系,那么后续的Stage会等待之前的Stage完成后再开始执行。当所有的Stage执行完毕,应用结束,Driver会清空DAG和释放资源。

画流程图可参考上篇文章使用chatGPT快速画出高质量的流程图

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/26746c97edf00f3218f542b33f78b1ad..jpg

Mermaid法:

graph TD;    A[Driver程序] --提交应用--> B[Master]    B --分配资源运行Task--> C[Executor1]    B --分配资源运行Task--> D[Executor2]    B --分配资源运行Task--> E[Executor3]    C --根据Task计算Partition数据--> F[Task1]    C --根据Task计算Partition数据--> G[Task2]    D --根据Task计算Partition数据--> H[Task3]    D --根据Task计算Partition数据--> I[Task4]    E --根据Task计算Partition数据--> J[Task5]    E --根据Task计算Partition数据--> K[Task6]    F -->|计算完Partition数据| L[结果返回给Driver]    G -->|计算完Partition数据| L    H -->|计算完Partition数据| L    I -->|计算完Partition数据| L    J -->|计算完Partition数据| L    K -->|计算完Partition数据| L    L --合并所有Task的结果--> M[完整的结果]    M --判断是否有依赖--> N[有依赖,等待之前的Stage完成]    M --没有依赖,结束应用--> O[清空DAG和释放资源]

workcount计算流程例子:‍

Spark实现WordCount时的DAG生成过程,其中初始RDD没有依赖,是DAG的起点。接下来对初始RDD进行flatMap操作,形成包含所有单词的RDD,该RDD依赖于初始RDD。然后对单词RDD进行map操作,将每个单词映射为(单词,1)的格式,形成单词与计数的RDD,该RDD依赖于上一步的RDD。最后使用reduceByKey操作,将具有相同键的值相加,得到最终的(单词,计数)的RDD,该RDD依赖于上一步的RDD。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/da18067b30311b08ef2959e7f81bea3d..jpg

Mermaid语法:

graph TD;    A[文本数据文件] --读取--> B[初始RDD]    B --flatMap--> C[单词RDD]    C --map--> D[单词,1的数据对RDD]    D --reduceByKey--> E[单词,计数的数据对RDD]


02


Flink


Flink系统组件

Flink系统整体是一个分布式流处理架构,主要组件包括:

1. JobManager:负责调度和资源分配,接收客户端提交的作业,然后将作业切分成多个任务分配到TaskManager上运行。

2. TaskManager:运行子任务,提供计算资源。一个TaskManager可以运行多个子任务。

3. Client:提交作业和查询作业状态。

4. Dispatcher:接收Client提交的作业,将作业转发给JobManager。

关键组件及功能:

- Stream:表示一个数据流,带有Source、Transformation和Sink。

- Source:定义了一条数据流的源,它会不断地产生数据。

- Transformation:对Stream进行转换操作,会产生一个新的Stream。

- Sink:数据流的终点,定义了结果的持久化位置。

- Operator:Transformation和Sink的基类,实现了数据处理逻辑。一个Operator会被映射成一个或多个并行子任务。

- Parallelism:控制算子的并行子任务的数量。

- State:允许Transformation操作的状态,可以是ListState、BroadcastState等。

Flink支持的Transformation主要有:Map、FlatMap、Filter、KeyBy、Reduce、Aggregate等。

Flink的优点主要在于:

1.  Exactly-once的语义:处理效果等同于批处理,实现了端到端的精确一次。

2. 低延迟:使用流式处理,延迟低。

3. 高吞吐:实现了高效的数据流操作和分布式执行。


基础概念:

(1) 流的概念:代表了一个无界的、持续性的数据集合。流会不断产生新数据。

(2) 转换的概念:表示对一个或多个输入流的计算操作,产生新的输出流。转换允许通过各种操作来操控和处理数据流。

(3) 容错:通过分布式快照(Checkpoint)与数据重播(Data replay)来实现End-to-end的Exactly-once语义。

(4) 一致性:通过全局数据流的概念来统一操作不同来源的数据,并通过时间戳和窗口等机制实现一致性。

(5) 高吞吐:通过流水线传输、缓冲区反压和轻量级的容错机制实现高吞吐率。


工作机制:

Flink的工作机制,其中Client将作业(DAG)提交到JobManager,JobManager根据作业逻辑将DAG切分成多个任务。接下来JobManager向ResourceManager申请计算资源,然后将任务分配到TaskManager运行。Task会处理数据流的一个或多个分区(Partition),实现实际的数据处理逻辑。每个Operator(Transformation/Sink)会被映射为一个或多个Task运行。Task之间通过发送数据实现流的传递。一个作业会被映射为多个Operator,Operator通过数据流实现连接,最终构建一个有向无环图(DAG),计算结果。Flink实现了分布式和高度并行的流数据处理,一个作业会被映射为大量的Task运行。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/0ddee991463f70a7697b2e3b318012ff..jpg

Mermaid语法:

graph TD;    A[Client] --提交作业--> B[JobManager]    B --切分DAG成多个Task--> C[TaskManager1]    B --切分DAG成多个Task--> D[TaskManager2]    B --切分DAG成多个Task--> E[TaskManager3]    C --处理数据流分区--> F[Task1]    C --处理数据流分区--> G[Task2]    D --处理数据流分区--> H[Task3]    D --处理数据流分区--> I[Task4]    E --处理数据流分区--> J[Task5]    E --处理数据流分区--> K[Task6]    F -->|操作输出数据流| L[(Transformation/Sink)]    G -->|操作输出数据流| L    H -->|操作输出数据流| L    I -->|操作输出数据流| L    J -->|操作输出数据流| L    K -->|操作输出数据流| L    L --建立Operator之间的数据流--> M[有向无环图DAG]    M-->N[分布式和高度并行的流数据处理]    N--将作业分配给大量的Task运行-->O[实现分布式和高度并行的数据处理]

wordcount计算流程例子

Flink执行wordcount任务流程,首先需要创建执行环境和设置并行度,然后从文件中读取文本数据,得到数据流。接着进行分词操作,得到单词流。对单词流进行映射操作,得到(单词,1)的流。对(单词,1)的流进行KeyBy操作,按单词进行分区。对分区后的流进行Reduce操作,将同一分区内的(单词,1)相加,得到(单词,总计数)的流。最后将结果打印于控制台。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/1df6a4c1d1cf43d47ac594d128ed5187..jpg

Mermaid法:

graph TD;    A[创建执行环境,设置并行度] --> B[从文件中读取文本数据,得到数据流];    B--文本数据-->C[分词操作];    C--单词流-->D[映射操作:单词,1的流];    D--单词,1的流-->E[KeyBy操作,按单词分区];    E--按单词分区的流-->F[Reduce操作,将同一分区的:单词,1相加得到:单词,总计数];    F--单词,总计数的流-->G[结果打印在控制台];


03


Hadoop


hadoop系统组件:

Hadoop系统整体是一个分布式存储和计算框架,主要组件包括:

1. HDFS:Hadoop分布式文件系统,提供高容量、高扩展性的存储。

2. YARN:资源管理框架,负责计算资源的管理和调度。

3. MapReduce:批处理计算框架,基于HDFS和YARN实现大规模数据的并行计算。

4. Hive:数据仓库工具,提供SQL查询功能,方便对HDFS的数据进行查询与分析。

5. HBase:NoSQL数据库,提供实时读写访问HDFS上的数据。

关键组件及功能:

- NameNode:HDFS的元数据管理节点,负责文件目录结构和文件块映射信息的管理。

- DataNode:HDFS的数据存储节点,负责文件数据的存储与读取。

- SecondNameNode:辅助NameNode,负责定期合并FSImage和Edits,避免该文件过大。

- ResourceManager:YARN的管理节点,用于管理集群资源和调度作业。

- NodeManager:YARN的工作节点,用于管理容器和监控容器资源使用情况。 

- JobTracker:旧版MapReduce中的作业跟踪器,负责作业的调度与监控。

- TaskTracker:旧版MapReduce中的任务跟踪器,负责执行任务并报告状态。

- 优点:高可靠性、高扩展性、高容错性、低成本。


MapReduce工作流程:

MapReduce在实现数据处理的工作流程。客户端提交作业到JobTracker,指定输入输出路径和Map/Reduce逻辑。JobTracker将作业切分成多个Map和Reduce任务,并向ResourceManager申请运行资源。ResourceManager分配容器,在NodeManager上运行Map任务。Map任务从HDFS读取输入数据,并根据业务逻辑进行处理,产生中间结果。Map任务将中间结果以分区/排序的形式输出到本地磁盘。Map任务向JobTracker报告状态,并在完成后释放资源。根据Map任务的输出分区,JobTracker将Reduce任务分配到具有Map任务输出的节点。Reduce任务从多个Map任务读取中间结果进行计算,最终产生输出结果。Reduce任务将输出结果写出到HDFS,并向JobTracker报告状态。作业完成后,客户端从HDFS读取输出结果。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/cb97bef9fc75d35272b558159304394b..jpg

Mermaid法:

graph TD;    A[Client] --> B[JobTracker];    B --> C[ResourceManager];    C --> D[NodeManager];    D --> E[Map任务从HDFS读取输入数据,并根据业务逻辑进行处理,产生中间结果];    E --> F[Map任务将中间结果以分区/排序的形式输出到本地磁盘];    F --> G[Map任务向JobTracker报告状态,完成后资源释放];    G --> H[Reduce任务从多个Map任务读取中间结果进行计算,最终产生输出结果];    H --> I[Reduce任务将输出结果写出到HDFS,并向JobTracker报告状态];    I --> J[客户端从HDFS读取输出结果];    B --> K[将作业切分成多个Map任务和Reduce任务];    K --> C;    E --> D;    H --> G;    J --> A;    K -.-> L[向ResourceManager申请运行资源];    L --> C;    G --> K[根据Map任务的输出分区,将Reduce任务分配到具有Map任务输出的节点];

HDFS、MapReduce和YARN的协作机制

在HDFS、MapReduce和YARN的协作下,MapReduce作业的整个工作流程:客户端通过HDFS接口向HDFS提交MapReduce作业,指定输入/输出路径。MapReduce作业被提交到YARN的ResourceManager。ResourceManager将MapReduce作业切分为MapTask和ReduceTask,并向NodeManager申请运行资源。MapTask在NodeManager上运行,并从HDFS读取输入数据,将中间输出临时存储在本地磁盘上。ReduceTask从多个MapTask读取中间数据,并计算最终结果,将输出结果存储到HDFS。客户端从HDFS读取MapReduce的计算结果。YARN根据作业进度监控和管理资源使用情况。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/9998c050779cc3d591cbe5e522e4f0e0..jpg

Mermaid语法:

graph LR;    A[客户端] --> B[HDFS];    B --> C["通过HDFS接口提交MapReduce作业, 指定输入/输出路径"];    C --> D[YARN的ResourceManager];    D --> E["将MapReduce作业切分成MapTask和ReduceTask, 并申请运行资源"];    E --> F[NodeManager];    F --> G["MapTask在NodeManager上运行, 并从HDFS读取输入数据"];    G --> H["MapTask将中间输出临时存储在本地磁盘上"];    E --> I["ReduceTask从多个MapTask读取中间数据, 并计算最终结果"];    I --> J["ReduceTask将输出结果存储到HDFS"];    J --> K[HDFS];    D --> L["根据作业进度监控和管理资源使用情况"];    K --> M[客户端从HDFS读取MapReduce的计算结果];

04


Kafka


Kafka 具有高吞吐、高可靠、高扩展性等特点,适用于大数据场景下的消息传递和运营数据处理。


Kafka 的整体运作流程是:生产者生产消息发送到 broker,broker 将消息根据 partition 分发并持久化;消费者从 broker 中读取并消费消息,由消费者组中的一个消费者独占一个 partition,其他消费者不会重复消费该 partition 的消息;副本之间通过同步复制消息来保证高可用性。


kafka系统组件:

Kafka 的整体架构包含以下几个关键组件:

1. Broker:Kafka 集群中的服务器,负责消息的接收、存储和转发。一个 Kafka 集群通常包含多个 Broker。

2. Topic:Kafka 中的消息分类,类似消息队列中的 Queue。生产者生产消息并推送到 topic,消费者订阅 topic 获取消息。

3. Partition:Topic 的物理分片,提高并行度。每个 partition 是一个有序的消息队列。

4. Replica:Partition 的副本,通常设置 2-3 个副本,副本中的消息相同,用于冗余备份和故障转移。

5. Producer:生产者,向 Kafka broker 发送消息的客户端。

6. Consumer:消费者,从 Kafka broker 读取消息的客户端。

7. Consumer Group:消费者组,允许多个消费者协作读取同一个 topic,每个 partition 只能被 group 中的一个消费者使用。

8. Offset:消息在 partition 中的序号,由 0 开始,递增。消费者根据 offset 获取消息。

9. ISR: leader 副本和其余 in-sync replica(与 leader 副本同步的副本)的集合。只有在 ISR 中的副本才会为 partition 提供服务。


kafka如何保证数据不丢:

Kafka 通过持久化、副本、ACK、ISR 和重试等机制,保证了消息的高可靠性和不丢数据,具体说明如下:

1. 消息持久化:Kafka 将消息持久化到磁盘,并以文件形式存储在broker上,所以无论broker发生什么问题,消息都不会丢失。

2. 副本 replicas:Kafka 的每个 partition 分区都有多个副本,一旦某个副本失效,仍有其他副本存在,消息不会丢失。

3. ACK 机制:生产者发送消息到 broker 时,需要配置 ACK 级别。如果设置为 ACK=0,生产者在消息发送后不等待 broker 的响应;如果设置为 ACK=1,生产者在消息写入 broker 的 leader 副本后得到确认;如果设置为 ACK=all,生产者在消息被所有副本全部写入后得到确认。高 ACK 级别可以保证更高的可靠性,避免在 follower 副本未同步前就认为消息已发送成功。

4. ISR(In-Sync Replicas)机制:follower 副本与 leader 副本之间的同步指标叫 ISR,只有在 ISR 内的 follower 副本才会为 partition 中的消息提供 read 服务和变更日志的备份。如果某个 follower 副本长时间未与 leader 同步,会被逐出 ISR,不再为 partition 提供服务,直到它再次与 leader 达成一致。这可以避免 follower 过久未同步导致的消息丢失问题。

5. 生产者重试机制:生产者在消息发送失败时(如 broker 失效)会自动重试,一直到消息成功发送或达到重试上限。这可以避免临时性故障导致的消息丢失。

6. 消息过期时间:用户可以为 topic 设置消息过期时间,如果消息在指定时间内未被成功消费,则认为该消息已过期失效,可以被删除。这可以避免消息堆积而不被消费的情况。


Kafka 的读写流程:

Kafka 的读写流程主要涉及生产者、消费者、broker 三个角色。生产者产生消息并写入 broker,消费者从 broker 读取消息并确认消费进度。broker 负责消息的持久化存储和查询。整个流程保证了消息的可靠传输和exactly-once 语义

Kafka 的消息写流程如下:

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/95b4c26e7bbac7fb00e17b317b5af595..jpg

Kafka 的消息读流程如下:

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/93e9bb4738c3c116b1e2daa8ae6b5b41..jpg


免责申明:

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:
https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
https://github.com/DTStack

0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群