Verwendung von Apache Hive mit ElasticSearch

Verwendung von Apache Hive mit ElasticSearch

  • Orchestrierung
6 Minuten Lesezeit Aktualisiert Oct 24, 2017

Auf einen Blick: Die Nutzung von Apache Hive mit ElasticSearch verbessert die Datenanalyse, indem SQL-Abfragen auf Webserver-Logs ermöglicht werden. Der Leitfaden beschreibt Installations-, Konfigurations- und Datenladeprozesse.

  • Hive ermöglicht SQL-Abfragen und benutzerdefinierte Funktionen für ein verbessertes Datenmanagement.
  • ElasticSearch ist unerlässlich für die Speicherung und Abfrage von Logs und ist entscheidend für Cybersicherheit und Betriebsüberwachung.

Hier erklären wir, wie man Apache Hive mit ElasticSearch verwendet. Wir kopieren einen Apache-Webserver, loggen uns in ElasticSearch an und verwenden dann Hive SQL, um ihn abzufragen.

Warum macht man das? Hive erlaubt es, benutzerdefinierte Funktionen zu schreiben und SQL (eigentlich HQL) zu verwenden, was einfacher zu handhaben ist und mehr Funktionen bietet als ElasticSearch, dessen Abfragesprache Lucene Query ist. Zum Beispiel kann man Datensätze mit Hive verknüpfen. Und man kann fortschrittliche Analysen gegen Hive mit Spark ML (Machine Learning) oder einem anderen Tool ausführen.

Wie wir bereits erwähnt haben, sind einige Tutorials geschrieben, um zu zeigen, wie man Hive-Daten in ElasticSearch speichert. Das ist jedoch nicht logisch, da das Ziel von ES darin besteht, Logs von Webservern, Firewalls usw. zu sammeln und sie an einem Ort (ES) zu speichern, wo sie abgefragt werden können. Dies dient der Cybersicherheit und der Betriebsüberwachung.

ElasticSearch bietet den elasticsearch-hadoop Connector, mit dem Sie ES-Dokumente lesen (und schreiben) können. Was passiert, ist, dass Sie Daten in Hive-Tabellen aus ES erstellen. Hive speichert die Daten nicht in ES.

Hive installieren

Installiere zuerst Hive nach diesen Anweisungen. Danach läuft MySQL. Wenn nicht, bekommst du den Fehler org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient nicht instanziieren.

Und Hadoop installieren.

Dann lade den Hive-Hadoop-Connector herunter, lade einen Hive-Hadoop-Connector herunter und kopiere ihn nach $HIVE_HOME/lib

    cp /home/walker/Documents/jars/elasticsearch-hadoop-5.5.2.jar $HIVE_HOME/lib

Starte Hadoop mit start-dfs.sh. Es ist nur notwendig, Yarn zu starten, wenn du auf einem Cluster spielst.

Start Hive

Beginne mit Bienenstock mit:

    hive

Oder du kannst es im Debug-Modus ausführen, um Fehler mit deiner Installation zu überprüfen und dann zu beheben. Wenn du zum Beispiel vergisst, das Connector-Jar in den Lib-Ordner zu kopieren, wird ein Klassenfehler "nicht gefunden" angezeigt.

    hive --hiveconf hive.root.logger=DEBUG,console

Du kannst auch hier stdout sehen /tmp/(deine Benutzeridentität)/hive.log

Installieren Sie ElasticSearch und laden Sie einige Daten

Zu erklären, wie man ES installiert, liegt außerhalb des Umfangs dieser Daten. Sie können hier deren Anweisungen befolgen.

Beispieldaten herunterladen und hochladen

Wir brauchen einige Daten zur Analyse. Sie können hier ein Beispiel für ein Apache-Protokoll herunterladen.

Du musst Unrar installieren, um es zu entpacken:

    unrar x apache-access_log.rar

Dann kopiere diese Apache Logstash-Konfiguration von hier und nenne sie apache.conf. Leg sie in den Root-Ordner der Logstash-Installation.

    input {
file {
path => "/tmp/access_log"
start_position => "beginning"
}
}< filter {
if [path] =~ "access" {
mutate { replace => { "type" => "apache_access" } }
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
}
stdout { codec => rubydebug }
}

Dann starte Logstash mit dieser Konfigurationsdatei.

    bin/logstash -f apache.conf

Dann kopieren Sie die Daten in den /tmp/access_log Dateipfad, der in der apache.conf-Datei angegeben ist.

    cp access_log /tmp/

Der Bildschirm beginnt, die Ausgabe so zu widerhallen, während Logstash arbeitet:

    {
"path" => "/tmp/access_log",
"@timestamp" => 2017-09-21T12:16:33.346Z,
"@version" => "1",
"host" => "eurovps",
"message" => "d97082.upc-d.chello.nl - - [12/Mar/2004:13:25:45 -0800] \"GET /SpamAssassin.html HTTP/1.1\" 200 7368\r",
"type" => "apache_access",
"tags" => [
[0] "_grokparsefailure"
]
}

Wenn Sie ES nun über die Kommandozeile abfragen, sollten Sie den neuen Index und die Anzahl der Dokumente sehen:

    curl http://localhost:9200/_cat/indices?v
health status index      uuid      pri rep docs.count docs.deleted store.size pri.store.size
yellow open logstash-2017.09.21 DBRrjIlvQtG67ddb7qUnxw 5 1 1550

Dann öffne Kibana und sieh dir auch dort die Daten an.

Sagen Sie nun Hive, sie sollen diese Daten lesen, indem sie eine Tabelle wie diese erstellen:

    CREATE EXTERNAL TABLE apachelog (
path string,
timex timestamp,
Version int,
Host string,
Message string,
Index string
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES( 'es.nodes.wan.only' = 'true', 'es.resource' = 'logstash-2017.09.21', 'es.query' = '?q=*');

es.resource ist der ES-Index.

Es.nodes.wan.only löst Netzwerkverbindungsprobleme (also wenn Hive sich darüber beschwert).

Der Host wird standardmäßig auf localhost gesetzt.

ES erstellt Folgendes:

    describe apachelog;
OK
path          string          from deserializer
timex         timestamp       from deserializer
version       int             from deserializer
host          string          from deserializer
message       string          from deserializer
index         string          from deserializer

Wir haben grok nicht richtig eingerichtet, sonst hätte es das Nachrichtenfeld in Apache geparst. Aber wir können die IP-Adresse selbst so herausziehen:

    select regexp_extract(message, '^([0-9]{1,3}\\.){3}[0-9]{1,3}',0) as ip from apachelog;

Jetzt können wir eine Abfrage ausführen, um zu zeigen, welche IP-Adressen am häufigsten auf den Webserver zugegriffen haben. Das machen wir in zwei Schritten:

  1. Erstelle eine Zwischentabelle im IPTAB.
  2. Abfragetabelle iptab.

Hier ist die Zählung:

    create table iptab as select regexp_extract(message, '^([0-9]{1,3}\\.){3}[0-9]{1,3}',0) as ip from apachelog;

Hier ist die Zählung:

    select count(ip) as c, ip from iptab group by ip order by c desc;
452        64.242.88.10
270         10.0.0.153
20                    207.195.59.160
14                    128.227.88.79
14                   212.92.37.62
13                    203.147.138.233
12                    195.246.13.119
7          145.253.208.9
7          142.27.64.35
4          194.151.73.43
4          61.165.64.6
4          80.58.14.235
4          208.247.148.12
3          67.131.107.5
3          61.9.4.61
3          80.58.33.42
2          200.160.249.68
1          80.58.35.111
1          66.213.206.2
1          64.246.94.152
1          64.246.94.141
1          4.37.97.186
1          219.95.17.51
1          216.139.185.45
1          213.181.81.4
1          200.222.33.33
1          195.230.181.122
1          195.11.231.210
1          12.22.207.235
1          212.21.228.26

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

Mehr aus Orchestrierung

Abonnieren Sie The Brief

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

Danke

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.