2016-04-24 15 views
0

Ich versuche, eine große Textdatei von ca. 5GBSpeichern einer großen Datei überschreitet frameLimit

sc.parallelize(cfile.toString() 
    .split("\n"), 1) 
    .saveAsTextFile(new Path(path+".cs", "data").toUri.toString) 

aber ich bekomme immer wieder

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) 

Ich bin jetzt hier seit Ewigkeiten fest. Kann mir jemand hier helfen und erklären, wie ich cfile als Textdatei speichern kann?


Eigenständig/lokal/Garn-Cluster?

  • Yarn Cluster

Speicher/Cores Einstellungen?

  • 1,8 TB
  • 285 Cores

Anzahl der Partitionen?

  • ich zur Zeit die Anzahl der Partitionen 1 bin Einstellung: zum Einstellen der Anzahl der Partitionen

Die betreffenden Codezeilen:

val model = word2vec 
    .setMinCount(minCount.asInstanceOf[Int]) 
    .setVectorSize(arguments.getVectorSize) 
    .setWindowSize(arguments.getContextWindowSize) 
    .setNumPartitions(numW2vPartitions) 
    .setLearningRate(learningRate) 
    .setNumIterations(arguments.getNumIterations) 
    .fit(wordSequence) 

Funken einreichen Argumente:

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 

Antwort

0

Eigenständig/lokal/Garn-Cluster? Speicher/Kerne Einstellungen? Anzahl der Partitionen?

Ihr Fehler wahrscheinlich Symptom, dass einer der Arbeiter sind weg (OOM Killer könnte es getötet oder es habe einige OOM-Fehler)

Ich bin mir nicht sicher, warum Sie dies tun: cfile.toString(). split ("\ n") - von diesem verstehe ich, dass Sie alle 5GB Inhalt im Speicher halten und versuchen, es zu parallelisieren? Klar ist es nicht optimal. Ein anderes Problem, das relevant sein könnte - wenn Ihr Treiber alle 5GB irgendwie im Speicher halten kann, aber trotzdem alle Netzwerkebenen zwischen Treiber-Arbeitern diese Datenmenge nicht mögen - also mein Rat, es in Partitionen aufzuteilen.

Stattdessen können Sie die Datei mit sc.textFile (..) lesen und dann in Ihrem neuen Pfad speichern. Sie können auch die Anzahl der Partitionen (Teile) Ihrer Textdatei mit sc.textFile (..) .partition (100) steuern.

+0

Eigentlich versuche ich ein Wort Vektormodell zu speichern gibt es eine [Spark-Version] (https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark /mllib/feature/Word2Vec.scala#L625) einer 'save()' Methode, die einfach nicht funktioniert und ich habe keine Ahnung warum. Ich habe die Benutzergruppe kontaktiert, aber seitdem keine Antwort erhalten. Aus diesem Grund dachte ich, ich könnte mein Modell einfach als CSV-Datei speichern und diese scheinbar kaputte Implementierung umgehen. Ich werde meine Frage mit Ihren angeforderten Informationen aktualisieren. – displayname

+0

Das Treiberprogramm hat eigentlich 20 GB RAM, es ist das gleiche für jeden der 8 Arbeiter, die ich gerade benutze. – displayname

+0

Wie haben Sie das Modell in cfile konvertiert?Ich meine, nehmen wir an Modell ist eine Art von RDD und Sie möchten es als Text speichern, so können Sie diese RDD zu RDD der Zeichenfolgen parallel (ohne alles zum Treiber zu bringen, wie Sie wahrscheinlich tun) und dann zu hdfs speichern auch in Parallel –

Verwandte Themen