2017-11-29 4 views
0

ich einen Code leite die im Grunde so geht:Warum nimmt Hive zu viel Zeit in Anspruch?

Create table abc as 
select A.* from 
table1 A 
Left outer join 
table2 B 
on 
A.col1=B.col1 and A.col2=B.col2; 

Anzahl der Datensätze in table1 = 7.009.102 Anzahl der Datensätze in table2 = 1787493

Ich habe ähnliche 6 Abfragen in meinem Skript, aber mein Skript ist auf der 4. solchen Abfrage stecken. Ich habe versucht, über tez und mapreduce zu laufen, aber beide haben das gleiche Problem.

In mapreduce ist es bei Karte 0% stecken und reduzieren 0% auch nach einer Stunde. Es gibt keine Reduzierungen In Tez, es ist nur 22% in 1 Stunde.

Nach dem Überprüfen der Protokolle zeigt es viele Einträge wie 'Fortschritt von TaskAttempt versuchen_12334_m_000003_0 ist: 0.0'.

Ich lief den Job in tez, und jetzt ist es fast 3 Stunden und der Job ist im Begriff zu beenden mit 2 in Map-2 Vertice fehlgeschlagen.

Antwort

0

Allgemeine Tipps Hive Abfragen zu verbessern, um schneller zu laufen

1 Verwenden Sie ORC-Datei
Hive unterstützt ORC-Datei - ein neues Tabellenspeicherformat, das fantastische Geschwindigkeit Verbesserungen durch Techniken wie Prädikat Pushdown (Pushup in Hive), Komprimierung und vieles mehr.
Die Verwendung von ORCFile für jede HIVE-Tabelle sollte wirklich ein Kinderspiel sein, und extrem vorteilhaft, um schnelle Antwortzeiten für Ihre HIVE-Abfragen zu erhalten.

CREATETABLEA_ORC ( 
customerIDint, namestring, age int, address string 
) 

2. Verwenden Vektorisierung vektorisierte Abfrageausführung verbessert die Leistung von Operationen wie Scans, Aggregationen, Filter, und schließt sich, indem man sie in Chargen von 1024 Zeilen auf einmal anstelle einer einzigen Reihe jedes Mal durchgeführt wird. Eingeführt in Hive 0.13, diese Funktion Abfrageausführungszeit erheblich verbessert, und ist leicht mit zwei Parametern Einstellungen aktiviert:

I. sethive.vectorized.execution.enabled = true; 
II. sethive.vectorized.execution.reduce.enabled = true; 

3. Partition Basierend Joins: Um schließt sich in Hive zu optimieren, müssen wir das reduzieren Abfrage-Scan-Zeit. Dazu können wir eine Hive-Tabelle mit Partitionen erstellen, indem wir die Partitionsvergleichselemente in der WHERE-Klausel oder der ON-Klausel in einem JOIN angeben.
Beispiel: ‚Zustand‘ In der Tabelle ‚Statusansicht‘ auf die Spalte partitioniert Die unten Abfrage ruft Zeilen nur für einen bestimmten Zustand: Optimizing In Hive tritt

SELECT state_view.* FROM state view WHERE state_view.state= ‘State-1’ AND state_view.state = ‘State-3’; 

Wenn Ansicht eine Tabelle Zustand mit einem anderen Tisch Stadt Benutzer verbunden sind, können Sie eine Reihe von Partitionen in der ON-Klausel wie folgt angeben:

SELECT state_view.* FROM state_view JOIN city_users ON (state_view.state = city_users.state); 

Hope this Post half Ihnen bei all Ihren verbindet Optimierung Bedürfnisse in Hive.

Verwandte Themen