Maa*_*mon 5 apache-kafka apache-spark spark-streaming
我理解Kafka分区和Spark RDD分区之间以及最终Spark Task之间存在的自动映射.但是为了正确地调整My Executor的大小(核心数量),因此最终我的节点和集群,我需要理解一些似乎在文档中被掩盖的东西.
在Spark-Streaming中,数据消耗与数据处理与任务分配的完全相同,换句话说:
- 对Kafka分区的相应Spark任务是否同时读取和处理数据?
这个问题背后的理性是,在以前的API中,即基于接收器,TASK专门用于接收数据,这意味着执行器的数量任务槽保留用于数据摄取,另一个用于处理.这对您在核心方面的执行者大小有影响.
举例说明如何使用
--master local启动spark-streaming .每个人都会说,在火花流的情况下,应该将本地[2]放在最小,因为其中一个核心将专门用于运行永不结束的长接收任务,而另一个核心将进行数据处理.
因此,如果答案是在这种情况下,任务同时执行读取和处理,那么接下来的问题是,
真的很聪明,我的意思是,这听起来像异步.我们希望
能够在我们处理时获取,因此在下一次处理时数据已经存在.但是,如果只有一个核心或更准确地
同时读取数据并处理它们,那么两者如何
并行完成,以及如何使事情更快.
我原来的理解是,在某种意义上,事情将保持不变,即任务将被启动以进行读取,但
处理将在另一个任务中完成.这意味着,如果
处理任务尚未完成,我们仍然可以继续阅读,直到达到一定的内存限制.
有人可以清楚地概述这里究竟发生了什么吗?
EDIT1
我们甚至不必拥有这种内存限制控制.仅仅是在处理过程中能够获取并在那里停止的事实.换句话说,这两个过程应该是异步的,而限制只是领先一步.对我来说,如果不知道这种情况发生了什么,我发现Spark会实现破坏性能的东西是非常奇怪的.
Kafka 分区对应的 Spark 任务是否同时读取和处理数据?
如果通过谈论任务我们指的是从 kafka 读取直到洗牌操作的图表部分,那么这种关系与您所描述的非常接近。执行流程如下:
这意味着单个执行器将读取给定的数据TopicPartition并处理其上的整个执行图,除非我们需要进行混洗。由于 Kafka 分区映射到 内部的分区RDD,我们得到了这个保证。
结构化流媒体更进一步。TopicPartition在结构化流中, worker/executor之间存在粘性。这意味着,如果为给定的工作人员分配了 a,TopicPartition它很可能会在应用程序的整个生命周期中继续处理它。
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |