Anfassen und begreifen

Eine Spielwiese für Big Data mit docker

Eine Weiterführung der Big Data Serie mit einer Anleitung zum Ausprobieren.

In den letzten Artikeln haben wir eine Überblick über Big Data mit Hadoop gewonnen und uns HDFS im Einzelnen angeschaut. Alles nur in der Theorie.

Es wäre schön, alle Komponenten in einem Hadoop Cluster auch tatsächlich bei der Arbeit beobachten zu können. Mit Docker kannst Du ein komplettes Big Data Cluster im Kleinen betreiben. Das ist eine prima Möglichkeit, um mit Big Data zu spielen und es besser zu begreifen.

Im ersten Schritt setzen wir ein HDFS-Cluster auf. In weiterführenden Blogartikeln werden wir dieses Cluster um andere Komponenten des Hadoop-Ökosystems schrittweise erweitern.

Wir setzen docker-compose ein, um ein Container-Cluster aufzusetzen. Du benötigst also folgende Werkzeuge, um unser Beispiel auszuführen:

  • git, um dir die Quellen und Skripte von unserem öffentlichen Repository zu holen
  • docker und docker-compose, um das Cluster zu starten

Wir haben für Dich alles vorbereitet. Du musst grundlegende Kenntnisse in Git und Docker mitbringen und schon kann es losgehen.

Los gehts

Im GitHub-Repository finden sich die Skripte für unser kleines Beispiel. Wir gehen Schritt für Schritt durch das Beispiel.

Prüfe, ob deine Umgebung ok ist

docker version

docker-compose version

Die Version von docker sollte größer als 19.03 und die von docker-compose größer als 1.20 sein.

Checke den Quellcode aus

Um ein Hadoop-Cluster mit docker-compose aufzusetzen, benötigen wir ein Docker-Image von Hadoop. Wir nutzen dazu Images des Projekts big-data-europe.

Der Quellcode wird aus dem öffentlichen GitHub-Repository ausgecheckt. Dazu nutzt du den Git-Client deiner Wahl. Beispielsweise holst du dir mit dem CLI-Git-Client folgendermaßen das Git-Repository über HTTPS:

git clone https://github.com/iks-gmbh-playground/bigdata-spielwiese.git

Starte das Cluster

Wechsele relativ zum Verzeichnis, in welches du das Repository ausgecheckt hast, in das Unterverzeichnis hdfs.

Das wir in einer späteren Ausbaustufe dieses Tutorial mehrere nutzen möchten, welche alle im selben Netzwerk  miteinander kommunizieren, legen wir zuerst ein Netzwerk an

docker network create bigdata-spielwiese-network

Da der WebClient von HDFS einige Schwächen aufweist, nutzen wir den WebClient von Hue. Das zugehörige Docker-Image ist von Hause aus nicht an die Version 3.x von HDFS angepasst. Daher müssen wir an dem Hue-Image einige Anpassungen vornehmen.

Vor dem ersten Start des Clusters musst du daher

docker-compose build

ausführen.

Mit

docker-compose up -d

startest du das Cluster. Das Cluster besteht aus einem HDFS-Namenode und zwei HDFS-Datanodes. Zusätzlich wird der WebClient von Hue gestartet.

(Abbildung 1: Das Cluster enthält einen Namenode, zwei Datanodes und den Hue WebClient)

Hole dir Testdaten

Grundsätzlich können jetzt beliebige Daten in das HDFS-Cluster geladen werden. Gute Testdaten, die auch für die data-science-Auswertung taugen, finden sich beispielsweise auf Movielens. Dort finden sich Daten zu Filmen sowie Filmbewertungen und Einschätzungen von Kinobesuchern. Alle Dateien sind im CSV-Format abgelegt. Unter https://files.grouplens.org/datasets/movielens/ml-25m-README.html findet sich eine detaillierte Beschreibung der einzelnen Dateien.

Am besten passt der kleine Datenbestand ml-latest-small.zip.

(Abbildung 2:  Lade den kleinen Datenbestand ml-latest-small.zip von https://grouplens.org/datasets/movielens/ ) 

Folgende Dateien stehen nach dem Download und Entpacken zur Verfügung:

movies.csv

Informationen zu Filmen

ratings.csv

Bewertung von Filmen einzelner Nutzer

links.csv

Beschreibung/Etikettierung  von Filmen einzelner Nutzer

Arbeiten mit dem Cluster

Browse das HDFS

Der WebClient von Hue bietet die Möglichkeit, im Browser Dateien zu lesen und hochzuladen. Er bietet dazu eine Weboberfläche an.

Mit  http:/$DOCKER_HOST:8088/filebrowser kannst du den Inhalt des HDFS browsen. Zur Bestimmung von $DOCKER_HOST siehe unten.


Docker Host

Als Docker Host wird der Gastgeberrechner bezeichnet, auf dem Docker und die Docker-Container laufen.
Unter Windows und macOS sind alle freigeschalteten Port von Docker über localhost erreichbar und du kannst localhost als DOCKER_HOST nutzen.
Darüber hinaus kann der Host über den DNS-Name host.docker.internal erreicht werden.
Für einen Unix/Linux-Host kannst du die IP-Adresse durch hostname -i ermitteln.


Beim ersten Aufruf des WebClients wirst du gebeten, einen Admin-User anzulegen, den du frei wählen kannst. Zu diesem User wird im HDFS ein Verzeichnis /user/<username> angelegt, an dem <username> volle Rechte in HDFS besitzt. Wir nehmen der Einfachheit halber an, dass du <username>=admin gewählt hast.

Mit Drag & Drop kannst du nun Dateien über die Weboberfläche in HDFS laden.

(Abbildung 3:  Anlegen einer Admin-Users im Hue WebClient)

 

Nutze das CLI (Command Line Interface) von HDFS

Der HDFS bietet einen CLI-Client an, die sogenannte FS Shell. Diese ist auf dem Namenode und jedem Datanode zu finden. Um es nutzen zu können, musst du in den Container und dort die Befehle ausführen.

Dazu kopieren wir zuerst die Testdaten in den Container namenode. Die Datei ml-latest-small.zip wurde in das Verzeichnis <download-verz. fuer movielens> entpackt . Von dort kopieren wir die Dateien jetzt in den Container namenode.

Als Unterstützung haben stellen wir die Datensätze auch in unserem GitHub-Repository [1] unter testdaten/movielens/ml-latest-small bereit. Das kannst du als <download-verz. fuer movielens> nutzen.

docker cp <download-verz. fuer movielens>/ml-latest-small/ namenode:/tmp

Jetzt verbinden wir uns mit dem Container namenode und öffnen dort eine bash-shell.

docker exec -it namenode /bin/bash

Jetzt greifen wir auf HDFS mit der FS Shell zu. Lege im ersten Schritt ein Verzeichnis /user/admin/movielens in HDFS an und gib admin alle Rechte an diesem Verzeichnis. (admin ist der <username>, den du beim Hue WebClient angelegt hast)

# hdfs dfs -mkdir -p /user/admin/movielens 
# hdfs dfs -chown admin /user/admin/movielens

Kopiere movies.csv nach HDFS

# hdfs dfs -put  /tmp/ml-latest-small/movies.csv /user/admin/movielens

Schau dir die Inhalte des Verzeichnisses an.

# hdfs dfs -ls /user/admin/movielens

FS Shell bietet weitere Möglichkeiten, mit dem HDFS zu experimentieren. Ein ausführliche Dokumentation findet sich unter [3].

Lösche das Clusters

Mit

docker-compose down –remove-orphans

entfernst du das Hadoop-Cluster rückstandsfrei. Insbesondere sind alle Daten in HDFS verloren.

Referenzen

[1] GitHub-Repository der Sourcen https://github.com/iks-gmbh-playground/bigdata-spielwiese.git

[2] Installation von Docker : https://docs.docker.com/get-docker/

[3] big-data-europe : https://github.com/big-data-europe/docker-hadoop

[4] FS Shell : https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html


Dieser Artikel ist ein "Hands-On" zu Artikel 3 der Big Data Serie. Hier nochmals alle Artikel im Überblick:

Artikel 01 der Big Data Serie: Hilfe, wo soll ich anfangen?

Artikel 02 der Big Data Serie: Wer hängt im Hadoop-Ökosystem mit wem zusammen?

Artikel 03 der Big Data Serie: Wohin mit meinen Daten?

Artikel 04 der Big Data Serie: Wie verpacke ich meinen Daten?

 

Jetzt teilen: