在Spark流媒体应用中,我可以在群集中的所有计算机上并行化接收器(而不仅仅是Master)吗?这样,Spark集群中的所有节点都同时从外部流中读取。
答案 0 :(得分:1)
在群集上部署时,Spark Streaming将使用spark.cores.max
中指定的核心数。我们可以以编程方式创建n
接收器,它们将分布在为此作业保留的核心上,但不保证物理节点上的均匀分布。
作为使用kafka的示例,我们在这里创建kafkaParallelism
个接收器。
@transient val inKafkaList:List[DStream[(K,V)]] = List.fill(kafkaParallelism) {
KafkaUtils.createStream[K, V, KDecoder, VDecoder](ssc, kafkaConfig, topics, StorageLevel.MEMORY_AND_DISK_SER)
}
@transient val inKafka = ssc.union(inKafkaList)
请注意,合并生成的Dstream以减少生成的任务数量是一种很好的做法。