我是新来的 spark 并尝试了一个示例 Spark Kafka 集成。我所做的是从单个分区的 Kafka 中发布 json:
{"city":"LosAngeles","country":"US"}
{"city":"MexicoCity","country":"Mexico"}
{"city":"London","country":"UK"}
{"city":"NewYork","country":"US"}
{"city":"NewCastle","country":"UK"}
我正在执行以下步骤:
我在 spark 作业中有一个 DStream 接收器。
我在那个 Dstream 上重新分区 3
然后我在这个 DStream 上执行一个 flatMap 来接收转换后的 RDDStream 中的分区键/值对。
我做了一个 groupbyKey 洗牌。
然后我在 RDDStream 步骤 4 上进行另一个映射转换,为每个值 json 添加更多键。
最后我做了一个 forEachPartition 并收集 RDD 并打印结果。
我在 Spark 独立模式下运行它,集群中有 3 个执行器。由于我从 Kafka 的单个分区接收数据,因此我将无法使用并行接收器来并行执行 DStream。如果我错了,请纠正我,但由于我在接收后进行了 3 的重新分区,我相信我将创建三个分区,并且这些分区上的后续映射转换将在 3 个执行器中并行执行。但我观察到的是,我的所有分区都只在一个执行程序中按顺序执行,而其他两个执行程序没有被使用。请问我可以对此提出一些建议吗?
如何在从单个分区 Kafka 主题的单个 DStream 接收器接收的并行执行器中执行 RDD 分区?