Hadoop-Cluster mit Debian 9 aufsetzen

Im Rahmen einer Forschungsarbeit beschäftige ich mich mit Spark auf einem Hadoop-Cluster. Ich habe daher ein wenig Spielzeug bekommen und wollte mal sehen, wie geeignet das System für uns ist. Der Testaufbau soll vor allem auch zeigen, ob man große Daten auch mit geringen Ressourcen gut verarbeiten kann.

Die Maschinen

Ingesamt 7 Desktop-Rechner mit

  • i7-2600 @3,4 GHz mit 4 Kernen
  • 500GB HDD
  • 8 GB RAM

Ich weiß, die Specs sind laut Empfehlungen viel zu klein für ein Hadoop-Cluster, aber der Test soll auch zeigen, wie weit man mit geringen Ressourcen kommt.

Das Betriebssystem

Mal wieder steht man vor der Wahl des Betriebssystem. Ich fühle mich eigentlich auf Arch am wohlsten, da ich aber weniger Arbeit mit der Wartung der Maschinen als vielmehr mit Hadoop verbringen möchte, hab ich mich für Debian 9 entschieden.

Festplattenkonfiguration

  • 30GB: /
  • 8GB: SWAP
  • Rest für /home/

Netzwerkkonfiguration

Wir arbeiten ein einem abgeschottenen Netzwerk innerhalb der Hochschule. Die IP-Adressen sind eigentlich egal und dienen nur mir als Gedächtnisstütze ;). Wichtig ist nur, dass man die Hosts-Datei /etc/hosts entsprechend anpasst:

192.168.123.90 hadoop-master
192.168.123.91 hadoop-slave-1
192.168.123.92 hadoop-slave-2
192.168.123.93 hadoop-slave-3
192.168.123.94 hadoop-slave-4
192.168.123.95 hadoop-slave-5
192.168.123.96 hadoop-slave-6

tmux dein Freund zur Administration vieler Maschinen

Für die Administration vieler Maschinen ist tmux quasi unverzichtbar. Ich verwende dazu noch das tool tmuxinator mit folgender Konfiguration:

name: hadoop
root: ~/
windows:
  - editor:
      layout: tiled
      synchronize: after
      panes:
        - ssh hadoop@192.168.123.90
        - ssh hadoop@192.168.123.91
        - ssh hadoop@192.168.123.92
        - ssh hadoop@192.168.123.93
        - ssh hadoop@192.168.123.94
        - ssh hadoop@192.168.123.95
        - ssh hadoop@192.168.123.96
  - server: bundle exec rails s

Installation Hadoop

Ich habe mich an der Anleitung http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/ClusterSetup.html orientiert und bilde hier nur die wichtigsten Schritte ab.

Zunächst die neuste Java-Version und rsync installieren:

sudo apt-get install openjdk-8-jdk rsync

SSH Public-Key Authentifizierung für alle Maschinen

Der master sollte auf alle slaves Zugriff haben. Daher habe ich auf dem master einen Schlüssel erstellt und diesen auf die anderen Maschinen verteilt.

Installation und Konfiguration des Masters

Die folgenden Arbeiten werden zunächst nur auf dem Master vorgenommen. Die neuste Version von Hadoop herunterlade und entpacken:

mkdir /opt/hadoop
cd /opt/hadoop/
wget http://www-eu.apache.org/dist/hadoop/common/hadoop-2.8.1/hadoop-2.8.1.tar.gz
tar -xzf hadoop-1.2.0.tar.gz
mv hadoop-2.8.1 hadoop
chown -R hadoop:hadoop /opt/hadoop/

Nun müssen einige files auf dem Master angepasst werden:

  • /opt/hadoop/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
  • /opt/hadoop/hadoop/etc/hadoop/core-site.xml
<configuration>
	<property>
		<name>fs.default.name</name> 
		<value>hdfs://hadoop-master:9000/</value>
	</property>
	<property>
		<name>io.file.buffer.size</name>
		<value>131072</value>
	</property>
</configuration>
  • /opt/hadoop/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
	<property> 
		<name>dfs.name.dir</name> 
		<value>/home/hadoop/hadoop/dfs/name</value> 
	        <final>true</final> 
	</property> 
</configuration>
  • /opt/hadoop/hadoop/etc/hadoop/slaves
hadoop-slave-1
hadoop-slave-2
hadoop-slave-3
hadoop-slave-4
hadoop-slave-5
hadoop-slave-6

Installation und Konfiguration der Slaves

Nun müssen die Files auf alle slaves verteilt werden (hier hilft wieder tmux).

scp -r /opt/hadoop/hadoop hadoop-slave-1:/opt/hadoop
scp -r /opt/hadoop/hadoop hadoop-slave-2:/opt/hadoop
scp -r /opt/hadoop/hadoop hadoop-slave-3:/opt/hadoop
scp -r /opt/hadoop/hadoop hadoop-slave-4:/opt/hadoop
scp -r /opt/hadoop/hadoop hadoop-slave-5:/opt/hadoop
scp -r /opt/hadoop/hadoop hadoop-slave-6:/opt/hadoop

Nun auf den Slaves noch folgendes Config-File anpassen:

  • /opt/hadoop/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
	<property> 
		<name>dfs.name.dir</name> 
		<value>/home/hadoop/hadoop/dfs/name</value> 
	        <final>true</final> 
	</property> 
</configuration>

Und fertig ist die komplette Konfiguration. Nund muss das HDFS formatiert werden:

/opt/hadoop/hadoop/bin/hdfs namenode -format <cluster_name>

Starten und Beenden der Dienste

Am Ende sollten verschiedene Dienste gestartet werden. Dazu zunächst in folgendes Verzeichnis wechseln:

  • /opt/hadoop/hadoop/sbin/
# Starten der HDFS Namenode und Datanodes
./start-dfs.sh
# Starten der YARN Prozesse
./start-yarn.sh
# Starten des WebAppProxy Servers
./yarn-daemon.sh --config /opt/hadoop/hadoop/etc/hadoop/ start proxyserver
# Starten des MapReduce JobHistory Servers
mr-jobhistory-daemon.sh --config /opt/hadoop/hadoop/etc/hadoop/ start historyserver

Möchte man die Server beenden können folgende Befehle verwendet werden:

# Stoppen der HDFS Namenode und Datanodes
./stop-dfs.sh
# Stoppen der YARN Prozesse
./stop-yarn.sh
# Stoppen des WebAppProxy Servers
./yarn-daemon.sh --config /opt/hadoop/hadoop/etc/hadoop/ stop proxyserver
# Stoppen des MapReduce JobHistory Servers
mr-jobhistory-daemon.sh --config /opt/hadoop/hadoop/etc/hadoop/ stop historyserver

Webinterfaces

Nach dem Starten aller Dienste, sollten folgende Dienste erreichbar sein (IP-Addresse ist diejenige wo auch der Service läuft, in dieser Beschreibung der Master; Port ist jeweils der Standardport):

  • NameNode: http://192.168.123.90:50070
  • ResourceManager: http://192.168.123.90:8088
  • MapReduce JobHistory Server: http://192.168.123.90:19888

Eine Antwort auf „Hadoop-Cluster mit Debian 9 aufsetzen“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.