Inhaltsverzeichnis
Eine Hadoop 2.4 Test Umgebung installieren und konfigurieren
Ziel: Hadoop Cluster für den Einstieg in das Thema Hadoop als 3 Knoten Cluster aufsetzen.
Ablauf:
- Standard Linux Installation
- Java 8 installieren
- Hadoop auf Node 1 aufsetzen
- Node 2 und 3 in das Cluster aufnehmen
Standard Linux Installation mit Java 8
Je eine VM mit Oracle Linux 6.5 64 Bit in einer Standard Installation als Server ohne X Umgebung.
Ablauf:
- Betriebssystem auf den Servern bereitstellen
- Java auf den Servern aufsetzen
- FW Konfiguration planen, falls FW zwischen den Hadoop Cluster und der eigentlichen Anwendung
Download Software
Die benötigte Software:
- Oracle Linux 6.5 - Download über edelivery
- Java Kit 8 - Download über hadoop Java SE Downloads
Installation Linux Umgebung
- Installation Oracle Linux 6.5 Basis ( Desktop Umgebung nur bei Bedarf)
- Yum Repository prüfen, Konfiguration bei Bedarf anlegen
cd /etc/yum.repos.d wget http://public-yum.hadoop.com/public-yum-ol6.repo
- Update mit „yum update“
- SELinux deaktiviert :
[root@nosqldb01 ~]# vi /etc/selinux/config .. SELINUX=disabled .. [root@nosqldb01 ~]# reboot [root@nosqldb01 ~]# getenforce
- Firewall Einstellungen prüfen und je nach Umgebung einstellen!
- Auf die richtige Uhrzeit achten und per ntpd die Zeit auf allen Servern im Store immer richtig einstellen lassen!
- IP V6 ausschalten
vi /etc/sysctl.conf # disable ipv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 #Testen mit: cat /proc/sys/net/ipv6/conf/all/disable_ipv6 1 # 1=Ausgeschaltet!
Linux hadoop User anlegen
groupadd -g 2000 hinstall useradd -u 2100 -g hinstall hadoop passwd hadoop
Password setzen:
passwd hadoop
Software Verzeichnis anlegen
mkdir -p /opt/hadoop chown -R hadoop:hinstall /opt/hadoop chmod -R 775 /opt/hadoop
Java Version prüfen - JDK 8u5 nach Bedarf installieren
Als User root!
Kopieren von http://download.oracle.com/otn-pub/java/jdk/8u5-b13/jdk-8u5-linux-x64.rpm installieren und aktivieren.
# Java installieren yum install --nogpgcheck jdk-8u5-linux-x64.rpm # Java aktivieren # Neue Java Version dem OS bekannt geben /usr/sbin/alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_05/bin/java 1805 # Versionen anzeigen /usr/sbin/alternatives --display java # Version einstellen /usr/sbin/alternatives --config java # Version auswählen # testen java -version java version "1.8.0.5" # alte Java Version deinstallieren yum list java* yum erase java-1.6.0-openjdk.x86_64 java-1.7.0-openjdk.x86_64
Nach einem Java Upgrade muss das Kommando jps wieder neu verlinkt werden:
Das Programm jps sollte auf dem Server im Pfad liegen/funktionieren, ist sehr hilfreich für die Wartung
jps-m # falls fehler # über /usr/bin verlinken rm /usr/bin/jps ln -s /usr/java/jdk1.8.0_05/bin/jps /usr/bin/jps
FW Konfiguration planen, falls FW zwischen den Knoten und der eigentlichen Anwendung
Soll eine FW den Zugriff zwischen den Store und der Applikation kontrollieren, sind die folgenden Regeln zu beachten:
in Arbeit
Ports:
- 9000
- 50070
- 50075
- ??
siehe auch :http://blog.cloudera.com/blog/2009/08/hadoop-default-ports-quick-reference/
Der Client/Applikation Server, der mit dem Cluster arbeiten soll, muss auf JEDEN Knoten des Cluster über den passenden Port zugreifen können!
Hadoop Software auf den Server kopieren und entpacken/installieren
User hadoop!
Entpacken der Software in das Verzeichnis /opt/hadoop/product/2.4.1, damit ist die eigentliche Installation der Software auch schon abgeschlossen.
mkdir -p /opt/hadoop/product/2.4.1 # check hash see hadoop-2.4.1.tar.gz.mds for hashes md5sum hadoop-2.4.1.tar.gz 0ce4cfd282002b7aa42cf71df4145150 hadoop-2.4.1.tar.gz #entpacken tar -xf hadoop-2.4.1.tar.gz -C /opt/hadoop/product #Verlinken um bei späteren Updates nicht die Pfade zu ändern ln -s /opt/hadoop/product/hadoop-2.4.1 /opt/hadoop/product/hadoop
Umgebungsvariable HADOOP_HOME in der Bash setzen und je nach Vorlieben permanent einrichten:
vi .bashrc .. #Hadoop Home export HADOOP_HOME=/opt/hadoop/product/hadoop # Avoid Java Lib errros export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib" # Hadoop Environment Variables export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME #HDFS export HADOOP_HDFS_HOME=$HADOOP_HOME #YARN export YARN_HOME=$HADOOP_HOME #JAVA export JAVA_HOME=/usr/java/default #Defaults export PATH=$HADOOP_HOME/bin:$PATH .. . .bashrc
Testen der Installation mit:
# zeigt die installierte Software Version
hadoop version
Hadoop 2.4.1
...
Anlegen der Cluster Location
User hadoop!
Anlegen des Hadoop Data Verzeichnisses, hier werden später dann die Daten abgelegt.
# HDFS Base directory mkdir /opt/hadoop/hdata #Name node directoy mkdir /opt/hadoop/hdata/namenode # Data node directory mkdir /opt/hadoop/hdata/datanode
Klonen der Umgebung um die weiteren Storage Node zu konfigurieren
Die bestehende Umgebung stoppen und als Klon Template verwenden um die Hosts 2 und 3 (dient später dazu einen neuen Knoten hinzufügen zu können) anzulegen.
Tipp: Daran denken dass nach einem Klone einer Linux 6 Maschine die Netzwerkkarten Konfiguration stark verbogen wird, siehe UDEV nach Klone reparieren !
Die Namensauflösung zwischen den Knoten prüfen und bei Bedarf die Namen in der hosts Datei eintragen. Darauf achten, dass auch der eigene Name des Servers richtig aufgelöst wird.
SSH Konfiguration root und Hadoop User
Als User Hadoop!
Für die Vereinfachung der Wartung zwischen den Knoten SSH Key einrichten, siehe SSH Keys verteilen
#generate key on every node ssh-keygen -t dsa ssh nosqldb01 ssh-keygen -t dsa ssh nosqldb03 ssh-keygen -t dsa # Copy public key from one node to the other #2/3 to 1 ssh nosqldb01 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys ssh nosqldb03 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys #1/3 to 2 ssh nosqldb01 ssh nosqldb02 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys ssh nosqldb03 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys #1/2 to 3 ssh nosqldb03 ssh nosqldb02 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys ssh nosqldb01 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys # auf die localen Knoten auch per localhost ohne Password anmelden ssh localhost ssh 0.0.0.0
Darauf achten, das auch auf den lokalen Knoten ein Connect über den Servernamen / Localhost und 0.0.0.0 möglich ist.
Hadoop Cluster Single Server Konfiguration einrichten
Ziel ist es zwar ein Cluster mit zum Schluss 3 Servern ein zurichten, im ersten Schritt wird aber zuerst nur der Knoten 1 konfiguriert.
Die Konfiguration wird unter $HADOOP_HOME/etc/hadoop einrichtet.
Die folgende Konfigurationsdateien werden anpassen/erstellen:
- core-site.xml
- hdfs-site.xml
- mapred-site.xml
core-site.xml:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
hdfs-site.xml:
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.name.dir</name> <value>file:/opt/hadoop/hdata/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/opt/hadoop/hdata/datanode</value> </property> </configuration>
yarn-site.xml:
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration>
Für ein kleines System mit diesen Einstellungen experimentieren:
<!-- memory settings for small systems - sometimes to small! --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> <description>Amount of physical memory, in MB, that can be allocated for containers.</description> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property>
Konfiguration für MapReduce
mapred-site.xml:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
http://hadoop.apache.org/docs/r2.4.0/hadoop-project-dist/hadoop-common/SingleNodeSetup.html
HDFS File System formatieren
# Basis Verzeichnisse prüfen ls -la /opt/hadoop/hdata # formatieren $HADOOP_HOME/bin/hdfs namenode -format ... 14/07/10 22:16:36 INFO common.Storage: Storage directory /opt/hadoop/hdata/namenode has been successfully formatted. ....
Hadoop starten
Im ersten Schritt Name Node, Data Nodes für HDFS starten:
Bzw. alles auf einmal über $HADOOP_HOME/sbin/start-dfs.sh # prüfen ob alle Prozesse laufen: jps -l .. 4208 org.apache.hadoop.hdfs.server.datanode.DataNode 4087 org.apache.hadoop.hdfs.server.namenode.NameNode 4363 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
YARN Ressource Manager,Nodemanager starten:
$HADOOP_HOME/sbin/start-yarn.sh # Jetzt läuft: jps -l 4208 org.apache.hadoop.hdfs.server.datanode.DataNode 4087 org.apache.hadoop.hdfs.server.namenode.NameNode 4363 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode 4571 org.apache.hadoop.yarn.server.resourcemanager.ResourceManager 4669 org.apache.hadoop.yarn.server.nodemanager.NodeManager
History Server starten:
$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver starting historyserver, logging to /opt/hadoop/product/hadoop/logs/mapred-hadoop-historyserver-nosqldb01.out #Jetzt läuft zusätzlich: jps -l .. 4705 org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer ..
Im Browser prüfen ob alles läuft
- NameNode URL aufrufen: http://localhost:50070/dfshealth.jsp
- JobHistory status aufrufen: http://localhost:19888/jobhistory
- Yarn ResourceManager aufrufen: http://localhost:8088/cluster/cluster
Falls kein X zur Hand. lynx verwenden:
lynx http://localhost:50070/dfshealth.jsp
HDFS - Erste Schritte
User Files System anlegen
hdfs dfs -mkdir /user hdfs dfs -mkdir /user/gpipperr
Eine Datei auf in das Hadoop Filesystem kopieren:
cd $HADOOP_HOME hdfs dfs -copyFromLocal README.txt /user/gpipperr hdfs dfs -ls /user/gpipperr Found 1 items -rw-r--r-- 1 hadoop supergroup 1366 2014-07-13 12:39 /user/gpipperr/README.txt
Java Fehler beheben
hdfs dfs -ls /user Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /opt/hadoop/product/hadoop-2.4.1/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now. It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'. 14/07/10 22:27:20 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
1. Lösung
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib" hdfs dfs -ls /user 14/07/10 22:33:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable -rw-r--r-- 1 hadoop supergroup 1366 2014-07-10 22:25 /user
see:
Leider ist in der Apache Download Version die 32bit Libary nur enthalten, 64bit muss selber aus dem Code erzeugt werden.
Hadoop Cluster stoppen
cd $HADOOP_HOME/sbin jps -m 4208 DataNode 5027 JobHistoryServer 4087 NameNode 5323 Jps -m 4571 ResourceManager 4363 SecondaryNameNode 4669 NodeManager $HADOOP_HOME/sbin/mr-jobhistory-daemon.sh stop historyserver ./stop-yarn.sh ./stop-dfs.sh jps -m
Benutzerberechtigungen in Hadoop
Map Reduce im Hadoop Cluster testen
Nach der erfolgreichen Installation einen ersten Test mit einer Beispiel Klasse durchführen:
cd $HADOOP_HOME/share/hadoop/mapreduce #see all examples yarn jar hadoop-mapreduce-examples-2.4.1.jar #Starten: # pi: A map/reduce program that estimates Pi using a quasi-Monte Carlo method. yarn jar hadoop-mapreduce-examples-2.4.1.jar pi 1 1 # mit daten in dfs # randomwriter: A map/reduce program that writes 10GB of random data per node. yarn jar hadoop-mapreduce-examples-2.4.1.jar randomwriter random-data .. Job started: Sun Aug 10 14:28:05 CEST 2014 .. .. 14/08/10 14:28:08 INFO mapreduce.Job: Running job: job_1407602714166_0003 # Auflisten lassen: yarn application -list ... Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL application_1407602714166_0002 Sqoop: GPI AUDIT2 MAPREDUCE hadoop default ACCEPTED UNDEFINED 0% N/A
Hier sollte nun der Job auch erfolgreich durchlaufen UND nicht im Status „ACCEPTED“ hängen bleiben.
siehe auch als Beispiel: http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1-latest/bk_using-apache-hadoop/content/running_mapreduce_examples_on_yarn.html
Hadoop auf dem System aus den Quellen aufbauen
Da auf dem System Fehler mit dem „nativen“ Libraries auftreten, Hadoop aus dem Sourcen aufbauen:
siehe http://manchev.org/2014/07/compiling-and-installing-hadoop-2-4-on-64-bit-oracle-linux-6/
Quellen
Apache:
Netz: