Apache spark 为什么spark将所有数据分区到一个执行器中?
我正在与Spark GraphX合作。我正在从一个文件(大约620MB、50K个顶点和近5000万条边)构建一个图形。我使用的是一个spark集群:4个工人,每个工人有8个内核和13.4g的ram,1个相同规格的驱动程序。当我将我的.jar提交到集群时,随机地有一个工作者加载集群上的所有数据。计算所需的所有任务都被请求给该工作者。在计算过程中,其余三个什么也不做。我已经尝试了所有的方法,但我没有发现任何可以强迫所有工人进行计算的方法 当Spark构建图形时,我会查找RDD顶点的分区数,比如说5个,但是如果我重新分区RDD,例如32个(总的核心数),Spark会在每个工作进程中加载数据,但计算速度会变慢 我通过以下方式启动spark submit:Apache spark 为什么spark将所有数据分区到一个执行器中?,apache-spark,spark-graphx,Apache Spark,Spark Graphx,我正在与Spark GraphX合作。我正在从一个文件(大约620MB、50K个顶点和近5000万条边)构建一个图形。我使用的是一个spark集群:4个工人,每个工人有8个内核和13.4g的ram,1个相同规格的驱动程序。当我将我的.jar提交到集群时,随机地有一个工作者加载集群上的所有数据。计算所需的所有任务都被请求给该工作者。在计算过程中,其余三个什么也不做。我已经尝试了所有的方法,但我没有发现任何可以强迫所有工人进行计算的方法 当Spark构建图形时,我会查找RDD顶点的分区数,比如说5个
spark-submit --master spark://172.30.200.20:7077 --driver-memory 12g --executor-memory 12g --class interscore.InterScore /root/interscore/interscore.jar hdfs://172.30.200.20:9000/user/hadoop/interscore/network.dat hdfs://172.30.200.20:9000/user/hadoop/interscore/community.dat 111
代码如下:
object InterScore extends App{
val sparkConf = new SparkConf().setAppName("Big-InterScore")
val sc = new SparkContext(sparkConf)
val t0 = System.currentTimeMillis
runInterScore(args(0), args(1), args(2))
println("Running time " + (System.currentTimeMillis - t0).toDouble / 1000)
sc.stop()
def runInterScore(netPath:String, communitiesPath:String, outputPath:String) = {
val communities = sc.textFile(communitiesPath).map(x => {
val a = x.split('\t')
(a(0).toLong, a(1).toInt)
}).cache
val graph = GraphLoader.edgeListFile(sc, netPath, true)
.partitionBy(PartitionStrategy.RandomVertexCut)
.groupEdges(_ + _)
.joinVertices(communities)((_, _, c) => c)
.cache
val lvalues = graph.aggregateMessages[Double](
m => {
m.sendToDst(if (m.srcAttr != m.dstAttr) 1 else 0)
m.sendToSrc(if (m.srcAttr != m.dstAttr) 1 else 0)
}, _ + _)
val communitiesIndices = communities.map(x => x._2).distinct.collect
val verticesWithLValue = graph.vertices.repartition(32).join(lvalues).cache
println("K = " + communitiesIndices.size)
graph.unpersist()
graph.vertices.unpersist()
communitiesIndices.foreach(c => {
//COMPUTE c
}
})
}
}
Hello@jmachin您能从Spark UI提供DAG和从df.explain()提供执行计划吗?Hello@jmachin您能从Spark UI提供DAG和从df.explain()提供执行计划吗?