Apache Hadoop ist ein Open-Source-Framework, das für die verteilte Speicherung sowie die verteilte Verarbeitung von Big Data auf Computerclustern verwendet wird, die auf handelsüblicher Hardware ausgeführt werden. Hadoop speichert Daten im Hadoop Distributed File System (HDFS) und die Verarbeitung dieser Daten erfolgt mit MapReduce. YARN bietet eine API zum Anfordern und Zuweisen von Ressourcen im Hadoop-Cluster.
Das Apache Hadoop-Framework besteht aus den folgenden Modulen:
- Hadoop Common
- Hadoop Distributed File System (HDFS)
- GARN
- MapReduce
In diesem Artikel wird erläutert, wie Hadoop Version 2 auf RHEL 8 oder CentOS 8 installiert wird. Wir werden HDFS (Namenode und Datanode), YARN, MapReduce auf dem Einzelknoten-Cluster im pseudoverteilten Modus installieren, bei dem es sich um eine verteilte Simulation auf einem einzelnen Computer handelt. Jeder Hadoop-Daemon wie hdfs, Garn, Mapreduce usw. wird als separater/individueller Java-Prozess ausgeführt.
In diesem Tutorial lernen Sie:
- So fügen Sie Benutzer für die Hadoop-Umgebung hinzu
- So installieren und konfigurieren Sie das Oracle JDK
- So konfigurieren Sie passwortloses SSH
- So installieren Sie Hadoop und konfigurieren die erforderlichen zugehörigen XML-Dateien
- So starten Sie den Hadoop-Cluster
- Zugriff auf die Web-Benutzeroberfläche von NameNode und ResourceManager
HDFS-Architektur.
Softwareanforderungen und verwendete Konventionen
Kategorie | Anforderungen, Konventionen oder verwendete Softwareversion |
---|---|
System | RHEL 8 / CentOS 8 |
Software | Hadoop 2.8.5, Oracle JDK 1.8 |
Andere | Privilegierter Zugriff auf Ihr Linux-System als root oder über sudo Befehl. |
Konventionen | # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder durch Verwendung von sudo Befehl$ – erfordert, dass bestimmte Linux-Befehle als normaler, nicht privilegierter Benutzer ausgeführt werden |
Fügen Sie Benutzer für die Hadoop-Umgebung hinzu
Erstellen Sie den neuen Benutzer und die neue Gruppe mit dem Befehl:
# useradd hadoop # passwd hadoop
[root@hadoop ~]# useradd hadoop [root@hadoop ~]# passwd hadoop Changing password for user hadoop. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@hadoop ~]# cat /etc/passwd | grep hadoop hadoop:x:1000:1000::/home/hadoop:/bin/bash
Installieren und konfigurieren Sie das Oracle JDK
Laden Sie das offizielle Paket jdk-8u202-linux-x64.rpm herunter und installieren Sie es, um das Oracle JDK zu installieren.
[root@hadoop ~]# rpm -ivh jdk-8u202-linux-x64.rpm warning: jdk-8u202-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:jdk1.8-2000:1.8.0_202-fcs ################################# [100%] Unpacking JAR files... tools.jar... plugin.jar... javaws.jar... deploy.jar... rt.jar... jsse.jar... charsets.jar... localedata.jar...
Führen Sie nach der Installation die folgenden Befehle aus, um zu überprüfen, ob Java erfolgreich konfiguriert wurde:
[root@hadoop ~]# java -version java version "1.8.0_202" Java(TM) SE Runtime Environment (build 1.8.0_202-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode) [root@hadoop ~]# update-alternatives --config java There is 1 program that provides 'java'. Selection Command ----------------------------------------------- *+ 1 /usr/java/jdk1.8.0_202-amd64/jre/bin/java
Passwortloses SSH konfigurieren
Installieren Sie den Open SSH-Server und den Open SSH-Client oder, falls bereits installiert, werden die folgenden Pakete aufgelistet.
[root@hadoop ~]# rpm -qa | grep openssh* openssh-server-7.8p1-3.el8.x86_64 openssl-libs-1.1.1-6.el8.x86_64 openssl-1.1.1-6.el8.x86_64 openssh-clients-7.8p1-3.el8.x86_64 openssh-7.8p1-3.el8.x86_64 openssl-pkcs11-0.4.8-2.el8.x86_64
Generieren Sie öffentliche und private Schlüsselpaare mit dem folgenden Befehl. Das Terminal fordert zur Eingabe des Dateinamens auf. Drücken Sie ENTER
und fortfahren. Danach kopieren Sie die öffentlichen Schlüssel aus id_rsa.pub
zu authorized_keys
.
$ ssh-keygen -t rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 640 ~/.ssh/authorized_keys
[hadoop@hadoop ~]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): Created directory '/home/hadoop/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/hadoop/.ssh/id_rsa. Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub. The key fingerprint is: SHA256:H+LLPkaJJDD7B0f0Je/NFJRP5/FUeJswMmZpJFXoelg [email protected] The key's randomart image is: +---[RSA 2048]----+ | .. ..++*o .o| | o .. +.O.+o.+| | + . . * +oo==| | . o o . E .oo| | . = .S.* o | | . o.o= o | | . .. o | | .o. | | o+. | +----[SHA256]-----+ [hadoop@hadoop ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys [hadoop@hadoop ~]$ chmod 640 ~/.ssh/authorized_keys
Überprüfen Sie die passwortlose SSH-Konfiguration mit dem Befehl :
$ ssh
[hadoop@hadoop ~]$ ssh hadoop.sandbox.com Web console: https://hadoop.sandbox.com:9090/ or https://192.168.1.108:9090/ Last login: Sat Apr 13 12:09:55 2019 [hadoop@hadoop ~]$
Installieren Sie Hadoop und konfigurieren Sie die zugehörigen XML-Dateien
Laden Sie Hadoop 2.8.5 von der offiziellen Apache-Website herunter und extrahieren Sie sie.
# wget https://archive.apache.org/dist/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz # tar -xzvf hadoop-2.8.5.tar.gz
[root@rhel8-sandbox ~]# wget https://archive.apache.org/dist/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz --2019-04-13 11:14:03-- https://archive.apache.org/dist/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz Resolving archive.apache.org (archive.apache.org)... 163.172.17.199 Connecting to archive.apache.org (archive.apache.org)|163.172.17.199|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 246543928 (235M) [application/x-gzip] Saving to: ‘hadoop-2.8.5.tar.gz’ hadoop-2.8.5.tar.gz 100%[=====================================================================================>] 235.12M 1.47MB/s in 2m 53s 2019-04-13 11:16:57 (1.36 MB/s) - ‘hadoop-2.8.5.tar.gz’ saved [246543928/246543928]
Einrichtung der Umgebungsvariablen
Bearbeiten Sie den bashrc
für den Hadoop-Benutzer durch Einrichten der folgenden Hadoop-Umgebungsvariablen:
export HADOOP_HOME=/home/hadoop/hadoop-2.8.5
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
Sourcen Sie die .bashrc
in der aktuellen Anmeldesitzung.
$ source ~/.bashrc
Bearbeiten Sie hadoop-env.sh
Datei, die sich in /etc/hadoop
befindet innerhalb des Hadoop-Installationsverzeichnisses und nehmen Sie die folgenden Änderungen vor und prüfen Sie, ob Sie andere Konfigurationen ändern möchten.
export JAVA_HOME=${JAVA_HOME:-"/usr/java/jdk1.8.0_202-amd64"}
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/home/hadoop/hadoop-2.8.5/etc/hadoop"}
Konfigurationsänderungen in der Datei core-site.xml
Bearbeiten Sie die core-site.xml
mit vim oder Sie können einen der Editoren verwenden. Die Datei befindet sich unter /etc/hadoop
innerhalb von hadoop
Home-Verzeichnis und fügen Sie folgende Einträge hinzu.
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop.sandbox.com:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadooptmpdata</value>
</property>
</configuration>
Erstellen Sie außerdem das Verzeichnis unter hadoop
Home-Ordner.
$ mkdir hadooptmpdata
Konfigurationsänderungen in der Datei hdfs-site.xml
Bearbeiten Sie die hdfs-site.xml
die unter demselben Speicherort vorhanden ist, d. h. /etc/hadoop
innerhalb von hadoop
Installationsverzeichnis und erstellen Sie den Namenode/Datanode
Verzeichnisse unter hadoop
Benutzer-Home-Verzeichnis.
$ mkdir -p hdfs/namenode $ mkdir -p hdfs/datanode
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hdfs/datanode</value>
</property>
</configuration>
Konfigurationsänderungen in der mapred-site.xml-Datei
Kopieren Sie die mapred-site.xml
aus mapred-site.xml.template
mit cp
Befehl und bearbeiten Sie dann die mapred-site.xml
abgelegt in /etc/hadoop
unter hadoop
Installationsverzeichnis mit den folgenden Änderungen.
$ cp mapred-site.xml.template mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
Konfigurationsänderungen in der Datei wool-site.xml
Bearbeiten Sie yarn-site.xml
mit den folgenden Einträgen.
<configuration>
<property>
<name>mapreduceyarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
Starten des Hadoop-Clusters
Formatieren Sie den Namensknoten, bevor Sie ihn zum ersten Mal verwenden. Führen Sie als Hadoop-Benutzer den folgenden Befehl aus, um den Namenode.
zu formatieren$ hdfs namenode -format
[hadoop@hadoop ~]$ hdfs namenode -format 19/04/13 11:54:10 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: user = hadoop STARTUP_MSG: host = hadoop.sandbox.com/192.168.1.108 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 2.8.5 19/04/13 11:54:17 INFO namenode.FSNamesystem: dfs.namenode.safemode.threshold-pct = 0.9990000128746033 19/04/13 11:54:17 INFO namenode.FSNamesystem: dfs.namenode.safemode.min.datanodes = 0 19/04/13 11:54:17 INFO namenode.FSNamesystem: dfs.namenode.safemode.extension = 30000 19/04/13 11:54:18 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.window.num.buckets = 10 19/04/13 11:54:18 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.num.users = 10 19/04/13 11:54:18 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.windows.minutes = 1,5,25 19/04/13 11:54:18 INFO namenode.FSNamesystem: Retry cache on namenode is enabled 19/04/13 11:54:18 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis 19/04/13 11:54:18 INFO util.GSet: Computing capacity for map NameNodeRetryCache 19/04/13 11:54:18 INFO util.GSet: VM type = 64-bit 19/04/13 11:54:18 INFO util.GSet: 0.029999999329447746% max memory 966.7 MB = 297.0 KB 19/04/13 11:54:18 INFO util.GSet: capacity = 2^15 = 32768 entries 19/04/13 11:54:18 INFO namenode.FSImage: Allocated new BlockPoolId: BP-415167234-192.168.1.108-1555142058167 19/04/13 11:54:18 INFO common.Storage: Storage directory /home/hadoop/hdfs/namenode has been successfully formatted. 19/04/13 11:54:18 INFO namenode.FSImageFormatProtobuf: Saving image file /home/hadoop/hdfs/namenode/current/fsimage.ckpt_0000000000000000000 using no compression 19/04/13 11:54:18 INFO namenode.FSImageFormatProtobuf: Image file /home/hadoop/hdfs/namenode/current/fsimage.ckpt_0000000000000000000 of size 323 bytes saved in 0 seconds. 19/04/13 11:54:18 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 19/04/13 11:54:18 INFO util.ExitUtil: Exiting with status 0 19/04/13 11:54:18 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at hadoop.sandbox.com/192.168.1.108 ************************************************************/
Sobald der Namenode formatiert ist, starten Sie das HDFS mit start-dfs.sh
Skript.
$ start-dfs.sh
[hadoop@hadoop ~]$ start-dfs.sh Starting namenodes on [hadoop.sandbox.com] hadoop.sandbox.com: starting namenode, logging to /home/hadoop/hadoop-2.8.5/logs/hadoop-hadoop-namenode-hadoop.sandbox.com.out hadoop.sandbox.com: starting datanode, logging to /home/hadoop/hadoop-2.8.5/logs/hadoop-hadoop-datanode-hadoop.sandbox.com.out Starting secondary namenodes [0.0.0.0] The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established. ECDSA key fingerprint is SHA256:e+NfCeK/kvnignWDHgFvIkHjBWwghIIjJkfjygR7NkI. Are you sure you want to continue connecting (yes/no)? yes 0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts. [email protected]'s password: 0.0.0.0: starting secondarynamenode, logging to /home/hadoop/hadoop-2.8.5/logs/hadoop-hadoop-secondarynamenode-hadoop.sandbox.com.out
Um die YARN-Dienste zu starten, müssen Sie das Garn-Startskript ausführen, z. B. start-yarn.sh
$ start-yarn.sh
[hadoop@hadoop ~]$ start-yarn.sh starting yarn daemons starting resourcemanager, logging to /home/hadoop/hadoop-2.8.5/logs/yarn-hadoop-resourcemanager-hadoop.sandbox.com.out hadoop.sandbox.com: starting nodemanager, logging to /home/hadoop/hadoop-2.8.5/logs/yarn-hadoop-nodemanager-hadoop.sandbox.com.out
Um zu überprüfen, ob alle Hadoop-Dienste/Daemons erfolgreich gestartet wurden, können Sie den jps
verwenden Befehl.
$ jps 2033 NameNode 2340 SecondaryNameNode 2566 ResourceManager 2983 Jps 2139 DataNode 2671 NodeManager
Jetzt können wir die aktuelle Hadoop-Version überprüfen, die Sie mit dem folgenden Befehl verwenden können:
$ hadoop version
oder
$ hdfs version
[hadoop@hadoop ~]$ hadoop version Hadoop 2.8.5 Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 0b8464d75227fcee2c6e7f2410377b3d53d3d5f8 Compiled by jdu on 2018-09-10T03:32Z Compiled with protoc 2.5.0 From source with checksum 9942ca5c745417c14e318835f420733 This command was run using /home/hadoop/hadoop-2.8.5/share/hadoop/common/hadoop-common-2.8.5.jar [hadoop@hadoop ~]$ hdfs version Hadoop 2.8.5 Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 0b8464d75227fcee2c6e7f2410377b3d53d3d5f8 Compiled by jdu on 2018-09-10T03:32Z Compiled with protoc 2.5.0 From source with checksum 9942ca5c745417c14e318835f420733 This command was run using /home/hadoop/hadoop-2.8.5/share/hadoop/common/hadoop-common-2.8.5.jar [hadoop@hadoop ~]$
HDFS-Befehlszeilenschnittstelle
Um auf das HDFS zuzugreifen und einige Verzeichnisse oberhalb von DFS zu erstellen, können Sie die HDFS CLI verwenden.
$ hdfs dfs -mkdir /testdata $ hdfs dfs -mkdir /hadoopdata $ hdfs dfs -ls /
[hadoop@hadoop ~]$ hdfs dfs -ls / Found 2 items drwxr-xr-x - hadoop supergroup 0 2019-04-13 11:58 /hadoopdata drwxr-xr-x - hadoop supergroup 0 2019-04-13 11:59 /testdata
Greifen Sie über den Browser auf Namenode und YARN zu
Sie können sowohl auf die Web-UI für NameNode als auch auf YARN Resource Manager über einen beliebigen Browser wie Google Chrome/Mozilla Firefox zugreifen.
Namenode-Web-UI – http://<hadoop cluster hostname/IP address>:50070
Die YARN Resource Manager (RM)-Weboberfläche zeigt alle laufenden Jobs im aktuellen Hadoop-Cluster an.
Resource Manager-Webbenutzeroberfläche – http://<hadoop cluster hostname/IP address>:8088
Schlussfolgerung
Die Welt verändert ihre derzeitige Arbeitsweise und Big Data spielt in dieser Phase eine große Rolle. Hadoop ist ein Framework, das uns das Leben bei der Arbeit mit großen Datensätzen erleichtert. Es gibt Verbesserungen an allen Fronten. Die Zukunft ist spannend.