2015-08-20 4 views
5

Enthält Spark SQL eine Tabellen-Streaming-Optimierung für Joins und, wenn ja, wie entscheidet es, welche Tabelle zu streamen ist?Enthält Spark SQL eine Tabellen-Streaming-Optimierung für Joins?

Beim Helfen nimmt Hive an, dass die letzte Tabelle die größte ist. Als Join-Optimierung wird versucht, die kleineren Join-Tabellen zwischenzuspeichern und den letzten zu streamen. Wenn die letzte Tabelle in der Verknüpfungsliste nicht die größte ist, hat Hive den /*+ STREAMTABLE(tbl) */-Hinweis, der die Tabelle angibt, die gestreamt werden soll. Ab Version 1.4.1 unterstützt Spark SQL den STREAMTABLE-Hinweis nicht.

Diese Frage wurde für die normale RDD-Verarbeitung außerhalb von Spark SQL, here gestellt. Die Antwort gilt nicht für Spark SQL, wo der Entwickler keine Kontrolle über explizite Cache-Operationen hat.

Antwort

3

Ich habe vor einiger Zeit nach einer Antwort auf diese Frage gesucht und konnte nur einen Parameter festlegen, der standardmäßig 10 MB ist. Es wird dann versuchen, alle Tabellen automatisch mit einer Größe zu senden, die kleiner als das von Ihnen festgelegte Limit ist. Join Order spielt für diese Einstellung keine Rolle.

Wenn Sie die Join-Performance weiter verbessern möchten, empfehle ich Ihnen dringend, this presentation.

1

Dies ist die bevorstehende Spark-2.3 hier (RC2 für die nächste Version gewählt wird).

Ab Version 1.4.1 unterstützt Spark SQL den STREAMTABLE-Hinweis nicht.

Es ist nicht in der neuesten (und stimmte bald freigegeben werden) Spark 2.3 entweder.

Es gibt keine Unterstützung für STREAMTABLE Hinweis, aber angesichts der jüngsten Änderung (in SPARK-20857 Generic resolved hint node), um ein Hinweis-Framework zu erstellen, sollte ziemlich einfach zu schreiben sein.

Sie müssten einige Spark-Optimierungen und möglicherweise physische Pläne schreiben, die STREAMTABLE unterstützen würden (was wie eine Menge Arbeit aussieht), aber es ist möglich. Die Werkzeuge sind da.

Optimierungen In Bezug auf beitreten, in der kommenden Spark-2.3 gibt es zwei logische Optimierungen:

  1. ReorderJoin
  2. CostBasedJoinReorder (ausschließlich für die kostenbasierte Optimierung)