在google-cloud-dataproc上运行我的spark作业时,我注意到只有主节点被利用,所有工作节点的CPU利用率几乎为0% (0.8 %左右)。我同时使用了GUI和控制台来运行代码。您是否知道可能导致这种情况的任何特定原因,以及如何充分利用工作节点?
我以以下方式提交作业:
gcloud dataproc作业提交spark --属性spark.executor.cores=10 --集群集群--663c --class ComputeMST --jar gs://kslc/ComputeMST.jar --文件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();
上面是代码,我正在试着运行。
发布于 2018-04-03 03:43:10
你正在你的驱动程序中做一个collect()。你想要达到什么目的?执行收集肯定会占用您的主节点资源,因为驱动程序将在此处收集结果。通常,您希望将数据摄取到spark中(在spark上下文中使用read或parallelize ),执行内存中的map-reduce (转换),然后从spark世界中提取数据(例如,向hdfs写入拼图),以执行任何与收集相关的事情。此外,通过spark UI确保您具有所需的所有执行器以及给定的内核和内存。
https://stackoverflow.com/questions/49616993
复制相似问题