So habe ich einen Apache Spark-Stream, der alle 20 Minuten nach Tag und Stunde in S3 Parkett Dateien Partition schreibt.
Es scheint, dass jeder Stapel vor dem Schreiben "ls" und "head" in allen Ordnern dieses Tabellenname (/ root-Ordners) ausführt.Spark schreiben in Datei mit append an s3 - Kosten Problem
Da wir mehrere Tage X 24 Stunden X verschiedene Tabellen haben, verursacht dies insgesamt relativ hohe S3-Kosten.
Bitte beachten Sie, dass unser Schema dynamisch geändert wird.
So sind meine Fragen:
es richtig ist, dass die die Schreibvorgänge alle Parkett Kopf rekursiv lesen?
Warum der Stream diese Informationen nicht zwischenspeichert/Ist es möglich, sie zwischenzuspeichern?
Können Sie die Best Practice vorschlagen?
// Code über:
withPartition.write()
.format(format)
.mode(SaveMode.Append)
.partitionBy("day","hour")
.save(path);
Es scheint, dass dieses Problem zu zusammenhängt:
https://issues.apache.org/jira/browse/SPARK-20049
Spark partitionBy much slower than without it