1

我使用 Spark 2.1.1。

我使用结构化流从 2 个 Kafka 分区读取消息。我将我的应用程序提交到 Spark Standalone 集群,其中包含一个工作人员和 2 个执行程序(每个 2 个核心)。

./bin/spark-submit \
  --class MyClass \
  --master spark://HOST:IP \
  --deploy-mode cluster \
  /home/ApplicationSpark.jar

我想要这样的功能,来自每个 Kafka 分区的消息应该由每个单独的执行程序独立处理。但是现在发生的事情是,执行程序分别读取和映射分区数据,但是映射后形成的无界表是常用的并且具有来自两个分区的数据。

当我在表上运行结构化查询时,查询必须处理来自两个分区的数据(更多数据量)。

select product_id, max(smr.order_time), max(product_price) , min(product_price) 
from OrderRecords
group by WINDOW(order_time, "120 seconds"), product_id

Kafka分区在哪里Product_id

有没有办法从执行器映射到的 Kafka 分区并行但单独地对数据运行相同的结构化查询?

4

1 回答 1

0

但是现在发生的事情是,执行程序分别读取和 .map 分区数据,但是在映射后形成的无界表是常用的并且具有来自两个分区的数据。因此,当我在表上运行结构化查询时,查询必须处理来自两个分区的数据(更多数据量)。

这是了解在不引起随机播放和跨分区发送数据(甚至可能通过网络)的情况下可以执行什么以及如何执行的关键。

最终的答案取决于您的查询是什么。如果他们处理记录组,这些记录组分布在多个主题分区中,因此在两个不同的 Spark 执行程序上,您必须格外小心您的算法/转换才能在单独的分区上进行处理(仅使用可用的分区)并仅聚合结果。

于 2017-06-02T06:46:46.267 回答