Eine Einführung in Hive

Eine Einführung in Hive

  • Künstliche Intelligenz
6 Minuten Lesezeit Aktualisiert Apr 25, 2017

Auf einen Blick: Hive vereinfacht das Datenmanagement in Hadoop, indem es Benutzern ermöglicht, Tabellen zu erstellen und SQL-ähnliche Abfragen auszuführen, die im Hintergrund MapReduce-Jobs generieren. Die Installation erfordert Apache Hadoop und MySQL zur Metadatenspeicherung.

  • Hive bietet eine SQL-Oberfläche für Hadoop, die die Datenverarbeitung erleichtert.
  • Die Installation beinhaltet die Einrichtung von Hadoop und die Konfiguration von MySQL für die Metadatenspeicherung.

Überblick

Hive ist Apache Pig sehr ähnlich. Es erlaubt dir, Tabellen zu erstellen und externe Dateien mit SQL in Tabellen zu laden. Dann erstellt es MapReduce-Jobs in Java. Java ist eine sehr wortreiche Sprache, daher ist die Verwendung von Pig und Hive einfacher.

Manche sagen, Hive sei ein Data-Warehouse-Tool (kurz gesagt bedeutet das, dass ein RDBMS Analysen gemacht hat, bevor Hadoop erfunden wurde). Tatsächlich kann man Apache Sqoop verwenden, um Daten aus einer relationalen Datenbank in Hive oder Hadoop zu laden.

play

Installation

In diesem Dokument führen wir Hive hauptsächlich anhand von Beispielen vor. Du musst zuerst Apache Hadoop installieren. Dann kannst du MySQL installieren, um Metadaten zu speichern. (Oder du könntest Derby verwenden. Hier verwenden wir MySQL). Hive erstellt Daten in Hadoop.

Installieren Sie also zuerst Hadoop. Führen Sie dann diese Schritte aus:

    apt-get install mysql-server
apt-get install libmysql-java

Lade Hive herunter und entpacke sie in /usr/local/hive. Dann setze in .bashrc:

Erstellen Sie diesen Softlink:

    export HIVE_HOME=/usr/local/hive/apache-hive-2.0.1-bin
export PATH=$PATH:$HIVE_HOME/bin

Erstellen Sie diesen Softlink:

    ln -s /usr/share/java/mysql-connector-java.jar $HIVE_HOME/lib/mysql-connector-java.jar

Dann öffne MySQL, um das Schema zu erstellen, usw.:

    mysql -u root -p
mysql> CREATE DATABASE metastore;
mysql> USE metastore;

Hier verwenden Sie das Schema, das am nächsten der Version entspricht, die Sie verwenden. (In diesem Tutorial verwenden wir Hive 2.0.1, aber es gibt kein 2.0.1-Schema. Deshalb haben wir 2.0.0 verwendet.)

    mysql> SOURCE /usr/local/hive/apache-hive-2.0.1-bin/scripts/metastore/upgrade/mysql/hive-schema-2.0.0.mysql.sql

mysql> CREATE USER 'hiveuser'@'%' IDENTIFIED BY password';

mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'password';
mysql>  flush privileges;

Jetzt edit $HIVE_HOME/conf/hive-site.xml:

    javax.jdo.option.ConnectionURL
       jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true
       metadata is stored in a MySQL server
    
    
       javax.jdo.option.ConnectionDriverName
       com.mysql.jdbc.Driver
       MySQL JDBC driver class
    
    
       javax.jdo.option.ConnectionUserName
       hiveuser
       user name for connecting to mysql server
    
    
       javax.jdo.option.ConnectionPassword
       password
       password for connecting to mysql server

Wenn du Hadoop als Cluster eingerichtet hast, musst du vielleicht den nächsten Befehl ausführen. Du wirst wissen, ob das der Fall ist, wenn du einen Fehler dazu bekommst.

    $HADOOP_HOME/bin/hadoop dfsadmin -safemode leave

Wenn du Spark installiert hast, könntest du das ausführen, um eine Warnmeldung zu entfernen.

    unset SPARK_HOME

Jetzt läuft die Hive-Hülle:

    hive

Externe CSV-Datei laden

Vieles von dem, was man mit Hive macht, ist, externe Dateien zu laden, die in Hadoop gespeichert sind, damit man mit SQL arbeiten kann. Hier ist ein Beispiel.

Laden Sie diese Datei herunter (es handelt sich um ein SSH-Log), öffnen Sie sie dann mit Google Sheets oder Excel oder verwenden Sie sed und vi, um die Leerzeichen durch Kommas zu ersetzen, sodass sie komma-begrenzt ist.

Dann sieht der obere Teil der Datei so aus:

    1331901012,CTHcOo3BARDOPDjYue,192.168.202.68,53633,192.168.28.254,22,failure,INBOUND,SSH-2.0-OpenSSH_5.0,SSH-1.99-Cisco-1.25,-,-,-,-,-
1331901030,CBHpSz2Zi3rdKbAvwd,192.168.202.68,35820,192.168.23.254,22,failure,INBOUND,SSH-2.0-OpenSSH_5.0,SSH-1.99-Cisco-1.25,-,-,-,-,-

Kopiere jetzt die Datei nach Hadoop:

    hadoop fs -put /home/walker/Downloads/ssh.csv /data/ssh/

Beachte, dass du den Verzeichnisnamen und nicht den Namen der Datei in Hadoop eingetragen hast.

Dann laden wir die Datei und erstellen das Schema in einem Schritt:

    CREATE EXTERNAL TABLE IF NOT EXISTS sshlog(
sshtime STRING,
sshkey STRING,
sourceIP STRING,
socket STRING,
targetIP STRING,
port STRING,
status STRING,
direction STRING,
software STRING,
device STRING,
junk1 STRING,
junk2 STRING,
junk3 STRING,
Junk4 STRING,
Junk5 STRING )
   COMMENT 'ssh log'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    STORED AS TEXTFILE
    location '/data/ssh/';

Python benutzerdefinierte Funktion (UDF)

Bevor wir einige SQL-Befehle zeigen (technisch heißen sie HQL, Hive Query Language), zeigen wir, wie man ein Python-UDF schreibt:

Erstellen Sie das Python-Programm ssh.py. Im Folgenden erklären wir, wie es funktioniert.

    import sys
	import datetime
	import re

def bi(s):
    r='(\d+)\.(\d+)\.(\d+)\.(\d+)'
    g=re.search('(\d+)\.(\d+)\.(\d+)\.(\d+)',s)
    if g:
        return bin(int(g.group(1))) + bin(int(g.group(2))) + bin(int(g.group(3)))

for line in sys.stdin:
	x, y, z = line.strip().split('\t')
	print x,bi(y),bi(z)

Füge es hinzu, damit Hive diesen Befehl in der Hive-Shell ausführen kann.

    add file /home/walker/Downloads/ssh.py

Führen Sie dann diese Transformationsoperation aus, wobei das Python-UDF aufgerufen wird:

    SELECT TRANSFORM (sshtime, sourceip, targetip) USING 'python /home/walker/Downloads/ssh.py' as (sshtime, sourceIP, targetip) FROM sshlog;

1332017778 0b110000000b101010000b11001010 0b110000000b101010000b10101	NULL	NULL
1332017793 0b110000000b101010000b11001010 0b110000000b101010000b10101	NULL	NULL

Die Python-Funktion arbeitet mit stdin und stdout. Wir teilen die Eingabe in ein Zeit- und dann zwei IP-Adressfelder auf. Dann führen wir eine Funktion aus, um die IP-Adresse in ein Bitformat umzuwandeln. Die TRANSFORM-Anweisung bedeutet, dass diese drei Werte an das UDF weitergegeben werden.

Übung: Warum gibt es 2 Null-Spalten zurück?

Tabellen-Einfügedaten erstellen

Nein, wir gehen zurück und machen etwas Einfacheres – erstellen eine Tabelle und fügen einige Daten ein, um HQL-Funktionen zu veranschaulichen.

Zuerst erstelle eine Tabelle. Leute, die SQL kennen, werden sehen, dass es fast dieselbe Syntax hat.

    create table students (student string, age int);

Füge dann einige Daten hinzu:

    insert into table students values('Walker', 33);
insert into table students values('Sam', 33);
insert into table students values('Sally', 33);
insert into table students values('Sue', 72);
insert into table students values('George', 56);
insert into table students values('William', 64);
insert into table students values('Ellen', 24);
insert into table students values('Jose', 72);
insert into table students values('Li', 56);
insert into table students values('Chris', 64);
insert into table students values('Ellen', 24);
insert into table students values('Sue', 72);
insert into table students values('Ricardo', 56);
insert into table students values('Wolfgang', 64);
insert into table students values('Melanie', 24);
insert into table students values('Monica', 36);

Auswahl

Jetzt können wir reguläre SQL-Befehle darüber ausführen. Denken Sie daran, dass dies keine relationale Datenbank ist. Hadoop, wie Sie sich erinnern werden, erlaubt kein Aktualisieren von Dateien: nur Hinzufügen und Löschen. Es erstellt also für jede Operation neue Dateien.

    select count(*) from students;

Hier können wir alle Schüler finden, deren Geburtstag ein Vielfaches von 3 ist, indem wir die modulo (teilbar durch) Funktion verwenden. (Hive hat viele mathematische Funktionen.)

    select age,pmod(age,3) from students where pmod(age,3) = 0;

Ohne Diskriminierung älterer Personen erstellen wir nun zwei neue Tabellen: eine mit Personen über 45 und eine für jüngere Personen:

    create table old as select * from students where age > 45;

eate table young as select * from students where age < = 45;

Tritt bei.

Nun können wir den Schnittpunkt zweier Tabellen herstellen, indem wir Schüler aus der alten und der neuen Tabelle zeigen, deren Name drei Buchstaben lang ist:

Es antwortet:

    select young.student, old.student from young join old on (length(young.student) = 3) and (length(old.student) = 3);

Es antwortet:

    OK
Sam	Sue
Sam	Sue

Karten

Hive unterstützt Maps, Structs und komplexe Array-Typen. Aber es unterstützt noch nicht die Möglichkeit, Daten mit SQL hinzuzufügen. Wir zeigen also unten die etwas umständliche Methode.

Zuerst erstellen Sie eine Tabelle mit einer Map-Spalte, also eine (Schlüssel->Wert-)Spalte:

    create table prices(product map);

Jetzt verwenden wir die oben erstellte Studententabelle als Proxy für diese Einfügungsoperation. Dafür können Sie jede beliebige Tabelle verwenden

    insert into prices select map("abc", 1) from students limit 1;

Jetzt können Sie die Daten sehen, die wir gerade eingefügt haben:

    select * from prices;
OK
{"abc":1}

Wohin als Nächstes gehen

Von hier aus gibt es viele Bereiche, in denen du dich auf dein Lernen konzentrieren kannst, da Hive viele Funktionen bietet. Zum Beispiel kannst du über Partitionen, den Dezimaldatentyp, das Arbeiten mit Daten, die Nutzung von Hive auf Amazon und die Nutzung von Hive mit Apache Spark lernen. Du könntest dich über Beeline informieren, eine neuere Hive-Kommandozeile-Schnittstelle. (Beeline wird in Zukunft den Hive-Cli ersetzen.) Und du kannst dich mit architekturähnlichen Themen wie SerDe beschäftigen, dem Hive-Serializer-Deserializer, und Hive-Dateispeicherformaten.

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus Künstliche Intelligenz

Interessieren Sie sich für mehr von BMC?

The Brief ist unsere monatliche E-Mail zum Mainframe und zur Enterprise-Orchestrierung: Recherchen, Kundenberichte, Produktnachrichten, Events.

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Sie haben The Brief abonniert

Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.