Spark Streaming任务分发

时间:2016-06-05 13:30:11

标签: apache-spark spark-streaming

我有一个使用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几乎空闲。

0 个答案:

没有答案