2017-04-04 6 views
0

Wir haben einen Apache Spark 1.4.0 Cluster und wir möchten Daten aus einem Satz von 350 Parkett-Datei von HDFS laden. Derzeit, wenn wir versuchen, unser Programm auszuführen, erhalten wir eine "OutOfMemory Error" Treiberseite. Bei der Profilerstellung sowohl eines Executors als auch des Treibers ist uns aufgefallen, dass der Executorspeicher während der Operation konstant bleibt, wenn der Treiberspeicher ständig zunimmt. Für jede Parkett Datei wir Daten zu laden, wie folgt:OOM laden Daten von Parkett

sqlContext.read().format(PARQUET_OUT_TYPE).load("path").toJavaRDD(mappingFunction) 

und danach, verbinden wir die RDDs von „Vereinigung“ und dann verschmelzen wir sie

partitions.reduce((r1,r2) -> r1.union(r2).coalesce(PARTITION_COUNT)) 

Was mir wirklich seltsam aussieht, dass der Executorspeicher während der Ladephase konstant bleibt (wenn ich erwarte, dass er wegen der vom Knoten gelesenen Daten zunimmt) und der Treiberspeicher ständig zunimmt (wenn ich erwarte, dass er konstant bleibt, weil er nicht geladen werden sollte) der Treiberspeicher).

Ist mit der Art, wie wir Daten laden, etwas nicht in Ordnung? Könnten Sie mir bitte erklären, wie man Daten aus Parkett parallel liest?

Dank

Antwort

0

die OOM wurde durch die Daten nicht durch das Parkett Metadaten verursacht.

Dank