首页 > 解决方案 > 接收器是否将其流媒体内容存储在执行器运行的地方?

问题描述

假设有 3 个执行者(ex1、ex2、ex3)。在一个执行器(ex1)中,假设接收器正在运行,现在当数据进入该源时会发生什么。假设一个数据到达了一个 kafka 主题,比如“topic1”,现在在 ex1 中运行的接收器将消耗到达该主题的数据,对吗?现在这些数据存储在哪里?

  1. 它是否存储在执行程序 ex1 本身中?
  2. 如果数据太大怎么办?它是否将其分解并将其分发给其他执行者?

假设每个执行程序(ex1,ex2,ex3)的容量为 10gb。数据到达说 15gb(假设假设)现在 ex1 会发生什么。它会失败还是会被处理?如果处理它将如何处理?它是否分布在集群上。如果它分布在集群上,如果在一批中只形成一个 rdd,foreachRDD 将如何适应图片。好像它是通过分解来分配的,现在对于那个特定的批次来说,集群中的一个 rdd 多于一个?

  1. 有多少个接收器在 spark 作业中运行?是否取决于输入源的数量?如果 spark 正在读取 4 个不同的 kafka 主题,是否意味着 4 个不同的接收器将在不同的执行器中分别运行?如果只有 2 个执行器和 4 个 kafka 主题/源怎么办?在这种情况下,4 个不同的接收器会在这两个执行器中均匀运行吗?如果源是奇数怎么办?如果有两个执行者和 3 个 kafka 来源,那么在其中一个执行者中会有两个吗?如果其中一名执行人死亡怎么办?它将如何恢复?

标签: apache-spark

解决方案


  1. 它是否存储在执行程序 ex1 本身中?

是的,Spark Driver 获取的所有数据都被推送到 executor 以进行进一步处理。

  1. 如果数据太大怎么办?它是否将其分解并将其分发给其他执行者?

数据被 Spark 接收器读取后进行哈希分区,然后在执行器之间公平分配。如果您仍然存在数据偏差,请尝试添加自定义分区器并重新分区数据。

  1. 有多少个接收器在 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/


推荐阅读