2016-05-12 5 views
0

Ich habe mich über die Phasen des Katalysatoroptimierers informiert, aber ich habe Zweifel, wie die drei ersten Phasen in der Praxis funktionieren.Katalysatoroptimierer Phasen

In der ersten Phase (Analysephase) erstellt der Otimizer einen logischen Plan der Abfrage. Aber hier sind die Spalten nicht aufgelöst, deshalb muss dafür ein Katalogobjekt verwendet werden.

Zweifel: Wissen Sie, wie dieses Katalogobjekt funktioniert, also lösen Sie das. Wenn wir beispielsweise Abfragen über Hive-Tabellen ausführen, stellt der Optimierer eine Verbindung zu den Hivetables in hdfs her, um die Spalten aufzulösen?

In der zweiten Phase (Logikoptimierung) wendet der Otimizer Standardregeln auf den logischen Plan an, wie Konstantenfaltung, Prädikat-Pushdowns und Projektbereinigung.

Doubt: Im Versuch, Beispiele zu finden, besser zu verstehen, welche Funken wirklich in dieser Phase der Fall ist, wie konstantes Falten, Prädikat pushsdown und Projekt Beschneiden Dinge helfen, die Abfrage aber ich bin nicht der Suche nichts Konkretes über diese zu optimieren.

In der dritten Phase (physische Planung) übernimmt Spark den logischen Plan und generiert einen oder mehrere physische Pläne mit physischen Operatoren, die der Spark-Ausführungsmaschine entsprechen.

Zweifel: Verstehst du diesen Teil "mit physikalischen Operatoren, die die Funke-Ausführung-Engine"?

Antwort

1

Wissen Sie, wie dieses Katalogobjekt funktioniert, um das zu lösen, zum Beispiel, wenn wir Abfragen über Hive-Tabellen ausführen, verbindet sich der Optimierer mit den Hivetables in hdfs, um die Spalten aufzulösen?

Hier gibt es keine Antwort. Der Basiskatalog ist SessionCatalog, der nur als Proxy für tatsächliche ExternalCatalog dient. Spark stellt zwei verschiedene Implementierungen des ExternalCatalog Out-of-the-Box bereit: InMemoryCatalog und HiveExternalCatalog, die den Standards SQLContext bzw. HiveContext entsprechen. Offensichtlich kann der erste Zugriff auf Hive-Metastore erfolgen, ansonsten sollte kein Datenzugriff möglich sein.

in funken 2.0+ Katalog kann direkt beispielsweise unter Verwendung SparkSession.catalog abgefragt werden:

val df = Seq(("a", 1), ("b", 2)).toDF("k", "v") 
// df: org.apache.spark.sql.DataFrame = [k: string, v: int] 

spark.catalog.listTables 
// org.apache.spark.sql.Dataset[org.apache.spark.sql.catalog.Table] = 
// [name: string, database: string ... 3 more fields] 

Konstantenfaltung

Diese nicht in einer bestimmten Art und Weise spezifisch für Katalysator ist. Es ist nur ein standard compilation technique und seine Vorteile sollten offensichtlich sein. Es ist besser Ausdruck zu berechnen, einmal als dies für jede Zeile wiederholen

Prädikat Pushdown-

Prädikate zu WHERE Klausel entsprechen in der SQL-Abfrage. Wenn diese direkt von einem externen System (like relational database) oder zur Partitionierung (wie in Parquet) verwendet werden können, bedeutet dies eine reduzierte Menge an Daten, die von der Platte übertragen/geladen werden müssen.

und Projekt Beschneiden

Vorteile sind so ziemlich das gleiche wie für Prädikat Pushdown-. Wenn einige Spalten nicht verwendet werden, kann die nachgelagerte Datenquelle dies beim Lesen verwerfen.

Wollen Sie diesen Teil verstehen Abstraktion physischen Operatoren

DataFrame ist nur ein hohes Niveau. Intern müssen Operationen in Basisoperationen auf RDDs übersetzt werden, normalerweise eine Kombination von mapPartitions.

+0

Vielen Dank für Ihre Antwort. Ich habe nur Zweifel über Prädikat Pushdown, so scheint es, dass es hilft, die Menge der Daten über das Netzwerk zu reduzieren. Es geht also nur darum, die where-Klausel zu verwenden, damit wir die Ergebnisse filtern können und folglich der Umfang der Datenübertragung über das Netzwerk geringer ist? – codin

+0

Ich würde sagen, IO im Allgemeinen zu reduzieren. – zero323

Verwandte Themen