gpt4 book ai didi

java - Spark foreachPartition 仅在 master 上运行

转载 作者:行者123 更新时间:2023-11-29 04:08:25 25 4
gpt4 key购买 nike

我有一个 DataProc 集群,其中有一个 master 和 4 个 worker。我有这个 Spark 工作:

JavaRDD<Signal> rdd_data = javaSparkContext.parallelize(my_data, 8);

rdd_data.foreachPartition(partitionOfRecords -> {
println("Items in partition-" + partitionOfRecords.count(y=>true));
})

其中 my_data 是一个包含大约 1000 个元素的数组。集群上的作业以正确的方式启动并返回正确的数据,但它只在 master 上运行而不在 worker 上运行。我为集群中的每台机器使用 dataproc image 1.4

谁能帮我理解为什么这个作业只在 master 上运行?

最佳答案

这里有两个兴趣点:

  1. println("Items in partition-"+ partitionOfRecords.count(y=>true)); 行将仅在执行者与执行者是同一节点的情况下打印预期结果运行 Spark 程序的客户端。发生这种情况是因为 println 命令在后台使用标准输出流,它只能在同一台机器上访问,因此来自不同节点的消息无法传播到客户端程序。
  2. 当您将 master 设置为 local[1] 时,您会强制 Spark 使用一个线程在本地运行,因此 Spark 和客户端程序使用相同的标准输出流,并且您能够看到程序输出。这也意味着驱动程序和执行程序是同一个节点。

关于java - Spark foreachPartition 仅在 master 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56706234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com