我有一个使用updateStateByKey
的火花流程序。
当我在具有3台计算机的群集上运行它时,所有updateStateByKey
任务(这些都是繁重的任务)在一台计算机上运行。这会导致输入的调度延迟,而其他机器则有空闲的CPU。
我更改了工作人员的数量,但所有updateStateByKey
任务都在一台特定计算机上的工作人员上运行。我也尝试使用mapWithState
代替updateStateByKey
,但遇到了同样的问题。
如何告诉spark优先在所有机器上分配任务?
JavaPairInputDStream<String, String> streamEvents = KafkaUtils.createDirectStream(
jssc, String.class, String.class, StringDecoder.class, StringDecoder.class, kafkaParams, eventTopic
);
JavaPairDStream<String, String> newKeys = streamEvents.flatMapToPair(new KeyGenerator(zookeeperHosts));
JavaPairDStream<String, String> scenarioKeys =
newKeys.updateStateByKey(new HeavyKeysFunc(), 36);
作业排队,cpu几乎空闲。