===== 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