SparkStreaming 原理_Receiver | 学习笔记

简介: 快速学习 SparkStreaming 原理_Receiver

开发者学堂课程【大数据Spark2020版(知识精讲与实战演练)第五阶段:SparkStreaming 原理_Receiver】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/692/detail/12138


SparkStreaming 原理_Receiver

一、Receiver

二、receiver 结构

三、Receiver 的执行过程

 

一、Receiver

在 Spark Streaming 中一个非常大的挑战是,很多外部的队列和存储系统都是分块的, RDD 是分区的,在读取外部数据源的时候,会用不同的分区对照外部系统的分片,

例如

image.png

假如在存储侧有一个文件名为 /dataest/wordcout.txt,这个文件在 HDFS 中将分为三个 block,此时有一个问题,Kafka 是不是也是分片?

Kafka 的一个 topic 是不是分为多个 Partition,那么,如果在 spark streaming 获取 Kafka 数据的时候,要不要让 spark streaming 获取的时候也是分片的?

image.png

假如说使用 inputDstream 去获得 Kafka 数据,如果 Kafka 是分片的,那么 InputDstream 也需要进行分片以对应卡夫卡分片的数据。

●DStream 中是 RDD 流只是 RDD 的分区对应了 Kafka 的分区就可以了吗?

答案是不行,因为需要一套单独的机制来保证并行的读取外部数据源,这套机制叫做 Receiver,这套机制要支持分布式。

 

二、receiver 结构

image.png

为了保证并行获取数据,对应每一个外 部数据源的分区,所以 Receiver 也要是分布式的,主要分为三个部分

●Receiver 是一个对象,是可以有用户自定义的获取逻辑对象,表示了如何获取数据,Receiver 是可以自定义的,receiver 可以在每个 Executor 中运行,因为receiver 是分布式的。

●Receiver Tracker 是 Receiver 的协调和调度者, 其运行在 Driver. 上

●Receiver Supervisor 被 Receiver Tracker 调度到不同的几点上分布式运行,其会拿到用户自定义的 Receiver 对象,使用这个对象来获取外部数据,Receiver Supervisor 负责 Receiver 的运行。

 

三、Receiver 的执行过程

image.png

1.在 Spark Streaming 程序开启时候,Receiver Tracker 使用 JobScheduler 分发Job 到不同的节点,每个 Job 包含一个 Task,这个 Task 就是 Receiver Supervisor ,这个部分的源码还挺精彩的,其实是复用了通用的调度逻辑

2. ReceiverSupervisor 启动后运行 Receiver 实例

3. Receiver 启动后,就将持续不断地接收外界数据,并持续交给ReceiverSupervisor 进行数据存储

4. ReceiverSupervisor 持续不断地接收到 Receiver 转来的数据,并通过BlockManager 来存储数据

5.获取的数据存储完成后发送元数据给 Driver 端的 ReceiverTracker ,包含数据块的 id,位置,数量,大小等信息

 

相关文章
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
34_GPT系列:从1到5的架构升级_深度解析
大型语言模型(LLM)的发展历程中,OpenAI的GPT系列无疑扮演着至关重要的角色。自2018年GPT-1问世以来,每一代GPT模型都在架构设计、预训练策略和性能表现上实现了质的飞跃。本专题将深入剖析GPT系列从1.17亿参数到能够处理百万级token上下文的技术演进,特别关注2025年8月8日发布的GPT-5如何引领大模型技术迈向通用人工智能(AGI)的重要一步。
|
JavaScript 前端开发 安全
JavaScript中的循环控制:while、do-while与for详解
【4月更文挑战第7天】本文探讨JavaScript的三种主要循环结构:while、do-while和for。while循环在满足条件时执行代码块,注意避免无限循环;do-while循环至少执行一次,适合先执行后判断的场景;for循环结合初始化、条件和迭代,适合遍历。理解每种循环的特点和适用场景,结合编程技巧,如使用break和continue,选择合适的循环方式,能提升代码效率和可读性。记得关注循环性能和避免不必要的计算。
415 0
|
算法 安全 大数据
【C/C++ 随机函数行为】深入探索C++中的随机数:std::random_device与rand的行为分析(二)
【C/C++ 随机函数行为】深入探索C++中的随机数:std::random_device与rand的行为分析
465 0
|
9月前
|
存储 NoSQL Linux
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
644 0
|
应用服务中间件 nginx Docker
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
这篇文章介绍了如何通过域名在本地访问虚拟机上的nginx服务,包括创建nginx容器、修改配置文件、修改本地host文件以及进行访问测试的详细步骤。文章提供了具体的Docker命令来创建并配置nginx容器,展示了配置文件的修改示例,说明了如何在本地系统的hosts文件中添加虚拟机IP和自定义域名,以及如何通过浏览器进行测试访问。
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
|
存储 SQL 缓存
MySQL存储引擎如何完成一条更新语句的执行!
MySQL存储引擎如何完成一条更新语句的执行!
134 0
MySQL存储引擎如何完成一条更新语句的执行!
|
编解码 物联网 大数据
窄带高清的技术演进问题之大麦物联网技术应用如何解决
窄带高清的技术演进问题之大麦物联网技术应用如何解决
|
索引 Python Go
【python学习】字符串详解,面试必问公司的问题
【python学习】字符串详解,面试必问公司的问题
|
存储 自然语言处理 搜索推荐
《SpringBoot篇》16.SpringBoot整合Elasticsearch超详细教程(一)
《SpringBoot篇》16.SpringBoot整合Elasticsearch超详细教程(一)
833 0
《SpringBoot篇》16.SpringBoot整合Elasticsearch超详细教程(一)
|
负载均衡 网络协议 前端开发