2017-11-22 2 views
2

Ich habe 2 gzip-Dateien mit jeweils etwa 30 GB Größe und haben Funken Code geschrieben, um sie zu analysieren. Der Funke-Cluster hat 4 Arbeiterknoten (28 GB RAM und 4 Kerne) und 2 Kopfknoten (64 GB RAM).Lesen von großen gz-Dateien in Spark

Ich verwende sc.textFile(histfile,20), um diese 2 gzip-Dateien zu lesen und sie parallel zu machen. Der Job ist in 3 Stufen unterteilt: reduceByKey, reduceByKey und saveAsTextFile. Da es 2 Dateien gibt, werden nur 2 Arbeiter verwendet.

Es hat mehr als 4 Stunden gedauert und die 1. Stufe ist noch nicht fertig. Was ist der richtige Weg, um Spark-Jobs zu starten, wenn jede gzip-Datei 100GB-200GB groß ist.

Antwort

2

Die gzip-Datei ist nicht splitfähig, daher wird Ihre erste Stufe zwei Map-Aufgaben erzeugen und es wird viel Zeit in Anspruch nehmen, bis die erste Stufe passiert ist.

Bitte Partitionierung vor der zweiten Phase für eine gute Verteilung, um die Aufgabe zu reduzieren.

+0

Danke, die num.executor.instances ist als 20 gesetzt. Ist 'sc.textFile (file, numpartition)' nicht partitionieren und Parallelität erreichen? – vkb

+0

Die Eingabeformate von Spark stammen von Hadoop. numpartition wird nur bei teilbaren Dateien wirksam. In Ihrem Fall gibt es keine Aufspaltung, daher numpartitions ist nicht von Nutzen. Sie können die num-Aufgabe in Stufe 1 anzeigen, um sie zu überprüfen. – KrazyGautam

Verwandte Themen