Apache spark mllib代码如何在spark上运行?

Apache spark mllib代码如何在spark上运行?,apache-spark,apache-spark-mllib,Apache Spark,Apache Spark Mllib,我是分布式计算新手,我正在尝试使用Spark的mllib Kmeans在EC2上运行Kmeans。在阅读教程的过程中,我在 我很难理解这段代码在集群中是如何运行的。具体来说,我很难理解以下内容: 将代码提交到主节点后,spark如何知道如何并行化作业?因为代码中似乎没有处理这个问题的部分 代码是否复制到所有节点并在每个节点上执行?主节点进行计算吗 节点如何交流每次迭代的部分结果?这是在kmeans.train代码中处理的,还是spark core自动处理的 Spark将数据划分为多个分区。例如

我是分布式计算新手,我正在尝试使用Spark的mllib Kmeans在EC2上运行Kmeans。在阅读教程的过程中,我在

我很难理解这段代码在集群中是如何运行的。具体来说,我很难理解以下内容:

  • 将代码提交到主节点后,spark如何知道如何并行化作业?因为代码中似乎没有处理这个问题的部分

  • 代码是否复制到所有节点并在每个节点上执行?主节点进行计算吗

  • 节点如何交流每次迭代的部分结果?这是在kmeans.train代码中处理的,还是spark core自动处理的

  • Spark将数据划分为多个分区。例如,如果从HDFS读取文件,则分区应等于HDFS中的数据分区。您可以通过执行
    重新分区(numberOfPartitions)
    手动指定分区数。每个分区都可以在单独的节点、线程等上进行处理。有时数据由HashPartitioner进行分区,HashPartitioner查看数据的散列 分区的数量和大小通常会告诉您数据是否正确分布/并行。创建数据分区隐藏在
    RDD.getPartitions
    方法中

    资源调度取决于集群管理器。我们可以发布很长的关于他们的帖子;)我认为在这个问题上,分区是最重要的。如果没有,请通知我,我会编辑答案

  • Spark序列化作为转换和操作参数提供的Clusure。Spark创建DAG,DAG发送给所有执行者,执行者对数据执行此DAG-它在每个分区上启动闭包

  • 当前,在每次迭代之后,数据将返回到驱动程序,然后安排下一个作业。在Drizzle项目中,AMPLab/RISELab可以一次创建多个作业,因此数据不会发送给驱动程序。它将创建一次DAG和计划,即10次迭代的作业。它们之间的混洗将受到限制/根本不存在。目前,DAG是在每个迭代中创建的,作业是计划给执行者的


  • 在Spark和Spark Drissing中,资源调度非常有用

    对不起,如果我在任何一点上都不准确。如果有人看到任何错误,请给我打电话——我已经尽可能简单地解释了,也许在某个地方我可能太不精确了