未在GCE中使用的工作节点

时间:2018-04-02 18:49:52

标签: apache-spark google-compute-engine google-cloud-dataproc

在google-cloud-dataproc上运行我的spark作业时,我注意到只使用了主节点,并且所有工作节点的CPU利用率几乎为零(0.8%左右)。我既使用GUI也使用控制台来运行代码。您是否知道可能导致此问题的任何具体原因以及如何充分利用工作节点?

我以下列方式提交工作:

gcloud dataproc作业提交spark --properties spark.executor.cores = 10 --cluster cluster-663c --class ComputeMST --jars gs://kslc/ComputeMST.jar --files gs:// kslc / SIFT_full .txt - SIFT_full.txt gs:// kslc / SIFT_fu ll.txt 5.0 12



	while(true){

	level_counter++;

	if(level_counter > (number_of_levels - 1)) break;
	
	System.out.println("LEVEL = " + level_counter);
	
	JavaPairRDD<ArrayList<Integer>, epsNet> distributed_msts_logn1 = distributed_msts_logn.mapToPair(new next_level());
	
	JavaPairRDD<ArrayList<Integer>, epsNet> distributed_msts_next_level = distributed_msts_logn1.reduceByKey(new union_eps_nets());

	den = den/2;
	
	distributed_msts_logn = distributed_msts_next_level.mapValues(new unit_step_logn(den, level_counter));		
	}

	JavaRDD<epsNet> epsNetsRDDlogn =  distributed_msts_logn.values();

	List<epsNet> epsNetslogn = epsNetsRDDlogn.collect(); 	
&#13;
&#13;
&#13;

以上是代码,我正在尝试运行。

1 个答案:

答案 0 :(得分:1)

您在驱动程序中正在执行collect()。你想要实现什么目标?执行收集肯定会破坏主节点资源,因为驱动程序将在此处收集结果。通常你想要将数据摄取到spark中(使用读取或并行化的spark上下文),进行内存map-reduce(转换),然后将数据从spark世界中取出(例如,将镶木地板写入hdfs)以进行任何收集相关的东西。 另外,请确保通过spark UI,您拥有所请求的具有给定内核和内存的所有执行程序。