apache-spark - 接收器是否将其流媒体内容存储在执行器运行的地方?
问题描述
假设有 3 个执行者(ex1、ex2、ex3)。在一个执行器(ex1)中,假设接收器正在运行,现在当数据进入该源时会发生什么。假设一个数据到达了一个 kafka 主题,比如“topic1”,现在在 ex1 中运行的接收器将消耗到达该主题的数据,对吗?现在这些数据存储在哪里?
- 它是否存储在执行程序 ex1 本身中?
- 如果数据太大怎么办?它是否将其分解并将其分发给其他执行者?
假设每个执行程序(ex1,ex2,ex3)的容量为 10gb。数据到达说 15gb(假设假设)现在 ex1 会发生什么。它会失败还是会被处理?如果处理它将如何处理?它是否分布在集群上。如果它分布在集群上,如果在一批中只形成一个 rdd,foreachRDD 将如何适应图片。好像它是通过分解来分配的,现在对于那个特定的批次来说,集群中的一个 rdd 多于一个?
- 有多少个接收器在 spark 作业中运行?是否取决于输入源的数量?如果 spark 正在读取 4 个不同的 kafka 主题,是否意味着 4 个不同的接收器将在不同的执行器中分别运行?如果只有 2 个执行器和 4 个 kafka 主题/源怎么办?在这种情况下,4 个不同的接收器会在这两个执行器中均匀运行吗?如果源是奇数怎么办?如果有两个执行者和 3 个 kafka 来源,那么在其中一个执行者中会有两个吗?如果其中一名执行人死亡怎么办?它将如何恢复?
解决方案
- 它是否存储在执行程序 ex1 本身中?
是的,Spark Driver 获取的所有数据都被推送到 executor 以进行进一步处理。
- 如果数据太大怎么办?它是否将其分解并将其分发给其他执行者?
数据被 Spark 接收器读取后进行哈希分区,然后在执行器之间公平分配。如果您仍然存在数据偏差,请尝试添加自定义分区器并重新分区数据。
- 有多少个接收器在 spark 作业中运行?是否取决于输入源的数量?如果 spark 正在读取 4 个不同的 kafka 主题,是否意味着 4 个不同的接收器将在不同的执行器中分别运行?如果只有 2 个执行器和 4 个 kafka 主题/源怎么办?在这种情况下,4 个不同的接收器会在这两个执行器中均匀运行吗?如果源是奇数怎么办?如果有两个执行者和 3 个 kafka 来源,那么在其中一个执行者中会有两个吗?如果其中一名执行人死亡怎么办?它将如何恢复?
只有一个接收器(即一个或多个主题)进行 Kafka 偏移管理。它将每个主题的偏移范围移交给 Spark 执行器,Spark 执行器直接从 Kafka 读取数据。如果执行者中的任何一个死亡,它的所有阶段都将从上次成功保存的阶段重新执行。Spark 负载分布不是基于数据的大小,而是基于事件的计数。指导方针说,如果一个主题有 N 个分区,那么 Spark 应该有 2N 个执行器以实现最佳 CPU 资源利用率。
您应该在以下链接中找到更多详细信息, https://blog.cloudera.com/reading-data-securely-from-apache-kafka-to-apache-spark/
推荐阅读
- wordpress - 将 do_shortcode() 与联系表格 7 一起使用并且缺少表格标签
- multithreading - 为 WebAssembly 模块重新分配 imports.env.memory 不会取代堆
- python - 如何在 mac 终端上使用突出显示的数据框运行 pandas styler
- excel - 如何将用户表单变量与维度变量进行比较?
- node.js - POST 获取交易令牌时收到 400 错误请求
- pdf - 从不同格式的 pdf 发票中提取数据
- nlp - 您可以使用特定于任务的架构从头开始训练 BERT 模型吗?
- php - 试图获取非对象的属性“全名”(查看:在 laravel 7 中,当我想在 dashboard.blade.php 上显示 {{Auth::user()->fullname}} 时
- python - 创建一个函数来交换嵌套列表中的元素并在此过程中更新列表
- c - 谁能告诉我为什么会出现此错误...?