我有一个DataProc集群,其中有一个主机和4个工人。 我有这份火花工作:
JavaRDD<Signal> rdd_data = javaSparkContext.parallelize(my_data, 8);
rdd_data.foreachPartition(partitionOfRecords -> {
println("Items in partition-" + partitionOfRecords.count(y=>true));
})
my_data是一个包含约1000个元素的数组。 群集上的作业以正确的方式启动并返回正确的数据,但它仅在主服务器上运行,而不在工作线程上运行。 我在集群中的每台计算机上都使用了dataproc image 1.4
任何人都可以帮助我理解为什么这项工作只能在master上进行吗?
答案 0 :(得分:2)
这里有两个景点:
println("Items in partition-" + partitionOfRecords.count(y=>true));
将显示预期结果。发生这种情况是因为println
命令在幕后使用stdout流,该流只能在同一台机器上访问,因此无法将来自不同节点的消息传播到客户端程序。答案 1 :(得分:1)
我在额外的Spark配置中找到了master local [1]!现在它可以正常工作了!