我尝试保存大约一个大文本文件。 5GB
sc.parallelize(cfile.toString()
.split("\n"), 1)
.saveAsTextFile(new Path(path+".cs", "data").toUri.toString)
但我一直在
java.io.IOException: Broken pipe
at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:65)
...
org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 6
at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$2.apply(MapOutputTracker.scala:542)
at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$2.apply(MapOutputTracker.scala:538)
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:772)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
我现在已经被困在这里多年了。有人可以帮助我解释如何将cfile
保存为文本文件吗?
独立/本地/纱线群?
内存/内核设置?
分区数量?
1
:用于设置分区数的相关代码行:
val model = word2vec
.setMinCount(minCount.asInstanceOf[Int])
.setVectorSize(arguments.getVectorSize)
.setWindowSize(arguments.getContextWindowSize)
.setNumPartitions(numW2vPartitions)
.setLearningRate(learningRate)
.setNumIterations(arguments.getNumIterations)
.fit(wordSequence)
spark-submit 参数:
spark-submit --master yarn
--deploy-mode cluster
--driver-memory 20G
--num-executors 5
--executor-cores 8
--driver-java-options "-Dspark.akka.frameSize=2000"
--executor-memory 20G --class
答案 0 :(得分:0)
独立/本地/纱线群集? 内存/核心设置? 分区数量?
您的错误可能是其中一名工人失踪的原因(OOM杀手可能已将其杀死或出现OOM错误)
我不确定你为什么要这样做:cfile.toString()。split(“\ n”) - 从这个我明白你在内存中保存所有5GB内容并尝试并行化它?显然它不是最佳的。 另一个可能相关的问题 - 如果你的驱动程序可以以某种方式保存内存中的所有5GB,但驱动程序工作者之间的所有网络层仍然不喜欢这些数据 - 所以我建议将其拆分为分区。
您可以使用sc.textFile(..)读取文件,然后将其保存到新路径中。您还可以使用sc.textFile(..)。repartition(100)控制文本文件的分区数(片段数)。