Apache spark GraphX不适用于相对较大的图形

Apache spark GraphX不适用于相对较大的图形,apache-spark,spark-graphx,Apache Spark,Spark Graphx,我无法处理230M边的图形。 我克隆了apache.spark,构建了它,然后在集群上进行了尝试 我使用Spark独立群集: -5 machines (each has 12 cores/32GB RAM) -'spark.executor.memory' == 25g -'spark.driver.memory' == 3g 图形有231359027条边。其文件重量为4524716369字节。 图形以文本格式表示: sourceVertexId destinationVertexId 我

我无法处理230M边的图形。 我克隆了apache.spark,构建了它,然后在集群上进行了尝试

我使用Spark独立群集:

-5 machines (each has 12 cores/32GB RAM)
-'spark.executor.memory' ==  25g
-'spark.driver.memory' == 3g
图形有231359027条边。其文件重量为4524716369字节。 图形以文本格式表示:

sourceVertexId destinationVertexId
我的代码:

object Canonical {
  def main(args: Array[String]) {
    val numberOfArguments = 3
    require(args.length == numberOfArguments, s"""Wrong argument number. Should be $numberOfArguments . 
                                                                           |Usage: <path_to_grpah> <partiotioner_name> <minEdgePartitions> """.stripMargin)
    var graph: Graph[Int, Int] = null
    val nameOfGraph = args(0).substring(args(0).lastIndexOf("/") + 1)
    val partitionerName = args(1)
    val minEdgePartitions = args(2).toInt
    val sc = new SparkContext(new SparkConf()
                       .setSparkHome(System.getenv("SPARK_HOME"))
                       .setAppName(s" partitioning | $nameOfGraph | $partitionerName | $minEdgePartitions parts ")
                       .setJars(SparkContext.jarOfClass(this.getClass).toList))
    graph = GraphLoader.edgeListFile(sc, args(0), false, edgeStorageLevel = StorageLevel.MEMORY_AND_DISK,
                                                       vertexStorageLevel = StorageLevel.MEMORY_AND_DISK, minEdgePartitions = minEdgePartitions)
    graph = graph.partitionBy(PartitionStrategy.fromString(partitionerName))
    println(graph.edges.collect.length)
    println(graph.vertices.collect.length)
  }
}

而且收集所有顶点和边来计算它们也不是个好主意。这样做很容易:
graph.vertices.count
graph.edges.count

我建议您进行二进制搜索,以找到集群可以处理的最大数据大小。拿50%的图表,看看是否有效。如果有,试试75%。等等

我的经验法则是,对于给定大小的输入,您需要20–30倍的内存。对于4.5 GB,这表明限制在100 GB左右。你正好有那么多钱。我没有使用GraphX的经验:它可能会为内存使用增加另一个乘数。在我看来,你就是没有足够的记忆力

-4 workers (each has 12 cores/32GB RAM)
-1 master with driver program (each has 12 cores/32GB RAM)
-'spark.executor.memory' ==  25g
-'spark.driver.memory' == 25g