0

我正在尝试了解如何使用 Spark-GraphX,但总是遇到一些问题,所以也许有人可以建议我阅读什么等。我尝试阅读 Spark 文档和 Learning Spark - O'Reilly Media 书籍,但找不到任何解释我们需要多少内存来处理不同大小的网络等。

对于我的测试,我使用了几个示例数据集。我在 Spark shell 的 1 个主节点(~16Gb RAM)上运行它们:

./bin/spark-shell --master spark://192.168.0.12:7077 --executor-memory 2900m --driver-memory 10g

和 3-5 名工人(每 1 台独立机器 1 名工人,具有 4Gb RAM):

./bin/spark-class org.apache.spark.deploy.worker.Worker spark://192.168.0.12:7077

然后从 Spark Shell 我运行我的 scala 脚本(未编译):

:load /home/ubuntu/spark-1.2.1/bin/script.scala

我还没有使用 HDFS,只是将数据集文件复制到每台机器上(当然路径名相同)。在像 zachary club 这样的小型网络上,甚至更大的 ~256 Mb 网络上(在增加驱动程序内存参数之后)我能够计算三角形、楔形等。

现在尝试处理 750+ Mb 网络并出现错误。例如,我有 2 列格式的 Wikipedia 链接数据集(link_from link_to),750Mb。尝试加载它:

val graph = GraphLoader.edgeListFile(sc, "graphx/data/dbpidia")

并得到一个错误:

[Stage 0:==============================================>     (22 + 1) / 23]
15/04/30 22:52:46 WARN TaskSetManager: Lost task 22.0 in stage 0.0 (TID 22, host-192-168-0-18.openstacklocal): java.lang.ArrayIndexOutOfBoundsException: 1
at org.apache.spark.graphx.GraphLoader$$anonfun$1$$anonfun$apply$1.apply(GraphLoader.scala:83)
at org.apache.spark.graphx.GraphLoader$$anonfun$1$$anonfun$apply$1.apply(GraphLoader.scala:76)
at scala.collection.Iterator$class.foreach(Iterator.scala:727)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
at org.apache.spark.graphx.GraphLoader$$anonfun$1.apply(GraphLoader.scala:76)
at org.apache.spark.graphx.GraphLoader$$anonfun$1.apply(GraphLoader.scala:74)
at org.apache.spark.rdd.RDD$$anonfun$15.apply(RDD.scala:631)
at org.apache.spark.rdd.RDD$$anonfun$15.apply(RDD.scala:631)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:280)
at org.apache.spark.CacheManager.getOrCompute(CacheManager.scala:61)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:245)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:61)
at org.apache.spark.scheduler.Task.run(Task.scala:56)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:200)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
15/04/30 22:52:47 WARN TaskSetManager: Lost task 22.2 in stage 0.0 (TID 24, host-192-168-0-18.openstacklocal): java.lang.ArrayIndexOutOfBoundsException

实际上,我需要使用大小为 >>1Tb 的数据集,但即使在较小的数据集上也会出错。我究竟做错了什么?内存限制是多少?您可以为 >>1Tb 文件提出什么策略,如何更好地存储它们?谢谢。

4

1 回答 1

0

这可能是 GraphX 的一个错误

https://issues.apache.org/jira/browse/SPARK-5480

我和你有同样的问题。它适用于小型数据集。当数据大小变大时,spark 会抛出ArrayIndexOutOfBoundsException错误

于 2015-05-18T06:14:50.210 回答