Einführung in die glutenbeschleunigte Spark-Engine

Gluten beschleunigte Spark-Motor ist ein optimierter, leistungsstarker Motor in watsonx.data. Die Spark-Engine verwendet Gluten, um die SQL-Ausführung an Velox auszulagern. Velox ist eine Open-Source-Ausführungsengine (implementiert in C++), die die Berechnung von SparkSQL beschleunigt, um die Kosten für die Ausführung der Arbeitslasten zu senken.

Gluten dient als natives Engine-Plugin zur Beschleunigung von Spark SQL- und DataFrame-Workloads durch die Integration nativer Engines mit SparkSQL,, wobei die hohe Skalierbarkeit des Spark SQL-Frameworks und die überlegene Leistung nativer Engines genutzt werden. Es ist vollständig kompatibel mit der Apache Spark API, so dass keine Änderungen am Code erforderlich sind.

Merkmale des beschleunigten Spark-Motors von Gluten

  • Unterstützt die Dateiformate Apache Parquet und Apache Avro.

  • Die Leistung der Tabellensuche wurde verbessert.

  • Beschleunigt größere SQL-Abfragen mit Joins und Aggregation.

  • Unterstützt die Kataloge Delta, Hudi, Iceberg und Hive.

  • Schnelleres Schreiben von Delta und Parquet mit UPDATE, DELETE, MERGE INTO, INSERT und CREATE TABLE AS SELECT, auch für breite Tabellen mit Tausenden von Spalten.

  • Ersetzt Sort-Merge-Joins standardmäßig durch Hash-Joins.

Einschränkungen

  • Bei der Verwendung von Amazon S3 unterstützen Objektspeicher DAS für die Antragstellung, aber bei anderen Objektspeichern wie ADLS und GCS müssen explizite Anmeldedaten übergeben werden.

  • Kleinere Abfragen werden nicht beschleunigt.

  • Die Katalogzuordnung wird nur für s3 Objektspeicher unterstützt.

  • Rückgriffe auf JVM

    • ANSI: Der ANSI-Modus wird von Gluten derzeit nicht unterstützt. Wenn ANSI aktiviert ist, wird die Ausführung des Spark-Plans immer auf Vanilla Spark zurückgreifen.

    • FileSource format: Derzeit unterstützt Gluten nur das Parquet-Dateiformat und teilweise ORC. Wenn ein anderes Format verwendet wird, fällt der Scan-Operator auf Vanilla Spark zurück.

  • Inkompatibles Verhalten

    • JSON-Funktionen: Velox unterstützt nur von doppelten Anführungszeichen umgebene Zeichenketten, nicht aber einfache Anführungszeichen in JSON-Daten. Wenn einfache Anführungszeichen verwendet werden, liefert Gluten ein falsches Ergebnis.

    • Parkett-Lesekonfiguration: Gluten unterstützt spark.files.ignoreCorruptFiles mit der Voreinstellung false, wenn true, ist das Verhalten dasselbe wie bei config false. Gluten ignoriert spark.sql.parquet.datetimeRebaseModeInRead, es gibt nur das zurück, was in der Parkettdatei steht. Der Unterschied zwischen dem alten hybriden (julianisch-gregorianischen) Kalender und dem proleptisch-gregorianischen Kalender wird dabei nicht berücksichtigt. Das Ergebnis kann bei Vanillefunken anders ausfallen.

    • Parkett-Schreibkonfiguration: Spark hat spark.sql.parquet.datetimeRebaseModeInWrite konfiguriert, um zu entscheiden, ob der alte hybride (julianische + gregorianische) Kalender oder der proleptische gregorianische Kalender während des Parkettschreibens für Daten/Zeitstempel verwendet werden soll. Wenn das zu lesende Parquet von Spark mit dieser Konfiguration als true geschrieben wird, wird Velox's TableScan ein anderes Ergebnis ausgeben, wenn es zurück gelesen wird.

  • Verschüttung

    OutOfMemoryException kann bei der derzeitigen Implementierung der Funktion "Spill-to-Disk" immer noch ausgelöst werden, wenn "Shuffle Partitions" auf eine große Anzahl eingestellt ist. Wenn dieser Fall eintritt, versuchen Sie bitte, die Anzahl der Partitionen zu verringern, um das OOM zu beseitigen.

  • CSV lesen

    • Die Option header sollte true sein. Und jetzt unterstützen wir nur DatasourceV1, d.h. der Benutzer sollte spark.sql.sources.useV1SourceList=csv einstellen. Die benutzerdefinierte Leseoption wird nicht unterstützt, so dass das CSV-Lesen in den meisten Fällen auf Vanilla Spark zurückfällt. Beim Lesen von CSV-Dateien wird auch auf Vanilla Spark zurückgegriffen und eine Warnung protokolliert, wenn das vom Benutzer angegebene Schema nicht mit dem Dateischema übereinstimmt.

    • Ausführlichere Informationen zu den Einschränkungen von Gluten finden Sie unter Einschränkung.

  • Gluten wird für FIPS-aktivierte Umgebungen nicht unterstützt.

Bewährte Praktiken für Gluten

  • Gluten benötigt einen großen OffHeap Speicher, da es mit dem nativen Backend, d.h. Velox, unter Verwendung des OffHeap Spaltenformats von Apache Arrow integriert ist, was für die Verarbeitung großer Datenmengen ohne Überschreitung der JVM-Heap-Grenzen unerlässlich ist.

  • Wenn nicht genügend offHeap Speicher zur Verfügung steht, kann dies zu potenziellen OOMs führen (siehe Einschränkung ). Daher sind standardmäßig 75 % des Executor-Speichers auf offHeap eingestellt.

  • Die Benutzer können den Prozentsatz des Speichers für offHeap, mit Hilfe der Konfiguration ae.spark.offHeap.factor anpassen, die ausschließlich Werte (0-1) akzeptiert, z. B. 0.75.

  • Es wird empfohlen, diesen Wert auf einen niedrigeren Wert zu setzen, d.h. < 0.5, wenn die Arbeitslast viele Fallbacks zu Java basiertem Spark hat. (siehe Einschränkung ), damit OOM nicht auftritt, wenn auf Java basierte Spark-Ausführung zurückgegriffen wird.

  • Es wird empfohlen, diesen Wert auf einen höheren Wert zu setzen, d.h. 0.75 und höher, wenn ihre Arbeitslasten nativ auf Gluten ohne Fallback ausgeführt werden.

Standardmäßig ist der Wert 0.75 eingestellt.