performance - länge - title tag wordpress



Wie tritt man großen Datenrahmen in Spark SQL bei?(Best Practices, Stabilität, Leistung) (1)

Das sind viele Fragen. Erlaube mir, diese eins nach dem anderen zu beantworten:

Die Anzahl der Executoren ist in einer Produktionsumgebung meistens variabel. Dies hängt von den verfügbaren Ressourcen ab. Die Anzahl der Partitionen ist wichtig, wenn Sie Shuffles durchführen. Unter der Annahme, dass Ihre Daten jetzt verzerrt sind, können Sie die Belastung pro Aufgabe verringern, indem Sie die Anzahl der Partitionen erhöhen. Eine Aufgabe sollte idealerweise ein paar Minuszeichen enthalten. Wenn die Aufgabe zu lange dauert, ist es möglich, dass Ihr Container vorweggenommen wird und die Arbeit verloren geht. Wenn die Aufgabe nur wenige Millisekunden dauert, wird der Overhead beim Starten der Aufgabe dominant.

Das Niveau der Parallelität und Tuning Ihrer Executor-Größen, möchte ich auf die hervorragende Anleitung von Cloudera verweisen: https://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark- Jobs-Teil-2 /

ORC und Parquet codieren nur die Daten im Ruhezustand. Wenn Sie den tatsächlichen Join ausführen, befinden sich die Daten in dem Speicherformat von Spark. Parkett wird immer populärer, seit Netflix und Facebook es angenommen haben und sich sehr viel Mühe gegeben haben. Parquet ermöglicht es Ihnen, die Daten effizienter zu speichern und hat einige Optimierungen (Prädikat Pushdown), die Spark verwendet.

Sie sollten den SQLContext anstelle des HiveContext verwenden, da der HiveContext veraltet ist. Der SQLContext ist allgemeiner und funktioniert nicht nur mit Hive.

Wenn Sie die registerTempTable ausführen, werden die Daten in SparkSession gespeichert. Dies hat keinen Einfluss auf die Ausführung des Joins. Es speichert nur den Ausführungsplan, der aufgerufen wird, wenn eine Aktion ausgeführt wird (zum Beispiel saveAsTable ). Bei der Ausführung einer saveAsTable die Daten im verteilten Dateisystem gespeichert.

Hoffe das hilft. Ich würde auch vorschlagen, dass wir unseren Vortrag auf dem Spark Summit über das Treffen von Joins verfolgen : https://www.youtube.com/watch?v=6zg7NTw-kTQ . Dies könnte Ihnen einige Einblicke geben.

Prost, Fokko

Ich erhalte den gleichen Fehler, als wenn ich einen Ausgabeplatz für Shuffle bei großen Datenfeldern in Spark SQL verpasse. Die Empfehlung dort ist MEMORY_AND_DISK und / oder spark.shuffle.memoryFraction 0 zu setzen . Allerdings ist spark.shuffle.memoryFraction in Spark> = 1.6.0 veraltet und die Einstellung von MEMORY_AND_DISK sollte nicht helfen, wenn ich keine RDD oder Dataframe cache, nicht wahr? Außerdem bekomme ich viele andere WARN-Logs und Task-Wiederholungen, die mich glauben machen lassen, dass der Job nicht stabil ist.

Daher ist meine Frage:

  • Was sind Best Practices, um in Spark SQL> = 1.6.0 großen Datenfeldern beizutreten?

Spezifischere Fragen sind:

  • Wie kann man die Anzahl der Executoren und spark.sql.shuffle.partitions einstellen , um eine bessere Stabilität / Performance zu erreichen?
  • Wie findet man die richtige Balance zwischen Parallelitätsebene ( Anzahl der Executoren / Kerne) und Anzahl der Partitionen ? Ich habe festgestellt, dass das Erhöhen der Anzahl von Executoren nicht immer die Lösung ist, da es wegen Netzwerkverkehr I / O-Lese-Timeout- Ausnahmen generieren kann.
  • Gibt es noch einen anderen relevanten Parameter für diesen Zweck?
  • Meines Wissens nach verbindet das Verbinden von Daten, die als ORC oder Parkett gespeichert sind, eine bessere Leistung als Text oder Avro für Join-Operationen. Gibt es einen signifikanten Unterschied zwischen Parkett und ORC?
  • Gibt es einen Vorteil von SQLContext gegenüber HiveContext in Bezug auf Stabilität / Leistung für Join-Vorgänge?
  • Gibt es einen Unterschied in Bezug auf Leistung / Stabilität, wenn die an der Verknüpfung beteiligten Datenrahmen zuvor registerTempTable () oder saveAsTable () waren ?

Soweit benutze ich das als Antwort und dieses Kapitel als Ausgangspunkt. Und es gibt ein paar mehr stackoverflow-Seiten zu diesem Thema. Ich habe jedoch keine umfassende Antwort auf dieses beliebte Thema gefunden.

Danke im Voraus.





spark-dataframe