Schnellstart zu Hive

LinuxBeginner
Jetzt üben

Einführung

Dieses Labor konzentriert sich auf die Konfiguration und die grundlegenden Operationen von Hive und ist für Studierende mit einer gewissen SQL-Basis gedacht, um die Architektur, die grundlegende Bereitstellung und den Gebrauch von Hive zu verstehen.

Geben Sie alle Beispielcodes im Dokument selbst ein; versuchen Sie, den Code nicht einfach zu kopieren und einzufügen. Nur so können Sie sich besser mit dem Code vertraut machen. Wenn Sie Probleme haben, überprüfen Sie die Dokumentation gründlich oder besuchen Sie das Forum, um Hilfe und Kommunikation zu erhalten.

Einführung in Hive

Apache Hive ist ein Data-Warehouse-Software-Paket, das auf Hadoop aufbaut und dazu dient, große Datensätze mithilfe von SQL-ähnlichen Abfragen abzufragen und zu analysieren. Es vereinfacht die Datenaggregation, die ad-hoc-Abfragen und die Analyse von Big Data, indem es Benutzern eine vertraute SQL-Schnittstelle zur Verfügung stellt. Hier ist ein Überblick über die Architektur und die wichtigsten Features von Hive:

Hive-Architektur

  • Komponenten: Hive besteht aus HCatalog zur Tabellen- und Speichermanagement und WebHCat zum Ausführen von MapReduce-Tasks, Pig-Abfragen oder zum Interagieren mit der Hive-Metadaten über die REST-API.
  • Features:
    • Unterstützt SQL-Abfragen für Data-Warehouse-Tasks wie ETL, Datenanalyse und Berichterstattung.
    • Die Daten werden in Speichersystemen wie HDFS oder HBase gespeichert; die Abfrageoperationen werden von Rechen-Engines wie Tez, Spark oder MapReduce ausgeführt.
    • Unterstützt prozedurale Sprachen, HPL-SQL und die Sub-Abfrage-Retrieval mit Hive LLAP, YARN und Slider-Unterstützung.

Grundlegende Daten-Einheiten in Hive

  • Datenbank: Namensraum, um Namenskonflikte zu vermeiden und die Sicherheit zu erhöhen.
  • Tabelle: Homogene Daten-Einheiten mit dem gleichen Schema (z.B. page_views-Tabelle mit Spalten wie Zeitstempel, userid, page_url).
  • Partition: Teilt die Daten in Partitionen auf der Grundlage von Schlüsseln auf, um eine effiziente Datenabfrage zu ermöglichen.
  • Bucket: Teilt die partitionierten Daten in Buckets auf der Grundlage von Hash-Funktionswerten auf, um die Abfrageeffizienz zu verbessern.

Hive-Datentypen

Hive ist für Data-Warehouse-Tasks, nicht für Online-Transaction-Processing (OLTP), konzipiert und konzentriert sich auf Skalierbarkeit, Leistung, Zuverlässigkeit und Fehlertoleranz. Es unterstützt verschiedene Eingangsformate und kann mit Verbindern in unterschiedlichen Formaten erweitert werden. Ein Verständnis der Hive-Architektur, der Daten-Einheiten und der Datentypen ist essentiell, um seine Funktionen in der Big-Data-Analyse zu nutzen.

Installation und Bereitstellung von Hive

Dieser Abschnitt konzentriert sich auf das Herunterladen und die Verzeichnis-Einstellungen, die Umgebungsvariablen-Einstellungen, die Metabase-Konfigurations-Einstellungen, die Hive-Systemparameter und die Initialisierung der Metabase.

Zuerst müssen Sie sich als Benutzer hadoop umschalten, um die nachfolgenden Operationen auszuführen. Doppelklicken Sie, um die Xfce-Terminal auf Ihrem Desktop zu öffnen, und geben Sie die folgenden Befehle ein:

su - hadoop

Tipp: Das Passwort ist das von dem Benutzer hadoop, also 'hadoop'.

Dann verwenden Sie den wget-Befehl, um die neueste stabile Version von Hive herunterzuladen. Wir haben hier die Version 2.3.3 von Hive gewählt:

sudo wget https://labexfile.oss-us-west-1.aliyuncs.com/courses/144/apache-hive-2.3.3-bin.tar.gz

Als Nächstes müssen Sie das heruntergeladene Installationspaket extrahieren. Geben Sie im Terminal folgenden Befehl ein:

tar -zxvf apache-hive-2.3.3-bin.tar.gz

Verwenden Sie das sudo-Recht, um das extrahierte Verzeichnis in das /opt-Verzeichnis zu verschieben. Wenn Sie das sudo-Recht nicht verwenden, können Sie möglicherweise nicht in das /opt-Verzeichnis schreiben:

sudo mv /home/hadoop/apache-hive-2.3.3-bin /opt/hive-2.3.3

Nachdem das Verzeichnis verschoben wurde, müssen Sie den Besitzer des Hive-Verzeichnisses auf den Benutzer hadoop und seine Benutzergruppe ändern. Geben Sie im Terminal folgenden Befehl ein:

sudo chown -R hadoop:hadoop /opt/hive-2.3.3

Tipp: Sie können ein weiteres Terminal öffnen, um die obigen Operationen mit sudo-Recht auszuführen.

labex:~/ $ ls -al /opt/
total 24
drwxrwxr-x 10 hadoop hadoop 4096 Mar 3 12:01 hive-2.3.3
...

Einstellungen von Umgebungsvariablen

Nachdem das Verzeichnis eingerichtet wurde, müssen Sie die Hive-Umgebungsvariablen einrichten, sodass HIVE_HOME auf das Installationsverzeichnis zeigt.

Öffnen Sie zunächst die .bashrc-Datei des Benutzers hadoop mit dem vim-Editor. Geben Sie im Terminal folgenden Befehl ein:

vim /home/hadoop/.bashrc

Fügen Sie am Ende der Datei den folgenden Inhalt hinzu. Der PATH muss je nach tatsächlicher Situation der aktuellen Experimentumgebung geändert werden. Der $PATH-Ausdruck wird verwendet, um auf den bestehenden Inhalt zu verweisen. Fügen Sie :$HIVE_HOME/bin direkt am Ende der PATH-Umgebungsvariablen hinzu:

export HIVE_HOME=/opt/hive-2.3.3
export PATH=$PATH:$HIVE_HOME/bin

Speichern Sie die Datei und beenden Sie den Editor, wenn die Bearbeitung abgeschlossen ist. Verwenden Sie dann den source-Befehl, um die oben genannten Umgebungsvariablen zu aktivieren.

In diesem Labor haben wir Hive vorinstalliert, so dass Sie die source-Umgebungsvariable nicht benötigen, aber bei Ihrer tatsächlichen Installation wird dieser Schritt individuell durchgeführt.

Konfiguration einrichten

Dies ist der Hive-Konfigurationsprozess. In diesem Schritt können Sie sich nur ansehen, ohne etwas auszuführen, da wir in diesem Labor bereits einen Hive vorinstalliert haben. Mit dem Befehl which hive können Sie überprüfen, dass er installiert ist. Die Erstellung der Datei muss jedoch durchgeführt werden, da dies die Anmeldeinformationen sind, mit denen wir feststellen, ob Sie die Prüfung bestehen oder nicht.

Metabase-Konfiguration

Bevor Sie Hive offiziell verwenden können, müssen Sie den Metadatenspeicher einrichten. Standardmäßig speichert Hive Metainformationen in einer eingebetteten Derby-Datenbank. Der Speicherort auf der Festplatte wird durch die Konfigurationsoption javax.jdo.option.ConnectionURL in der Hive-Konfigurationsdatei conf/hive-default.xml bestimmt. Standardmäßig ist dieser Ort ./metastore_db.

In diesem Labor verwenden wir jedoch MySQL als Speicher für die Metadaten. Daher müssen Sie die Hive-Konfigurationsdatei ändern.

Erstellen und öffnen Sie diese Konfigurationsdatei mit dem vim-Editor:

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>

Nachdem Sie die obigen Konfigurationsoptionen bearbeitet haben, speichern Sie die Datei und beenden 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 dann 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

Einstellungen von Hive-Systemparametern

Nachdem die Metabase konfiguriert wurde, müssen Sie die internen Hive-Konfigurationsoptionen einrichten, um den Hadoop-Ort, den Pfad zur internen Konfigurationsdatei usw. zu identifizieren.

Als erstes müssen Sie mit dem Befehl cp eine Kopie der Einstellungsschablone erstellen, damit diese wirksam wird.

Geben Sie im Terminal 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 dann die Datei hive-env.sh mit dem vim-Editor:

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

Nachdem Sie die obigen Konfigurationsoptionen bearbeitet haben, speichern Sie die Datei und beenden Sie den Editor.

Initialisierung der Metabase

Sobald alle Konfigurationsarbeiten abgeschlossen sind, können Sie mit der Initialisierung der Metabase beginnen.

Da die späteren verwendeten Daten auf HDFS gespeichert werden, müssen Sie HDFS im Voraus starten. Geben Sie im Terminal die folgenden Befehle ein, um HDFS zu starten:

start-dfs.sh
start-yarn.sh

Sie müssen jps eingeben, um den Dienststatus 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 es mit hdfs namenode -format initialisieren.

In diesem Labor haben wir die vorinstallierte Hive mit der u per-Datenbank initialisiert. Natürlich können Sie die gerade heruntergeladene Hive initialisieren, indem Sie folgenden Befehl verwenden.

/opt/hive-2.3.3/bin/schematool -initSchema -dbType mysql
Initialization script completed
schemaTool completed

Hier müssen Sie, wenn Sie die gerade heruntergeladene Hive zunächst initialisieren, den Pfad von HIVE_HOME in '~/.bashrc' auf den Pfad der gerade installierten Hive ändern und es mit source ausführen. Mein Rat ist, das nicht zu tun, weil unsere nachfolgenden Tests von Hive alle um die vorinstallierte Hive herum durchgeführt werden!

Wenn die Prompt-Nachricht angibt, dass die Initialisierung abgeschlossen ist, können Sie den Befehl hive verwenden, um die Befehlszeile zu betreten. Geben Sie im Terminal folgenden Befehl ein:

hive

Tipp: Geben Sie hive direkt in die Shell unserer vorinstallierten Hive ein, fügen Sie den absoluten Pfad hinzu, und Sie befinden sich in der gerade eingerichteten Hive-Shell!

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 Operationen von Hive

Als Nächstes lernen wir einige grundlegende Operationen in Hive. Neben einigen der in diesem Abschnitt erwähnten Operationsanweisungen finden Sie alle Hive-Anweisungen in seiner Sprachmanual. Sie können nach Abschluss dieses Abschnitts weitere Anweisungen ausprobieren.

Tabelle erstellen

Zunächst müssen Sie einige Daten erhalten. Die in diesem Abschnitt des Experiments verwendeten Daten sind hauptsächlich eine Logdatei, die den NginX-Server simuliert und zur Analyse der Seitenansichten der Website verwendet werden kann.

Öffnen Sie bitte ein weiteres Terminal und geben Sie in das Terminal die folgenden Befehle ein, um die Beispiel-Daten herunterzuladen:

su hadoop
cd ~
wget http://labfile.oss-cn-hangzhou.aliyuncs.com/courses/567/log_example.csv

Laden Sie dann die Datei 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

Das erste, was Sie tun müssen, nachdem Sie die Daten haben, ist, die Tabelle zu erstellen. Wenn Sie eine page_view-Tabelle für die obigen Daten erstellen möchten, müssen Sie die folgende Anweisung in der Hive-Befehlszeile eingeben:

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 jedem Spalten in der Tabelle ein passender Typ zugewiesen. Außerdem können wir Kommentare auf Spalten- und Tabellenebene anfügen. Darüber hinaus definiert die PARTITIONED BY-Klausel eine Partitionierungsspalte, die von der Datenspalte unterschiedlich ist. Die Partitionierungsspalte wird nicht mit der Datenspalte gespeichert. Wenn Sie auf diese Weise eine Partitionierungsspalte angeben, wird ein Zeilenumbruchzeichen als Separator für jede Zeile verwendet.

Wenn die Daten nicht im obigen Format vorliegen, können Sie das Feldseparator wie im folgenden Beispiel parameterisieren:

Die folgende Anweisung dient nur der Demonstration und muss 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 der Zeilenseparator durch den Separator im Hadoop-System und nicht durch Hive bestimmt wird, können wir den Zeilenseparator nicht manuell ändern.

Normalerweise wird die Tabelle, in der die Spaltendaten bestimmt sind, in einem Bucket gespeichert, was die effiziente Stichprobenahme der Datensatzabfrage erleichtert. Wenn es kein Bucket gibt, kann auch die Zufallsstichprobenahme der Tabelle abgeschlossen werden, aber es kann keine effiziente Stichprobenahme beim Scannen der gesamten Daten erreicht werden. Das folgende Beispiel zeigt, wie die Bucket-Speicherung für die page_view-Tabelle auf der userid-Spalte aktiviert wird.

Die folgende Anweisung dient nur der Demonstration und muss 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 userid-Spalte in der Tabelle durch eine Hash-Funktion in 32 Buckets aggregiert. In jedem Bucket wird die Daten in aufsteigender Reihenfolge nach viewTime sortiert. Diese Methode der Datenorganisation ermöglicht es Benutzern, aggregierte Spalten (hier die userid-Spalte) effektiv zu stichproben, und die Sortierfunktion ermöglicht es Datenmanagern, Abfragen durch bessere Datenstrukturen effizienter zu bewerten.

Die folgende Anweisung dient nur der Demonstration und muss 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 Zeile in der Tabelle in Bezug auf Feldnamen und Typen definiert, was der Typdefinition in anderen Programmiersprachen ziemlich ähnlich ist. Beachten Sie, dass Tabellennamen und Spaltennamen nicht case-sensitiv sind. IP Address of the User und der folgende COMMENT-Befehl zeigen, dass wir Kommentare auf Spalten- und Tabellenebene hinzufügen können. Darüber hinaus definiert die PARTITIONED BY-Klausel Partitionierungsspalten, die von den Datenspalten unterschiedlich sind. Wie bereits erwähnt, speichern sie tatsächlich keine Daten. Die CLUSTERED BY-Klausel gibt an, welche Spalte verwendet werden soll, um wie viele Buckets zu erstellen. Die ROW FORMAT DELIMITED-Klausel gibt an, wie Zeilen in einer Hive-Tabelle gespeichert werden sollen. Für formatierte Trennungen gibt diese Anweisung an, wie das Trennzeichen für ein Feld, das Trennzeichen für ein Element in einer Sammlung (Array oder Map) und das Trennzeichen für das Bestimmen des Schlüsselwerts der Trennmappe bestimmt werden soll, wobei die Zahlen in ASCII-Codierung vorliegen. STORED AS SEQUENCEFILE gibt an, dass die Daten in binärem Format auf HDFS gespeichert werden (genauer gesagt im Hadoop-Typ SequenceFile). Unter ihnen sind die Einstellungen in den ROW FORMAT- und STORED AS-Klauseln die Standardwerte, die Hive derzeit verwendet. Daher haben wir sie nicht explizit in der Anweisung geschrieben, die die Tabelle am Anfang erstellt hat.

Tabellen und Partitionen durchsuchen

Wenn Sie die vorhandenen Tabellen in Ihrem Lager auflisten möchten, können Sie die folgende Anweisung verwenden:

SHOW TABLES;

Wenn es viele Tabellen gibt, generiert die obige Anweisung eine Menge Rückgabedaten. Sie können den Bereich einschränken, indem Sie einen Präfix angeben. Beispielsweise können Sie die folgende Anweisung verwenden, um eine Tabelle mit dem Präfix page aufzulisten:

SHOW TABLES 'page.*';

Die Übereinstimmungsmuster in dieser Anweisung sind die gleichen wie die reguläre Ausdrucksyntax, und das Punktzeichen (.) stellt ein Platzhalter dar.

Wenn Sie die Partitionen einer Tabelle auflisten möchten, verwenden Sie die folgende Anweisung. Wenn die Tabelle keine partitionierte Tabelle ist, werden keine Informationen zurückgegeben:

SHOW PARTITIONS page_view;

Wenn Sie die Spalten und die Spaltentypen einer Tabelle auflisten möchten, können Sie die DESCRIBE-Anweisung verwenden:

DESCRIBE page_view;

Wenn Sie die Spalten der Tabelle und alle anderen Eigenschaften auflisten möchten, müssen Sie das EXTENDED-Schlüsselwort hinzufügen. Dies wird eine Menge Informationen ausgeben, die normalerweise für das Debugging verwendet werden:

DESCRIBE EXTENDED page_view;

Tabelle ändern

Wenn Sie eine vorhandene Tabelle umbenennen möchten, verwenden Sie die ALTER TABLE-Anweisung mit RENAME TO. Wenn eine Tabelle mit dem neuen Namen bereits existiert, wird ein Fehler zurückgegeben:

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)

Wir können auch die Spalten einer vorhandenen Tabelle umbenennen. Es ist jedoch wichtig zu beachten, dass Sie denselben Spaltentyp verwenden müssen und dass in jeder der vorhandenen Spalten ein Datensatz enthalten ist:

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');

Darüber hinaus können Sie neuen Spalten zu einer vorhandenen Tabelle hinzufügen:

ALTER TABLE new_page_view ADD COLUMNS (new_column INT COMMENT 'a new int column');

Beachten Sie, dass die Änderungen am Schema (wie das Hinzufügen einer Spalte) das Schema für die alte Partition der Tabelle beibehalten werden, um zu verhindern, dass es zu einer partitionierten Tabelle wird. Alle Abfragen, die auf diese Spalten zugreifen und auf der alten Partition ausgeführt werden, geben implizit Nullwerte oder die angegebenen Standardwerte für diese Spalten zurück.

Tabellen und Partitionen löschen

Da Hive als Datenlagerhaus konzipiert ist, ist das Löschen von Daten immer negativ. Daher ist die Operation zum Löschen einer Tabelle etwas umständlich. Mit dem DROP-Befehl auf der Tabelle werden alle auf der Tabelle erstellten Indizes implizit gelöscht.

Sie können die folgenden Befehle verwenden, um eine Tabelle zu löschen:

DROP TABLE new_page_view;

Daten laden und abfragen

In Hive sind das Laden von Daten und das Abfragen von Daten zwei verschiedene Operationen. In dieser Dokumentation wird beschrieben, wie Daten in eine Hive-Tabelle geladen werden.

Daten laden

Es gibt mehrere Möglichkeiten, um Daten in eine Hive-Tabelle zu laden. Benutzer können externe Tabellen erstellen, die auf bestimmte Orte in HDFS verweisen. In diesem Einsatz kann der Benutzer das put- oder copy-Befehl von HDFS verwenden, um die Datendatei in den angegebenen Ort zu kopieren und eine Tabelle zu erstellen, die auf diesen Ort verweist. Diese Tabelle wird alle relevanten Zeilenformat-Informationen enthalten.

Nachdem die Tabelle erstellt wurde, können Benutzer die Daten konvertieren und in jede andere Hive-Tabelle einfügen. Wir haben die Datei log_example.csv am Anfang in HDFS hochgeladen und sie in page_view umbenannt. Wenn wir sie in die entsprechende Partition der page_view-Tabelle laden möchten, können wir dies mit dem folgenden Befehl tun.

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 dann eine page_view-Tabelle für die endgültige Speicherung der Daten:

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;

Schließlich fügen Sie die Daten aus der externen Tabelle in die page_view-Tabelle 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';

Es kann einige Minuten dauern, bis die Daten in HDFS und dann in die page_view-Tabelle geladen werden.

...
Loading data to table default.page_view partition (dt=2015-05-17, country=us)
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 6.31 sec   HDFS Read: 369021 HDFS Write: 22943 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 310 msec
OK
Time taken: 25.304 seconds

Einfache Abfrage

Nachdem die Daten eingefügt wurden, können wir eine einfache Abfrage durchführen. Dies ähnelt einer üblichen SQL-Anweisung. Geben Sie die folgende Anweisung in der Hive-Befehlszeilenoberfläche 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 schließen

Wenn Sie mehr Hive-Aktionsanweisungen lernen möchten, können Sie die folgenden Erweiterungen lesen:

Wenn Sie damit fertig sind, können Sie den Befehl quit verwenden, um die Hive-Befehlszeilenoberfläche zu verlassen:

quit;

Natürlich sollten Sie nicht vergessen, den HDFS-Dienst auszuschalten. Geben Sie im Terminal folgenden Befehl ein:

stop-yarn.sh
stop-dfs.sh

Zusammenfassung

In dieser Sitzung werden die Architektur von Hive, die Installation und die Bereitstellung sowie die grundlegenden HQL-Anweisungen vorgestellt. Außerdem haben wir das Importieren von Daten mit den Beispiel-Daten gelernt.

Die wichtigsten Punkte, die erwähnt wurden, sind:

  • Hive-Architektur
  • Grundeinheit von Hive-Daten
  • Wie Hive bereitgestellt wird
  • Hive-HQL-Sprache

Im Allgemeinen müssen als Datenlagerhaus-Softwarepaket die Funktionen von Hive weiter erforscht werden. Halten Sie bitte die Gewohnheit, technische Materialien aktiv zu überprüfen, und lernen Sie die folgenden Kurse fort.