===== 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
Erweiterung auf 3 Knoten in Arbeit
==== 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:
* [[http://hadoop.apache.org/releases.html#Download| Hadoop 2.4.X - current stable 2.x version]]
* Oracle Linux 6.5 - Download über [[https://edelivery.hadoop.com/EPD/Download/get_form?egroup_aru_number=16064752| edelivery ]]
* Java Kit 8 - Download über [[http://www.hadoop.com/technetwork/java/javase/downloads/index.html|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 [[http://www.cyberciti.biz/tips/vmware-linux-lost-eth0-after-cloning-image.html|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 [[windows:putty_pscp_ssh_key_connect#ssh_key_s_bzw_ssh_key_struktur_auf_dem_linux_system_erzeugen|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
* [[http://hadoop.apache.org/docs/r2.4.0/hadoop-yarn/hadoop-yarn-common/yarn-default.xml|yarn-site.xml]]
* mapred-site.xml
core-site.xml:
fs.defaultFS
hdfs://localhost:9000
hdfs-site.xml:
dfs.replication
1
dfs.name.dir
file:/opt/hadoop/hdata/namenode
dfs.datanode.data.dir
file:/opt/hadoop/hdata/datanode
yarn-site.xml:
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.auxservices.mapreduce.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
Für ein kleines System mit diesen Einstellungen experimentieren:
yarn.nodemanager.resource.memory-mb
2048
Amount of physical memory, in MB, that can be allocated for containers.
yarn.scheduler.minimum-allocation-mb
512
Konfiguration für MapReduce\\
mapred-site.xml:
mapreduce.framework.name
yarn
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 ', 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:
* http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-common/NativeLibraries.html
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====
siehe:
* http://blog.cloudera.com/blog/2012/03/authorization-and-authentication-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:
* https://wiki.apache.org/hadoop/FrontPage
* http://hadoop.apache.org/docs/r2.4.0/hadoop-project-dist/hadoop-common/ClusterSetup.html
Netz:
* http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/
* http://www.edureka.in/blog/apache-hadoop-2-0-and-yarn/
* http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.3/bk_installing_manually_book/content/rpm-chap1.html
* http://www.oracle.com/technetwork/systems/hands-on-labs/hol-setup-hadoop-solaris-2041770.html
* https://developer.yahoo.com/hadoop/tutorial/index.html
* http://radar.oreilly.com/2014/01/an-introduction-to-hadoop-2-0-understanding-the-new-data-operating-system.html
* http://blog.cloudera.com/blog/2013/11/migrating-to-mapreduce-2-on-yarn-for-operators
* http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/SingleCluster.html#YARN_on_Single_Node