2015-05-04 68 views
0

我想了解如何使用Spark-GraphX,但始終存在一些問題,所以也許有人可以建議我讀什麼等。我試着閱讀Spark文檔和學習Spark - O'Reilly Media的書,但找不到任何解釋我們需要多少內存來處理不同大小的網絡等。Apache Spark GraphX java.lang.ArrayIndexOutOfBoundsException

對於我的測試,我使用了幾個示例數據集。 I 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 

然後從星火殼牌我跑我斯卡拉腳本(未編譯):

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

我不使用HDFS的是,剛纔複製的數據集文件到每臺機器(當然是有相同的路徑名)。像扎卡里俱樂部或更大〜256個MB網絡小型網絡(增加駕駛員記憶參數)之後,我能算三角形,楔形等

現在試圖解決750個+ MB網絡和有誤差。例如,我有維基百科鏈接數據集,格式爲2列(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文件,如何更好地存儲它們? 謝謝。

+1

數據集公開可用嗎?它看起來像數據中可能有一個不好的頂點引用。你有沒有嘗試加載文件到RDD [(String,String)],然後解析它到邊緣? – BradRees

回答