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"
silent=[true/false]
Reduziert die Anzahl der angezeigten Informationsmeldungen und Client-Logs für die Abfrage von HiveServer2. Um lediglich die Ausgabe zu erhalten, muss der stderr entsprechend umgeleitet werden.outputformat=[table/vertical/csv/tsv/dsv/csv2/tsv2]
Der Formatmodus für die Ergebnisanzeige. Standard ist table.-u <database URL>
Die JDBC-URL, mit der eine Verbindung hergestellt werden soll.-e <Abfrage>
Die Abfrage, die ausgeführt werden soll. Doppelte oder einfache Anführungszeichen umschließen die Abfrage. Diese Option kann mehrfach angegeben werden.SET [-v]
Gibt alle Konfigurationsvariablen Hive aus und mit der -v Option auch von Hadoop.
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:
- Abstract Syntax Tree (AST): Hive verwendet einen parser generator, um automatisch eine Baumsyntax für HQL zu erzeugen.
- STAGE DEPENDENCIES: Hier werden alle Abhängigkeiten und die Anzahl der Stages aufgelistet, die zur Ausführung der Abfrage verwendet werden
- STAGE PLANS: Enthält wichtige Informationen, wie z. B. Operatoren und Sortierreihenfolgen für die Ausführung der Abfrage.
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;
STAGE DEPENDENCIES: Stage-1 is a root stage STAGE PLANS: Stage: Stage-1 Map Reduce Map Operator Tree: TableScan alias: sales_data Statistics: Num rows: 10000 Data size: 1000000 Basic stats: COMPLETE Column stats: NONE Filter Operator predicate: (sale_date BETWEEN '2023-01-01' AND '2023-12-31') (type: boolean) Statistics: Num rows: 2500 Data size: 250000 Basic stats: COMPLETE Column stats: NONE Group By Operator aggregations: sum(revenue) keys: product (type: string) mode: complete outputColumnNames: _col0, _col1 Statistics: Num rows: 1250 Data size: 125000 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator sort order: Statistics: Num rows: 1250 Data size: 125000 Basic stats: COMPLETE Column stats: NONE value expressions: _col0 (type: string), _col1 (type: double) Reduce Operator Tree: Group By Operator aggregations: sum(VALUE._col0) keys: KEY._col0 (type: string) mode: mergepartial outputColumnNames: _col0, _col1 Statistics: Num rows: 625 Data size: 62500 Basic stats: COMPLETE Column stats: NONE File Output Operator compressed: false Statistics: Num rows: 625 Data size: 62500 Basic stats: COMPLETE Column stats: NONE table: input format: org.apache.hadoop.mapred.TextInputFormat output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
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.
Quellen
[1] AdminManual Configuration. (o. J.). apache.org.https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration
[2] Bansal, H., Chauhan, S., & Mehrotra, S. (2016). Apache Hive Cookbook. Packt Publishing. Du, D. (2018). Apache Hive Essentials. Packt Publishing.
[3] Hive Configuration Properties. (o. J.). apache.org.https://cwiki.apache.org/confluence/display/hive/configuration+properties
[4] LanguageManual Explain. (o. J.). apache.org.https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain
Seminarempfehlungen
HADOOP GRUNDLAGEN HADOOP-01
ZUM SEMINARHADOOP ADMINISTRATION HADOOP-02
ZUM SEMINARBei Updates im Blog, informieren wir per E-Mail.
Kommentare