2017-11-09 2 views
-1

Unser Anwendungsfall ist eine enge Tabelle (15 Felder), aber große Verarbeitung gegen den gesamten Datensatz (Milliarden von Zeilen). Ich frage mich, welche Kombination eine bessere Leistung bietet:Spark auf Parkett vs Funken auf Hive (Parkett Format)

env: CDH5.8/Funken 2,0

  1. Funken auf Hive Tabellen (als Format von Parkett)
  2. Funken auf Zeilendateien (Parkett)
+0

Es gibt bekannte Probleme über Scala-Lambdas, die langsamer sind als SparkSQL-Ausdrücke (die skalare Typen direkt verwenden, kein Roundtrip zu Objects), aber es ist normalerweise marginal. Der ORC-Vektor-Leser ist für Spark 2.3 geplant, wenn ich mich gut erinnere, während Parquet bereits die Vektorisierung unterstützt. Anders als das ... Ich bin ein alter SQL-Benutzer, der scala portmanteau Ausdrücke lächerlich findet, wie so viele Würstchen Saiten, aber das ist meine persönliche Meinung (Set-basierte Semantik, Baby!) –

+1

SparkSQL auf Row-Dateien (Parkett oder ORC) . Was meinst du mit Row-Dateien? Orc ist säulenartiger Speicher rechts – Achyuth

Antwort

0

ohne zusätzlichen Kontext Ihrer spezifischen Produkt und usecase - I für SparkSql auf Hive Tabellen aus zwei Gründen stimmen würde:

  1. sparksql ist normalerweise besser als Core Funke, da Databricks verschiedene Optimierungen in sparksql geschrieben haben, was eine höhere Abstinenz darstellt und die Möglichkeit bietet, den Code zu optimieren (lesen Sie mehr über Project Tungsten). In einigen Fällen wird der manuell geschriebene Spark-Core-Code besser sein, aber er verlangt vom Programmierer ein tiefes Verständnis der Interna. Darüber hinaus ist sparksql manchmal begrenzt und erlaubt es Ihnen nicht, Low-Level-Mechanismen zu steuern, aber Sie können immer Fallback zur Arbeit mit Core-RDD.

  2. Bienenstock und nicht Dateien - ich nehme Bienenstock mit externen Metastore an. Metastore speichert Definitionen von Partitionen Ihrer "Tabellen" (in Dateien könnte es ein Verzeichnis sein). Dies ist einer der wichtigsten Bestandteile für die gute Leistung. I.e. Beim Arbeiten mit Dateien muss Funke diese Informationen laden (was zeitraubend sein könnte - z. B. s3-Listen-Operation ist sehr langsam). So ermöglicht Metastore Funken, diese Informationen auf einfache und schnelle Weise zu holen.

0

Es gibt nur zwei Optionen hier. Funken auf Dateien oder Spark on Hive. SparkSQL funktioniert auf beiden, und Sie sollten lieber die Dataset-API, nicht RDD

verwenden Wenn Sie das Dataset-Schema selbst definieren können, wird Spark schneller die rohen HDFS-Dateien lesen, da Sie den zusätzlichen Sprung zum Hive umgehen Metastore.

Wenn ich einen einfachen Test mir Jahre hätte vor (Spark 1.3), bemerkte ich, dass 100.000 Zeilen als CSV-Datei Größenordnung Extrahieren schneller als eine SparkSQL Hive Abfrage mit den gleichen LIMIT

Verwandte Themen