从单机到并行处理?

from single machine to parallel processing?

我是 Spark Streaming 和大数据的新手。我正在尝试了解 spark 中项目的结构。我想创建一个 main class 让我们说 "driver" 有 M 台机器,每台机器都有一个计数器数组及其值。在单机而不是 Spark 中,我会为机器创建一个 class,为计数器创建一个 class,然后我会进行我想要的计算。但我想知道这是否也发生在 Spark 中。同一个项目,但在 Spark 中,是否具有我在下面引用的结构?

class Driver {
    var num : Int = 100
    var machines: Array[Machine] = new Array[Machine](num)
    //split incoming dstream and fill machines' queues
}
class Machine {
 var counters = new Queue[(Int,Int)]() // counter with id 1 and value 25
 def fillCounters: Unit = { ... } //function to fill the queue counters
}

通常,您可以将 Spark 应用程序想象为应用程序的 driver 部分,其中 运行 所有协调任务,构建图(您会在理论部分找到有向无环图或 DAG 的提及关于 Spark 和分布式计算的教程)对您的数据进行的操作,以及 executor 导致代码的许多副本的部分,发送到集群的每个节点以 运行 处理数据。

主要思想是 driver 提取需要 运行 在本地使用节点数据的应用程序代码部分,将其序列化,通过网络发送到每个 executor,启动,管理和收集结果。

Spark 框架隐藏了这些细节以简化使用,因此正在开发的应用程序看起来像单线程应用程序。

开发人员可以在 driverexecutor 上将 运行 的上下文分开,但这在教程中并不常见(同样,为简单起见)。

因此,对于上述实际问题的答案: 您不需要按照上面演示的方式设计您的应用程序,除非您确实想要这样做。 只需按照官方 Spark 教程获得可行的解决方案,然后将其与执行上下文拆分。

有很好的 post,总结了很多 Spark 教程、视频和讲座 - 你可以找到它 here at SO