Benutzer-Werkzeuge

Webseiten-Werkzeuge


nosql:hadoop_first_setup

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:

  1. Standard Linux Installation
  2. Java 8 installieren
  3. Hadoop auf Node 1 aufsetzen
  4. 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:

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:

<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

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
nosql/hadoop_first_setup.txt · Zuletzt geändert: 2014/08/23 17:28 von Gunther Pippèrr