mllib 如何在 spark 上编码 运行?
How does mllib code run on spark?
我是分布式计算的新手,我正在尝试 运行 使用 Spark 的 mllib kmeans 在 EC2 上进行 Kmeans。在阅读本教程时,我发现了以下代码片段
http://spark.apache.org/docs/latest/mllib-clustering.html#k-means
我无法理解这段代码 运行 在集群中的作用。具体来说,我无法理解以下内容:
将代码提交到master节点后,spark如何知道如何并行化作业?因为似乎没有处理这个的代码部分。
是否将代码复制到所有节点并在每个节点上执行?主节点是否做计算?
节点如何传递每次迭代的部分结果?这是在 kmeans.train 代码中处理的,还是 spark 核心自动处理的?
- Spark 将数据划分为多个分区。比如你从HDFS读取一个文件,那么分区应该等于HDFS中数据的分区。您可以通过
repartition(numberOfPartitions)
手动指定分区数。每个分区都可以在单独的节点、线程等上处理。有时数据由 HashPartitioner 分区,它查看数据的哈希值。
分区数和分区大小通常可以告诉您数据是否 distributed/parallelized 正确。创建数据分区隐藏在 RDD.getPartitions
方法中。
资源调度取决于集群管理器。关于它们,我们可以 post 很长 post ;) 我认为在这个问题中,分区是最重要的。如果没有,请告诉我,我会编辑答案。
Spark 序列化作为转换和操作的参数给出的 clusures。 Spark 创建 DAG,发送给所有执行者,执行者在数据上执行这个 DAG——它在每个分区上启动闭包。
目前每次迭代后,都会将数据返回给驱动程序,然后安排下一个作业。在 Drizzle 项目中,AMPLab/RISELab 创造了一次创建多个作业的可能性,因此数据不会发送给驱动程序。它将创建一次 DAG 并计划,即具有 10 次迭代的作业。它们之间的洗牌将受到限制/根本不存在。目前 DAG 是在每个迭代中创建的,并且计划给执行者的作业
关于 Spark 和 Spark Drizzle 中的资源调度,presentation 非常有用。
我是分布式计算的新手,我正在尝试 运行 使用 Spark 的 mllib kmeans 在 EC2 上进行 Kmeans。在阅读本教程时,我发现了以下代码片段
http://spark.apache.org/docs/latest/mllib-clustering.html#k-means
我无法理解这段代码 运行 在集群中的作用。具体来说,我无法理解以下内容:
将代码提交到master节点后,spark如何知道如何并行化作业?因为似乎没有处理这个的代码部分。
是否将代码复制到所有节点并在每个节点上执行?主节点是否做计算?
节点如何传递每次迭代的部分结果?这是在 kmeans.train 代码中处理的,还是 spark 核心自动处理的?
- Spark 将数据划分为多个分区。比如你从HDFS读取一个文件,那么分区应该等于HDFS中数据的分区。您可以通过
repartition(numberOfPartitions)
手动指定分区数。每个分区都可以在单独的节点、线程等上处理。有时数据由 HashPartitioner 分区,它查看数据的哈希值。
分区数和分区大小通常可以告诉您数据是否 distributed/parallelized 正确。创建数据分区隐藏在 RDD.getPartitions
方法中。
资源调度取决于集群管理器。关于它们,我们可以 post 很长 post ;) 我认为在这个问题中,分区是最重要的。如果没有,请告诉我,我会编辑答案。
Spark 序列化作为转换和操作的参数给出的 clusures。 Spark 创建 DAG,发送给所有执行者,执行者在数据上执行这个 DAG——它在每个分区上启动闭包。
目前每次迭代后,都会将数据返回给驱动程序,然后安排下一个作业。在 Drizzle 项目中,AMPLab/RISELab 创造了一次创建多个作业的可能性,因此数据不会发送给驱动程序。它将创建一次 DAG 并计划,即具有 10 次迭代的作业。它们之间的洗牌将受到限制/根本不存在。目前 DAG 是在每个迭代中创建的,并且计划给执行者的作业
关于 Spark 和 Spark Drizzle 中的资源调度,presentation 非常有用。