Einführung
Dieses Lab behandelt die Konfiguration und grundlegende Bedienung von Hive. Es richtet sich an Lernende mit gewissen SQL-Grundkenntnissen, die die Architektur, die grundlegende Bereitstellung und die Verwendung von Hive verstehen möchten.
Geben Sie den Beispielcode im Dokument möglichst selbst ein und kopieren Sie ihn nicht einfach. Nur so machen Sie sich besser mit dem Code vertraut. Wenn Probleme auftreten, lesen Sie die Dokumentation sorgfältig durch. Sie können sich auch im Forum Hilfe holen und sich mit anderen austauschen.
Einführung in Hive
In diesem Schritt lernen Sie, wie Apache Hive eine SQL-Schnittstelle zum Abfragen und Analysieren großer, mit Hadoop gespeicherter Datenmengen bereitstellt. Hier erhalten Sie einen Überblick über die Architektur und die wichtigsten Funktionen von Hive:
Hive-Architektur
- Komponenten: Hive besteht aus
HCatalogzur Verwaltung von Tabellen und Speicher sowie ausWebHCatzum Ausführen von MapReduce-Aufgaben und Pig-Abfragen und für den Zugriff auf Hive-Metadaten über eine REST-API. - Funktionen:
- Unterstützt SQL-Abfragen für Data-Warehouse-Aufgaben wie ETL, Datenanalyse und Reporting.
- Die Daten werden in Speichersystemen wie HDFS oder HBase abgelegt. Abfragen werden von Rechen-Engines wie Tez, Spark oder MapReduce ausgeführt.
- Unterstützt prozedurale Sprachen, HPL-SQL sowie den Abruf von Unterabfragen mit Unterstützung für Hive LLAP, YARN und Slider.
Grundlegende Dateneinheiten in Hive
- Datenbank: Ein Namensraum, der Namenskonflikte verhindert und die Sicherheit erhöht.
- Tabelle: Eine homogene Dateneinheit mit demselben Schema, zum Beispiel eine Tabelle
page_viewsmit Spalten wie timestamp, userid und page_url. - Partition: Teilt Daten anhand von Schlüsseln in Partitionen auf, damit sie effizient abgerufen werden können.
- Bucket: Teilt partitionierte Daten anhand von Hashwerten in Buckets auf, um die Abfrageeffizienz zu verbessern.
Hive-Datentypen
- Unterstützt primitive und komplexe Datentypen. Einzelheiten finden Sie in der Dokumentation zu Hive-Datentypen.
Hive ist für Data-Warehouse-Aufgaben und nicht für die Online-Transaktionsverarbeitung (OLTP) ausgelegt. Der Schwerpunkt liegt auf Skalierbarkeit, Leistung, Zuverlässigkeit und Fehlertoleranz. Hive unterstützt verschiedene Eingabeformate und kann durch Konnektoren für unterschiedliche Formate erweitert werden. Das Verständnis der Hive-Architektur, der Dateneinheiten und der Datentypen ist entscheidend, um die Möglichkeiten von Hive für Big-Data-Analysen optimal zu nutzen.
Installation und Bereitstellung von Hive
In diesem Schritt überprüfen Sie die Installation und Bereitstellung von Hive. Dazu gehören die Verzeichnisstruktur, Umgebungsvariablen, der Metastore und Systemparameter.
Wechseln Sie zunächst zum Benutzer hadoop, um die folgenden Schritte auszuführen. Öffnen Sie das Xfce-Terminal auf Ihrem Desktop per Doppelklick und geben Sie die folgenden Befehle ein:
su - hadoop
Tipp: Das Passwort des Benutzers hadoop lautet hadoop.
Verwenden Sie anschließend den Befehl wget, um die aktuelle stabile Hive-Version herunterzuladen. In diesem Lab verwenden wir Hive in der Version 2.3.3:
sudo wget https://labexfile.oss-us-west-1.aliyuncs.com/courses/144/apache-hive-2.3.3-bin.tar.gz
Entpacken Sie nun das heruntergeladene Installationspaket. Geben Sie dazu im Terminal den folgenden Befehl ein:
tar -zxvf apache-hive-2.3.3-bin.tar.gz
Verschieben Sie das entpackte Verzeichnis mit sudo in das Verzeichnis /opt. Ohne sudo haben Sie möglicherweise keine Schreibberechtigung für /opt:
sudo mv /home/hadoop/apache-hive-2.3.3-bin /opt/hive-2.3.3
Ändern Sie anschließend den Besitzer des Hive-Verzeichnisses und die zugehörige Gruppe auf den Benutzer hadoop. Geben Sie dazu im Terminal den folgenden Befehl ein:
sudo chown -R hadoop:hadoop /opt/hive-2.3.3
Tipp: Sie können für die oben genannten Vorgänge mit sudo auch ein weiteres Terminal öffnen.
labex:~/ $ ls -al /opt/
total 24
drwxrwxr-x 10 hadoop hadoop 4096 Mar 3 12:01 hive-2.3.3
...
Umgebungsvariablen festlegen
In diesem Schritt legen Sie die Hive-Umgebungsvariablen fest, damit HIVE_HOME auf das Installationsverzeichnis von Hive verweist.
Öffnen Sie zunächst die Datei .bashrc des Benutzers hadoop mit dem Editor vim. Geben Sie dazu im Terminal den folgenden Befehl ein:
vim /home/hadoop/.bashrc
Fügen Sie am Ende der Datei den folgenden Inhalt ein. Passen Sie PATH an die tatsächliche Umgebung dieses Labs an. Der Ausdruck $PATH verweist auf den bereits vorhandenen Inhalt. Fügen Sie :$HIVE_HOME/bin direkt am Ende der Umgebungsvariablen PATH hinzu:
export HIVE_HOME=/opt/hive-2.3.3
export PATH=$PATH:$HIVE_HOME/bin
Speichern Sie die Datei und verlassen Sie den Editor, sobald Sie die Bearbeitung abgeschlossen haben. Aktivieren Sie die oben gesetzten Umgebungsvariablen anschließend mit dem Befehl source.
In diesem Lab ist Hive bereits vorinstalliert. Sie müssen die Umgebungsvariablen daher nicht mit source aktivieren. Bei einer tatsächlichen Installation hängt dieser Schritt jedoch von der jeweiligen Umgebung ab.
Konfiguration festlegen
In diesem Schritt überprüfen Sie die vorinstallierte Hive-Konfiguration und erstellen die für die Prüfungen benötigten Konfigurationsdateien.
Metastore-Konfiguration
Bevor Sie Hive offiziell verwenden können, müssen Sie seinen Metadatenspeicher einrichten. Standardmäßig speichert Hive Metainformationen in einer eingebetteten Derby-Datenbank. Der Speicherort auf der Festplatte wird durch das Konfigurationselement javax.jdo.option.ConnectionURL in der Hive-Konfigurationsdatei conf/hive-default.xml bestimmt. Standardmäßig lautet dieser Speicherort ./metastore_db.
In diesem Lab verwenden wir jedoch MySQL als Metadatenspeicher. Daher müssen Sie die Hive-Konfigurationsdatei anpassen.
Erstellen und öffnen Sie die von uns vorbereitete Konfigurationsdatei mit dem Editor vim:
vim /opt/hive-2.3.3/conf/hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive_metastore1?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hiveuser1</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123qweQWE...</value>
</property>
</configuration>
Speichern Sie die Datei nach dem Bearbeiten der oben genannten Konfigurationselemente und verlassen Sie den Editor.
MySQL-Datenbank erstellen
Starten Sie den MySQL-Server mit sudo mysql und erstellen Sie die Datenbank hive_metastore:
CREATE DATABASE hive_metastore1;
CREATE USER 'hiveuser1'@'localhost' IDENTIFIED BY '123qweQWE...';
GRANT ALL PRIVILEGES ON hive_metastore1.* TO 'hiveuser1'@'localhost';
FLUSH PRIVILEGES;
exit;
Laden Sie anschließend den MySQL-JDBC-Treiber herunter und kopieren Sie ihn in das Verzeichnis /opt/hive-2.3.3/lib:
cp /usr/local/hive/lib/mysql-connector-j-8.3.0.jar /opt/hive-2.3.3/lib
Hive-Systemparameter festlegen
Nachdem der Metastore konfiguriert wurde, müssen Sie die internen Hive-Konfigurationselemente festlegen. Damit geben Sie unter anderem den Speicherort von Hadoop und den Pfad der internen Konfigurationsdatei an.
Kopieren Sie zunächst mit dem Befehl cp die Vorlage der Einstellungen, damit die Konfiguration wirksam werden kann.
Geben Sie im Terminal den folgenden Befehl ein:
cp /opt/hive-2.3.3/conf/hive-env.sh.template /opt/hive-2.3.3/conf/hive-env.sh
Öffnen Sie anschließend die Datei hive-env.sh mit dem Editor vim:
vim /opt/hive-2.3.3/conf/hive-env.sh
Setzen Sie in Zeile 48 HADOOP_HOME auf den Installationspfad von Hadoop:
HADOOP_HOME=/home/hadoop/hadoop
Speichern Sie die Datei nach dem Bearbeiten der oben genannten Konfigurationselemente und verlassen Sie den Editor.
Metastore initialisieren
In diesem Schritt initialisieren Sie den Hive-Metastore und starten die von Hive benötigten Hadoop-Dienste.
Da die später verwendeten Daten in HDFS gespeichert werden, müssen Sie HDFS vorher starten. Geben Sie dazu im Terminal die folgenden Befehle ein:
start-dfs.sh
start-yarn.sh
Geben Sie anschließend jps ein, um den Status der Dienste anzuzeigen:
hadoop:~/ $ jps [17:31:43]
8960 Jps
3153 NodeManager
2823 SecondaryNameNode
3017 ResourceManager
2570 DataNode
2428 NameNode
Wenn Sie Hadoop zum ersten Mal verwenden, müssen Sie die Hadoop-Daten löschen und Hadoop mit hdfs namenode -format initialisieren.
In diesem Lab haben wir das vorinstallierte Hive bereits mit der Benutzerdatenbank initialisiert. Wenn Sie das gerade heruntergeladene Hive initialisieren möchten, verwenden Sie den folgenden Befehl:
/opt/hive-2.3.3/bin/schematool -initSchema -dbType mysql
Initialization script completed
schemaTool completed
Wenn Sie das gerade heruntergeladene Hive zum ersten Mal initialisieren, müssen Sie den Pfad von HIVE_HOME in ~/.bashrc auf den Pfad der gerade installierten Hive-Version ändern und anschließend source ausführen. Wir empfehlen jedoch, dies nicht zu tun, da sich unsere nachfolgenden Hive-Tests vollständig auf das vorinstallierte Hive beziehen.
Wenn die Eingabeaufforderung anzeigt, dass die Initialisierung abgeschlossen ist, können Sie mit dem Befehl hive die Hive-Befehlszeile öffnen. Geben Sie dazu im Terminal den folgenden Befehl ein:
hive
Tipp: Wenn Sie hive direkt in der vorinstallierten Hive-Shell eingeben, fügen Sie den absoluten Pfad hinzu. Dann öffnen Sie die Hive-Shell, die Sie gerade eingerichtet haben.
Hive Session ID = 3eee2693-175d-4452-82d2-47f1b639d9d5
Logging initialized using configuration in jar:file:/usr/local/hive/lib/hive-common-3.1.3.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
Hive Session ID = 68d0d345-92c3-4eb1-8393-7ee34f56363f
hive>
Grundlegende Hive-Operationen
In diesem Schritt lernen Sie grundlegende Operationen für Hive-Tabellen kennen. Alle Hive-Anweisungen finden Sie auch im Language Manual.
Tabelle erstellen
Beschaffen Sie sich zunächst einige Daten. Die in diesem Abschnitt verwendeten Daten bestehen hauptsächlich aus einer Protokolldatei, die einen NginX-Server simuliert. Sie kann zur Analyse der Seitenaufrufe einer Website verwendet werden.
Öffnen Sie ein neues Terminal und geben Sie dort die folgenden Befehle ein, um die Beispieldaten herunterzuladen:
su hadoop
cd ~
wget http://labfile.oss-cn-hangzhou.aliyuncs.com/courses/567/log_example.csv
Laden Sie die Datei anschließend in HDFS hoch:
hdfs dfs -mkdir -p /user/data/staging/page_view
hdfs dfs -put /home/hadoop/log_example.csv /user/data/staging/page_view
Nachdem die Daten verfügbar sind, erstellen Sie zunächst die Tabelle. Wenn Sie für die oben genannten Daten eine Tabelle page_view erstellen möchten, geben Sie die folgende Anweisung in der Hive-Befehlszeile ein:
CREATE TABLE page_view(viewTime INT, userid BIGINT,
Page_url STRING, referrer_url STRING,
Ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
STORED AS SEQUENCEFILE;
In diesem Beispiel wird jeder Tabellenspalte der passende Datentyp zugewiesen. Außerdem können Sie Kommentare auf Spalten- und Tabellenebene angeben. Die Klausel PARTITIONED BY definiert zusätzlich eine Partitionsspalte, die sich von den Datenspalten unterscheidet. Die Partitionsspalte wird nicht zusammen mit den Datenspalten gespeichert. Wenn Sie eine Partitionsspalte auf diese Weise angeben, wird ein Zeilenumbruch als Trennzeichen zwischen den Zeilen verwendet.
Wenn die Daten nicht im oben gezeigten Format vorliegen, können Sie das Feldtrennzeichen wie im folgenden Beispiel festlegen:
Die folgende Anweisung dient nur zur Demonstration und darf nicht in der hive-Shell eingegeben werden.
CREATE TABLE page_view1(viewTime INT, userid BIGINT,
Page_url STRING, referrer_url STRING,
Ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '1'
STORED AS SEQUENCEFILE;
Da das Zeilentrennzeichen vom Trennzeichen im Hadoop-System und nicht von Hive bestimmt wird, können wir das Zeilentrennzeichen nicht manuell ändern.
In der Regel werden Tabellen, deren Spaltendaten festgelegt sind, in Buckets gespeichert. Das erleichtert das effiziente Erstellen von Stichproben für Abfragen auf dem Datensatz. Ohne Buckets kann zwar eine Zufallsstichprobe der Tabelle erstellt werden, beim Scannen der gesamten Daten wird jedoch keine hohe Effizienz erreicht. Das folgende Beispiel zeigt, wie Sie die Bucket-Speicherung für die Tabelle page_view anhand der Spalte userid aktivieren.
Die folgende Anweisung dient nur zur Demonstration und darf nicht in der hive-Shell eingegeben werden.
CREATE TABLE page_view2(viewTime INT, userid BIGINT,
Page_url STRING, referrer_url STRING,
Ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '1'
COLLECTION ITEMS TERMINATED BY '2'
MAP KEYS TERMINATED BY '3'
STORED AS SEQUENCEFILE;
Im obigen Beispiel wird die Spalte userid mithilfe einer Hash-Funktion in 32 Buckets aufgeteilt. In jedem Bucket werden die Daten in aufsteigender Reihenfolge nach viewTime sortiert. Durch diese Organisation der Daten können Benutzer effizient Stichproben aus aggregierten Spalten erstellen, hier aus der Spalte userid. Die Sortierung ermöglicht es Datenverantwortlichen außerdem, Abfragen mithilfe besserer Datenstrukturen effizienter auszuwerten.
Die folgende Anweisung dient nur zur Demonstration und darf nicht in der hive-Shell eingegeben werden.
CREATE TABLE page_view3(viewTime INT, userid BIGINT,
Page_url STRING, referrer_url STRING,
Friends ARRAY<BIGINT>, properties MAP<STRING, STRING>,
Ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '1'
COLLECTION ITEMS TERMINATED BY '2'
MAP KEYS TERMINATED BY '3'
STORED AS SEQUENCEFILE;
Im obigen Beispiel wird das Format jeder Tabellenzeile anhand von Feldnamen und Datentypen definiert, ähnlich wie Typdefinitionen in anderen Programmiersprachen. Beachten Sie, dass bei Tabellen- und Spaltennamen nicht zwischen Groß- und Kleinschreibung unterschieden wird. IP Address of the User sowie die folgende COMMENT-Anweisung zeigen, dass Kommentare sowohl auf Spalten- als auch auf Tabellenebene hinzugefügt werden können. Die Klausel PARTITIONED BY definiert außerdem Partitionsspalten, die sich von den Datenspalten unterscheiden. Wie bereits erwähnt, speichern diese Spalten die Daten tatsächlich nicht. Die Klausel CLUSTERED BY legt fest, welche Spalte zum Erstellen der Buckets verwendet wird und wie viele Buckets erstellt werden. Die Klausel ROW FORMAT DELIMITED legt fest, wie Zeilen in einer Hive-Tabelle gespeichert werden. Bei begrenzten Formaten gibt diese Anweisung an, wie das Ende eines Feldes, eines Elements in einer Collection (Array oder Map) und eines Map-Schlüssels erkannt wird. Die Zahlen werden dabei als ASCII-Codierung verwendet. STORED AS SEQUENCEFILE gibt an, dass die Daten binär in HDFS gespeichert werden, genauer gesagt als Hadoop-Typ SequenceFile. Die Einstellungen in den Klauseln ROW FORMAT und STORED AS sind die derzeit von Hive verwendeten Standardwerte. Deshalb haben wir sie in der Anweisung zur Erstellung der Tabelle am Anfang nicht ausdrücklich angegeben.
Tabellen und Partitionen anzeigen
Wenn Sie die vorhandenen Tabellen in Ihrem Warehouse auflisten möchten, verwenden Sie die folgende Anweisung:
SHOW TABLES;
Wenn viele Tabellen vorhanden sind, erzeugt die obige Anweisung eine große Menge an Ausgaben. Sie können den Umfang durch Angabe eines Präfixes einschränken. Wenn Sie beispielsweise Tabellen mit dem Präfix page auflisten möchten, verwenden Sie die folgende Anweisung:
SHOW TABLES 'page.*';
Die Suchregeln dieser Anweisung entsprechen der Syntax regulärer Ausdrücke. Der Punkt (.) steht dabei für einen Platzhalter.
Wenn Sie die Partitionen einer Tabelle auflisten möchten, verwenden Sie die folgende Anweisung. Bei einer nicht partitionierten Tabelle wird keine Information zurückgegeben:
SHOW PARTITIONS page_view;
Wenn Sie die Spalten und Spaltentypen einer Tabelle auflisten möchten, verwenden Sie die Anweisung DESCRIBE:
DESCRIBE page_view;
Wenn Sie zusätzlich zu den Spalten alle weiteren Eigenschaften der Tabelle auflisten möchten, fügen Sie das Schlüsselwort EXTENDED hinzu. Dadurch werden viele Informationen ausgegeben. Diese Variante wird normalerweise zum Debuggen verwendet:
DESCRIBE EXTENDED page_view;
Tabelle ändern
Wenn Sie eine vorhandene Tabelle umbenennen möchten, verwenden Sie die Anweisung ALTER TABLE mit RENAME TO. Wenn bereits eine Tabelle mit dem neuen Namen existiert, wird ein Fehler zurückgegeben. Die folgenden Anweisungen dienen nur als Beispiele. Führen Sie sie nicht aus, da im nächsten Schritt die von Ihnen erstellte Tabelle page_view verwendet wird:
ALTER TABLE page_view RENAME TO new_page_view;
Zeigen Sie das Ergebnis an:
hive> ALTER TABLE page_view RENAME TO new_page_view;
OK
Time taken: 0.124 seconds
hive> show tables;
OK
new_page_view
...
Time taken: 0.021 seconds, Fetched: 4 row(s)
Sie können auch die Spalten einer vorhandenen Tabelle umbenennen. Beachten Sie jedoch, dass Sie denselben Spaltentyp verwenden und für jede vorhandene Spalte einen Eintrag angeben müssen:
ALTER TABLE new_page_view REPLACE COLUMNS (viewTime INT, userid BIGINT, page_url STRING, referrer_url STRING, ipaddr STRING COMMENT 'IP Address of the User');
Außerdem können Sie einer vorhandenen Tabelle neue Spalten hinzufügen:
ALTER TABLE new_page_view ADD COLUMNS (new_column INT COMMENT 'a new int column');
Beachten Sie, dass Änderungen am Schema, beispielsweise das Hinzufügen einer Spalte, das Schema für die alten Partitionen der Tabelle beibehalten, damit diese nicht zu einer partitionierten Tabelle werden. Abfragen, die auf diese Spalten zugreifen und für alte Partitionen ausgeführt werden, geben für diese Spalten implizit Nullwerte oder die angegebenen Standardwerte zurück.
Tabellen und Partitionen löschen
Da Hive als Data Warehouse konzipiert ist, ist das Löschen von Daten grundsätzlich problematisch. Deshalb ist das Löschen einer Tabelle etwas umständlich. Wenn Sie den Befehl DROP auf eine Tabelle anwenden, werden alle für diese Tabelle erstellten Indizes implizit gelöscht.
Das folgende Beispiel löscht eine Tabelle. Führen Sie es in diesem Lab nicht aus:
DROP TABLE new_page_view;
Daten laden und abfragen
In diesem Schritt laden Sie bereitgestellte Daten in eine partitionierte Hive-Tabelle und fragen das Ergebnis ab.
Daten laden
Es gibt mehrere Möglichkeiten, Daten in eine Hive-Tabelle zu laden. Sie können externe Tabellen erstellen, die auf bestimmte Speicherorte in HDFS verweisen. Dabei können Sie den HDFS-Befehl put oder copy verwenden, um die Datendatei an den angegebenen Speicherort zu kopieren, und anschließend eine Tabelle erstellen, die auf diesen Speicherort verweist. Diese Tabelle enthält alle relevanten Informationen zum Zeilenformat.
Nach dem Erstellen der Tabelle können Sie die Daten umwandeln und in jede andere Hive-Tabelle einfügen. Wir haben die Datei log_example.csv bereits zu Beginn in HDFS hochgeladen und in page_view umbenannt. Wenn wir sie in die entsprechende Partition der Tabelle page_view laden möchten, gehen wir mit dem folgenden Befehl vor.
Erstellen Sie zunächst eine externe Tabelle und verknüpfen Sie sie mit der angegebenen Datei:
CREATE EXTERNAL TABLE page_view_stg(viewTime INT, userid BIGINT,
Page_url STRING, referrer_url STRING,
Ip STRING COMMENT 'IP Address of the User',
Country STRING COMMENT 'country of origin')
COMMENT 'This is the staging page view table'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '44' LINES TERMINATED BY '\n' STORED AS TEXTFILE
LOCATION '/user/data/staging/page_view';
Erstellen Sie anschließend die Tabelle page_view, in der die Daten endgültig gespeichert werden:
CREATE TABLE page_view(viewTime INT, userid BIGINT,
Page_url STRING, referrer_url STRING,
Ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
STORED AS SEQUENCEFILE;
Dieser kleine Übungsdatensatz benötigt keinen verteilten YARN-Auftrag. Konfigurieren Sie für diese Hive-Sitzung den lokalen Job Runner von Hadoop, damit der Einfügevorgang zuverlässig innerhalb der Lab-VM ausgeführt wird:
SET mapreduce.framework.name=local;
Fügen Sie schließlich die Daten aus der externen Tabelle in die Tabelle page_view ein:
FROM page_view_stg pvs
INSERT OVERWRITE TABLE page_view
PARTITION(dt='2015-05-17', country='us')
SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, pvs.ip
WHERE pvs.country = 'us';
Der lokale Job sollte innerhalb weniger Sekunden abgeschlossen sein und die passenden Zeilen in die Partition von page_view laden.
...
Loading data to table default.page_view partition (dt=2015-05-17, country=us)
MapReduce Jobs Launched:
Stage-Stage-1: HDFS Read: ... HDFS Write: ... SUCCESS
Total MapReduce CPU Time Spent: 0 msec
OK
Time taken: ... seconds
Einfache Abfrage
Nach dem Einfügen der Daten können Sie eine einfache Abfrage ausführen. Sie ähnelt einer gewöhnlichen SQL-Anweisung. Geben Sie die folgende Anweisung in der Hive-Befehlszeile ein:
SELECT * FROM page_view WHERE userid = 0 LIMIT 10;
Die zurückgegebenen Informationen sind die abgefragten Datensätze:
hive> select * from page_view;
OK
NULL 490 /downloads/product_1 /archives/webroot 217.168.17.5 2015-05-17 us
NULL 490 /downloads/product_2 /archives/webroot 217.168.17.5 2015-05-17 us
NULL 3316 /downloads/product_2 /archives/webroot 217.168.17.5 2015-05-17 us
...
Dienste beenden
In diesem Schritt verlassen Sie Hive und beenden die Hadoop-Dienste. Die folgenden Ressourcen unterstützen Sie beim weiteren Lernen:
Wenn Sie Hive nicht mehr verwenden, können Sie die Hive-Befehlszeile mit dem Befehl quit verlassen:
quit;
Vergessen Sie anschließend nicht, den HDFS-Dienst zu beenden. Geben Sie dazu im Terminal den folgenden Befehl ein:
stop-yarn.sh
stop-dfs.sh
Zusammenfassung
In dieser Einheit wurden die Hive-Architektur, die Installation und Bereitstellung sowie grundlegende HQL-Anweisungen vorgestellt. Außerdem haben wir gelernt, wie Daten mithilfe der Beispieldaten importiert werden.
Die wichtigsten Themen waren:
- Hive-Architektur
- Grundlegende Dateneinheiten von Hive
- Bereitstellung von Hive
- Hive-HQL-Sprache
Als Data-Warehouse-Software bietet Hive zahlreiche Funktionen, die noch weiter erkundet werden können. Lesen Sie technische Materialien regelmäßig und eigenständig nach, und setzen Sie Ihr Lernen in den folgenden Kursen fort.



