Apache spark 为什么spark将所有数据分区到一个执行器中?

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 GraphX合作。我正在从一个文件(大约620MB、50K个顶点和近5000万条边)构建一个图形。我使用的是一个spark集群:4个工人,每个工人有8个内核和13.4g的ram,1个相同规格的驱动程序。当我将我的.jar提交到集群时,随机地有一个工作者加载集群上的所有数据。计算所需的所有任务都被请求给该工作者。在计算过程中,其余三个什么也不做。我已经尝试了所有的方法,但我没有发现任何可以强迫所有工人进行计算的方法

当Spark构建图形时,我会查找RDD顶点的分区数,比如说5个,但是如果我重新分区RDD,例如32个(总的核心数),Spark会在每个工作进程中加载数据,但计算速度会变慢

我通过以下方式启动spark submit:

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()提供执行计划吗?