Unser Newsletter rund um technische Themen,
das Unternehmen und eine Karriere bei uns.

8 Minuten Lesezeit (1568 Worte)

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.

Seminarempfehlungen

hat noch keine Informationen über sich angegeben
 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Montag, 23. Dezember 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.