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:
- Erstelle eine Zwischentabelle im IPTAB.
- 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
ElasticSearch-Leitfaden
- ElasticSearch Tutorial für Anfänger: ElasticSearch Grundlagen
- Verwendung von Apache Hive mit ElasticSearch
- Verwendung von ElasticSearch mit Apache Spark
- Curl ElasticSearch Befehle Spickzettel
- Spark ElasticSearch Hadoop-Update und Upsert Beispiel und Erklärung
- Wie man Apache Spark-Daten mit Python in ElasticSearch schreibt
- ElasticSearch-Suchsyntax sowie boolesche und Aggregationssuchen
- ElasticSearch verschachtelte Abfragen: Wie man nach eingebetteten Dokumenten sucht
- ElasticSearch Joins: Has_Child, Has_parent Abfrage
- Wie man einen elastischen Cluster der Version 7 einrichtet
- Wie man Filebeat für nginx und ElasticSearch konfiguriert
- Beats und Logstash verwenden, um Logs an ElasticSearch zu senden
- Wie man eine CSV-Datei mit Logstash in ElasticSearch lädt
- ElasticSearch-Aggregationen erklärt
- Was ist der ELK-Stack?
- Logstash 101: Verwendung von Logstash in einer Datenverarbeitungspipeline
- Verwendung von Kibana zur Ausführung von Abfragen in ElasticSearch mit Lucene und Kibana Query Language
- ElasticSearch Maschinelles Lernen
- Wie man Elastic Enterprise Search installiert
- Wie man Elastic Enterprise Search mit GitHub verwendet
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.