2017-11-08 2 views
0

Ich brauche Hilfe bei dem Versuch, die Leistung der laufenden Aggregation Abfragen von Json zu verbessern.Apache Drill JSON Abfrage Leistung

Meine einfachen count(*) Aggregationsabfragen über Json benötigen 11 Minuten, um nur 640 MB Daten zu vervollständigen.

Ich habe einen einzelnen Knoten-Cluster (8 Kerne, 8 GB RAM, mit lokalen SSD-Speicher).

Statistiken Daten:

  • 163.783 json Dateien
  • 640MB insgesamt

Vom UI Bohrer ich folgendes sehen:

DURATION: 11 min 27.665 sec 
*PLANNING*: 06 min 30.337 sec 
QUEUED: Not Available 
EXECUTION: 04 min 57.328 sec 

Was kann ich tun, um die Leistung zu verbessern? Muss ich den Speicher oder die Komprimierung für die JSON-Dateien ändern, um die Leseleistung zu verbessern?

+1

Können Sie versuchen, die json-Datei zusammenzuführen und zu sehen, wie sie funktioniert? Die Anzahl von 163.783 JSON-Dateien scheint in Hadoop ein Problem mit kleinen Dateien zu sein. Sie können Dateien wie in Beispiel zusammenführen - https://drill.apache.org/docs/json-data-model/#ticket_sales.json-contents. – InfamousCoconut

Antwort

1

Ein paar Dinge:

Wie bereits erwähnt, dass große Anzahl von Dateien für einen so kleinen Datensatz ist. Üblicherweise finde ich, dass Drill am besten mit Dateien im Bereich von 100 bis 200 MB funktioniert, bis die Gesamtgröße des Datensatzes und der Anwendungsfall erreicht sind. Dann kann es normalerweise ungefähr 100-200 MB/s pro Kern für JSON verarbeiten, solange die Komplexität des JSON und der Abfragen und die Geschwindigkeit des Systems noch bestehen.

Sie können möglicherweise Drill verwenden, um den kleineren Satz von Dateien im Datensatz zu erstellen, versuchen Sie, einen CTAS für den aktuellen Datensatz auszuführen, und legen Sie das Format auf JSON fest. Wenn Sie store.json.writer.uglify auf true setzen, schreiben Sie kompakteres JSON mit weniger Leerzeichen (aber weniger lesbar). Oder füge einfach die aktuellen Dateien mit einem anderen Tool in etwa 100-200 MB große Dateien zusammen.

Anzahl () auf JSON ist nicht so einfach wie es klingt. Wenn Sie versuchen, die Gesamtzahl der Datensätze zu verstehen, können Sie ein Feld auswählen, das in allen Datensätzen vorhanden ist, und dann spezifisch auf dieses Feld zählen. Wenn Sie eine verschachtelte Operation wie "flatten" ausführen müssen, können Sie dennoch ein Feld auswählen, das in allen Datensätzen enthalten ist. Ich fand es besser und zuverlässiger als eine einfache Zählung () auf JSON-Daten.