Von ORDIX AG auf Donnerstag, 23. November 2023
Kategorie: Big Data & AI

Apache Hive Query Troubleshooting – Grundlagen zur Fehlerbehebung bei Hive-Abfragen

Mit der Einführung von Apache Hive 3 wurden viele Funktionen und Möglichkeiten der Datenverarbeitung in Hadoop-Umgebungen erweitert, einschließlich der Unterstützung für transaktionale Tabellen. Im Artikel „Apache Hive 3 Transactional Tables - Ein Elefant im Bienenstock“ (siehe hier) wird anhand von mehreren Beispielen erklärt, wie die neue ACID-Funktionalität für Tabellen funktioniert und was es bezüglich des darunterliegenden Dateisystems zu beachten gibt. Diese neuen Funktionen sind zweifellos leistungsstark, können jedoch gelegentlich im operativen Einsatz von Hive zu Herausforderungen bei der Abfrageverarbeitung führen. In diesem Beitrag werden die Grundlagen der Fehlersuche sowie Verfahren zur Behebung von Problemen in Hive 3 vorgestellt und erklärt.

Mögliche Problemquellen in Hive 3 können vielfältig sein und reichen von schlecht erstellten oder verwalteten Nutzer-Tabellen bis hin zu bestimmten Fehlern oder Bugs in Hive selbst. Eine ineffiziente Tabellenstruktur, wie ein falsch gesetzter Partitionierungswert oder zu wenig zugewiesene Ressourcen, kann zu spürbaren Leistungsproblemen bei Abfragen auf die jeweilige Tabelle führen. Ohne ausreichende Kenntnisse können Fehlerbehebungen langwierig werden und daher viel Zeit und somit Geld kosten.

In Hive 3 stehen verschiedene Befehle zur Verfügung, um Probleme mit Hive-Abfragen zu diagnostizieren und deren Ursachen zu finden. Diese Ansätze sind nützlich für einen Big-Data-Administrator, um die optimale Leistung und Zuverlässigkeit der Hive-Umgebung zu gewährleisten.

Konfigurationseinstellungen mit dem SET-Befehl

​Standardmäßig bezieht Hive 3 seine Konfiguration von der hive-site.xml Datei, in der benutzerdefinierte Konfigurationsparameter global verändert oder angelegt werden können. Da die Werte je Umgebung variieren können, ist es im ersten Schritt wichtig, herauszufinden, wie Hive auf der eigenen Umgebung konfiguriert ist. Konfigurationsvariablen lassen sich mit dem SET-Befehl wie folgt ausgeben:

beeline --silent=true --outputformat=csv2 -u jdbc:hive2://127.0.0.1:10000 -e "SET -v"

Mit dem Befehl SET lassen sich jedoch nicht nur Konfigurationsparameter ausgeben, sondern diese auch auf lokaler bzw. Session Ebene setzen. Konfigurationen auf lokaler Ebene gelten nur für die jeweilige Session und können direkt in der beeline-Shell oder als Teil eines HiveQL-Skriptes gesetzt werden.

SET hive.tez.container.size=4096;

Mit der oberen Konfiguration wird die Tez-Container-Größe für die bestehende Sitzung auf 4096 MB gesetzt.

Die richtige Konfiguration von Hive ist global sowie lokal wichtig, um die Leistung und Stabilität der Abfragen zu gewährleisten. In vielen Fällen werden Konfigurationen entweder falsch oder nicht ausreichend gesetzt. Es ist daher nützlich für einen Big-Data-Admin, sich mit den wichtigsten Konfigurationseinstellungen auszukennen, um mögliche Fehler wie out-of-memory (OOM) wegen zu geringer Ressourcen-Verteilung schneller zu diagnostizieren. Diese Informationen werden auch meistens als Erstes vom Cloudera Support-Team angefragt, wenn eine Supportanfrage zur Fehlerbehebung von Hive-Problemen angelegt wird. Mehr Informationen über Konfigurationsmöglichkeiten sind in dem offiziellen Wiki von Hive enthalten. Ein Link ist in den Quellen angegeben.

Überblick der Tabellen-Statistiken mit dem DESCRIBE-Befehl

Hive Tabellen-Statistiken sind eine Sammlung von Metadaten über die gespeicherte Tabelle, die weitere Informationen, wie die Anzahl der Zeilen der Dateien im HDFS oder die Rohdatengröße der Tabellen beschreiben. Statistiken werden in Hive 3 teilweise automatisch oder manuell über den ANALYZE Befehl gesammelt und im Hive-Metastore gespeichert. Dieser Befehl kann wie folgt verwendet werden:

ANALYZE TABLE [db_name.]tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)] COMPUTE STATISTICS [FOR COLUMNS];

Um automatische Statistik Berechnungen für Tabellen zu deaktivieren, muss hive.stats.autogather entweder für die lokale Session, dauerhaft in der Konfigurationsdatei hive-site.xml oder über den Cluster Manager auf false gesetzt werden.

Sobald Tabellen-Statistiken erstellt wurden, können diese mit dem Befehl DESCRIBE überprüft werden:

DESCRIBE [EXTENDED | FORMATTED] [db_name.]tablename;

Der DESCRIBE Befehl ist ein nützliches Werkzeug, um die Struktur einer Tabelle oder einer View zu verstehen. Sie kann zur Fehlerbehebung bei Abfragen oder zur Ermittlung von Datenqualitätsproblemen verwendet werden. Die FORMATTED oder EXTENDED Ausgabe enthält zusätzliche Informationen zu der Tabelle.

DESCRIBE FORMATTED climate.txt_observation_daily;

Die Ausgabe des DESCRIBE FORMATTED Befehls liefert Angaben über Spalten, Partitionen, Tabellenparameter sowie Speicherinformationen. Problematische Tabellen können schon hier auffallen, da sie zum Beispiel zu viele Dateien für die Anzahl der Zeilen oder die Größe der Tabelle haben. Dies könnte auf eine fehlerhaft angelegte Tabelle hindeuten. 

​Ausgabe des Query Execution Plans mit dem EXPLAIN-Befehl

Der EXPLAIN-Befehl gibt den Query-Execution-Plan bzw. Ausführungsplan für eine Abfrage aus. Dieser wird verwendet, um Abfragen zu analysieren und optimieren, wenn es Bedenken oder Probleme hinsichtlich der Leistung gibt. Weiterhin ist es auch ein hilfreiches Verfahren, um Unterschiede zwischen zwei oder mehreren Abfragen zu erkennen. Der Syntax für den Befehl lautet wie folgt:

EXPLAIN [EXTENDED] hql_query;

Mit dem EXPLAIN-Befehl lassen sich auch weitere Klauseln wie CBO AST, DEPENDENCY, AUTHORIZATION, LOCKS, VECTORIZATION, ANALYZE angeben. Hier gibt es weitere Informationen bezüglich dieser Optionen: LanguageManual Explain Die Ausgabe des EXPLAIN-Befehls besteht dabei aus drei Teilen:

Bei der Ausgabe wird die Hive-Abfrage in eine Sequenz von Schritten bzw. Stages eingeteilt. Bei diesen Stages kann es sich um MapReduce- oder Dateisystem Aufgaben/Operationen, wie das Verschieben oder Umbenennen der Tabelle handeln. Um dies in einem Beispiel zu demonstrieren, wird nachfolgend der EXPLAIN-Plan für eine Hive-Abfrage einer Tabelle namens sales_data erstellt, wobei nach bestimmten Werten gefiltert und nach product gruppiert wird:

EXPLAIN
SELECT product, SUM(revenue) AS total_revenue
FROM sales_data
WHERE sale_date BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY product;

In diesem Beispiel gibt es im Abschnitt STAGE DEPENDENCIES nur eine Stage (Stage-1), welche gleichzeitig die root-Stage, d. h. die Hauptausführungsstufe darstellt. Im STAGE PLAN wird die MapReduce Aufgabe wiederum in einzelne Operatoren, wie Map, Filter, Reduce, Group By sowie File Output eingeteilt und es werden weitere Informationen zu jedem Operator ausgegeben. Die Verwendung von EXTENDED in der EXPLAIN-Anweisung erzeugt zusätzliche Informationen über die Operatoren im Plan. Dabei handelt es sich in der Regel um physische Informationen, wie Dateinamen.

Mit dem ausgegebenen EXPLAIN-Plan können Nutzer daher das Verhalten der Abfrage besser verstehen und gegebenenfalls optimieren. Die Identifizierung ressourcenintensiver Operationen ist wichtig, um Ressourcen effizienter einzusetzen und logische Fehler in Hive-Abfragen zu berichtigen.

Überprüfung der Logs

​Ein weiteres wichtiges Verfahren der Fehlersuche in Hive, ist die Analyse der Logs. Diese müssen auch berücksichtigt werden, wenn eine Abfrage fehlschlägt oder unerwartete Ergebnisse liefert. Es gibt dabei drei wichtige Logs, die mehr über die Ursache einer Fehlermeldung berichten können. Diese beinhalten die HiveServer2, Hive-Metastore und YARN-Application-Logs.

Die HiveServer2-Logs liefern Informationen über den Aufbau und die Ausführung von Abfragen sowie Client-Verbindungen und enthalten kritische Fehlermeldungen, die auf die Ursache von Problemen hinweisen können. Der Hive Metastore ist für die Verwaltung der Metadaten von Tabellen, Schemata, Partitionen sowie der Housekeeping Aufgaben wie Compactions in Hive zuständig. Probleme in dieser Komponente können zu Dateninkonsistenz und Korruption führen. Neben den HiveServer2- und Hive Metastore-Logs ist es auch wichtig, die Applikations-Logs der Hive Abfragen zu überwachen. Diese Logs bieten Einblicke in den Abfrageausführungsplan und die Ressourcenverteilung der Hive-Abfragen.

Die Logs der Hive Dienste lassen sich in der Regel unter dem /var/log/ Verzeichnis finden, wobei die YARN-Logs sich mit dem folgenden Befehl ausgeben lassen:

yarn logs -applicationId <application_id>

Diese Logs liefern wichtige Informationen über die Ausführung einer Hive-Abfrage und sind für das Debugging, die Überwachung und die Leistungsanalyse von entscheidender Bedeutung.

Fazit

Die Erweiterungen, die Hive 3 mit sich bringt, haben das Potenzial, die Datenverarbeitung in Hadoop zu verbessern. Gleichzeitig kommen mit der erhöhten Komplexität der Vorgänge wie der ACID-Funktionalität für Tabellen auch gewisse Herausforderungen. Die vorgestellten Diagnosewerkzeuge und Verfahren, darunter die Konfigurationseinstellungen, Tabellenstatistiken, Query-Execution-Plans und Log Analysen bieten einen wertvollen Leitfaden für Big-Data-Administratoren, um die Performance und Zuverlässigkeit ihrer Hive-Umgebung zu gewährleisten. Mithilfe dieser Befehle können potenzielle Probleme identifiziert und behoben werden, damit nicht nur Ressourcen, sondern auch Zeit gespart werden kann und Hive bzw. die Plattform effizient und fehlerfrei funktioniert.

Seminarempfehlungen

Kommentare hinterlassen