Apache Hadoop installeren en configureren op Ubuntu 20.04

Apache Hadoop is een open-source raamwerk dat gebruikt wordt om gegevens te beheren, op te slaan en te verwerken voor verschillende big data toepassingen die onder geclusterde systemen draaien. Het is geschreven in Java met wat native code in C en shell scripts. Het gebruikt een gedistribueerd bestandssysteem (HDFS) en schaalt op van enkele tot duizenden servers.

Apache Hadoop is gebaseerd op de vier hoofdcomponenten:

  • Hadoop Common : Het is de verzameling hulpprogramma’s en bibliotheken die de andere Hadoop modules nodig hebben.
  • HDFS : Ook bekend als Hadoop Distributed File System verdeeld over meerdere knooppunten.
  • MapReduce : Het is een raamwerk dat gebruikt wordt om toepassingen te schrijven om enorme hoeveelheden gegevens te verwerken.
  • Hadoop YARN : Ook bekend als Yet Another Resource Negotiator is de resource management laag van Hadoop.

In deze handleiding leggen we uit hoe je een single-node Hadoop cluster kunt opzetten op Ubuntu 20.04.

Vereisten

  • Een server met Ubuntu 20.04 en 4 GB RAM.
  • Een root wachtwoord is ingesteld op je server.

Update de systeempakketten

Alvorens te beginnen is het aan te raden je systeempakketten bij te werken tot de laatste versie. Je kunt het doen met het volgende commando:

apt-get update -y
apt-get upgrade -y

Zodra je systeem bijgewerkt is, herstart je het om de veranderingen door te voeren.

Installeer Java

Apache Hadoop is een Java-gebaseerde toepassing. Je zult dus Java in je systeem moeten installeren. Je kunt het installeren met het volgende commando:

apt-get install default-jdk default-jre -y

Eenmaal geïnstalleerd kun je de geïnstalleerde versie van Java verifiëren met het volgende commando:

java -version

Je zou de volgende uitvoer moeten krijgen:

openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)

Maak Hadoop gebruiker en stel wachtwoordloze SSH in

Maak eerst een nieuwe gebruiker met de naam hadoop met het volgende commando:

adduser hadoop

Voeg vervolgens de hadoop gebruiker toe aan de sudo groep
usermod -aG sudo hadoop

Log vervolgens in met de hadoop gebruiker en genereer een SSH sleutelpaar met het volgende commando:

su - hadoop
ssh-keygen -t rsa

Je zou de volgende uitvoer moeten krijgen:

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:HG2K6x1aCGuJMqRKJb+GKIDRdKCd8LXnGsB7WSxApno [email protected]
The key's randomart image is:
+---[RSA 3072]----+
|..=..            |
| O.+.o   .       |
|oo*.o + . o      |
|o .o * o +       |
|o+E.= o S        |
|=.+o * o         |
|*.o.= o o        |
|=+ o.. + .       |
|o ..  o .        |
+----[SHA256]-----+

Voeg vervolgens deze sleutel toe aan de Authorized ssh keys en geef de juiste toestemming:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

Verifieer vervolgens de wachtwoordloze SSH met het volgende commando:

ssh localhost

Als je zonder wachtwoord ingelogd bent, kun je doorgaan naar de volgende stap.

Installeer Hadoop

Log eerst in met de hadoop gebruiker en download de nieuwste versie van Hadoop met het volgende commando:

su - hadoop
wget https://downloads.apache.org/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz

Als de download voltooid is, pak je het gedownloade bestand uit met het volgende commando:

tar -xvzf hadoop-3.2.1.tar.gz

Verplaats vervolgens de uitgepakte map naar de /usr/local/:

sudo mv hadoop-3.2.1 /usr/local/hadoop

Maak vervolgens een directory om het logboek in op te slaan met het volgende commando:

sudo mkdir /usr/local/hadoop/logs

Verander vervolgens het eigendom van de hadoop directory in hadoop:

sudo chown -R hadoop:hadoop /usr/local/hadoop

Vervolgens moet je de Hadoop omgevingsvariabelen configureren. Je kunt dat doen door het ~/.bashrc bestand te bewerken:

nano ~/.bashrc

Voeg de volgende regels toe:

export HADOOP_HOME=/usr/local/hadoop
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"

Sla het bestand op en sluit het als je klaar bent. Activeer dan de omgevingsvariabelen met het volgende commando:

source ~/.bashrc

Hadoop configureren

In dit onderdeel leren we hoe je Hadoop op een enkele node kunt instellen.

Omgevingsvariabelen voor Java instellen

Vervolgens moet je Java omgevingsvariabelen definiëren in hadoop-env.sh om YARN, HDFS, MapReduce, en Hadoop-gerelateerde projectinstellingen in te stellen.

Zoek eerst het juiste Java pad op met het volgende commando:

which javac

Je zou de volgende uitvoer moeten zien:

/usr/bin/javac

Zoek vervolgens de OpenJDK directory met het volgende commando:

readlink -f /usr/bin/javac

Je zou de volgende uitvoer moeten zien:

/usr/lib/jvm/java-11-openjdk-amd64/bin/javac

Bewerk vervolgens het bestand hadoop-env.sh en definieer het Java pad:

sudo nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh

Voeg de volgende regels toe:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 
export HADOOP_CLASSPATH+=" $HADOOP_HOME/lib/*.jar"

Vervolgens moet je ook het Javax activatiebestand downloaden. Je kunt het downloaden met het volgende commando:

cd /usr/local/hadoop/lib
sudo wget https://jcenter.bintray.com/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar

Je kunt nu de Hadoop versie verifiëren met het volgende commando:

hadoop version

Je zou de volgende uitvoer moeten krijgen:

Hadoop 3.2.1
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r b3cbbb467e22ea829b3808f4b7b01d07e0bf3842
Compiled by rohithsharmaks on 2019-09-10T15:56Z
Compiled with protoc 2.5.0
From source with checksum 776eaf9eee9c0ffc370bcbc1888737
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.2.1.jar

Configureer core-site.xml bestand

Vervolgens moet je de URL voor je NameNode opgeven. Je kunt dat doen door het bestand core-site.xml te bewerken:

sudo nano $HADOOP_HOME/etc/hadoop/core-site.xml

Voeg de volgende regels toe:

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://0.0.0.0:9000</value>
      <description>The default file system URI</description>
   </property>

</configuration>

Sla het bestand op en sluit het als je klaar bent:

Configureer hdfs-site.xml bestand

Vervolgens moet je de plaats bepalen voor het opslaan van knooppuntmetadata, fsimage bestand, en bewerkingslogbestand. Je kunt dat doen door het hdfs-site.xml bestand te bewerken. Maak eerst een directory voor het opslaan van node metadata:

sudo mkdir -p /home/hadoop/hdfs/{namenode,datanode}
sudo chown -R hadoop:hadoop /home/hadoop/hdfs

Bewerk vervolgens het hdfs-site.xml bestand en bepaal de plaats van de directory:

sudo nano $HADOOP_HOME/etc/hadoop/hdfs-site.xml

Voeg de volgende regels toe:

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

Sla het bestand op en sluit het.

Configureer mapred-site.xml bestand

Vervolgens moet je MapReduce waarden definiëren. Je kunt die definiëren door het mapred-site.xml bestand te bewerken:

sudo nano $HADOOP_HOME/etc/hadoop/mapred-site.xml

Voeg de volgende regels toe:

<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

Bewaar en sluit het bestand.

Configureer garen-site.xml bestand

Vervolgens moet je het yarn-site.xml bestand bewerken en YARN gerelateerde instellingen bepalen:

sudo nano $HADOOP_HOME/etc/hadoop/yarn-site.xml

Voeg de volgende regels toe:

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
   </property>
</configuration>

Sla het bestand op en sluit het als je klaar bent.

Formatteer HDFS NameNode

Vervolgens moet je de Hadoop configuratie valideren en de HDFS NameNode formatteren.

Log eerst in met Hadoop gebruiker en formatteer de HDFS NameNode met het volgende commando:

su - hadoop
hdfs namenode -format

Je zou de volgende uitvoer moeten krijgen:

2020-06-07 11:35:57,691 INFO util.GSet: VM type       = 64-bit
2020-06-07 11:35:57,692 INFO util.GSet: 0.25% max memory 1.9 GB = 5.0 MB
2020-06-07 11:35:57,692 INFO util.GSet: capacity      = 2^19 = 524288 entries
2020-06-07 11:35:57,706 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.window.num.buckets = 10
2020-06-07 11:35:57,706 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.num.users = 10
2020-06-07 11:35:57,706 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.windows.minutes = 1,5,25
2020-06-07 11:35:57,710 INFO namenode.FSNamesystem: Retry cache on namenode is enabled
2020-06-07 11:35:57,710 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis
2020-06-07 11:35:57,712 INFO util.GSet: Computing capacity for map NameNodeRetryCache
2020-06-07 11:35:57,712 INFO util.GSet: VM type       = 64-bit
2020-06-07 11:35:57,712 INFO util.GSet: 0.029999999329447746% max memory 1.9 GB = 611.9 KB
2020-06-07 11:35:57,712 INFO util.GSet: capacity      = 2^16 = 65536 entries
2020-06-07 11:35:57,743 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1242120599-69.87.216.36-1591529757733
2020-06-07 11:35:57,763 INFO common.Storage: Storage directory /home/hadoop/hdfs/namenode has been successfully formatted.
2020-06-07 11:35:57,817 INFO namenode.FSImageFormatProtobuf: Saving image file /home/hadoop/hdfs/namenode/current/fsimage.ckpt_0000000000000000000 using no compression
2020-06-07 11:35:57,972 INFO namenode.FSImageFormatProtobuf: Image file /home/hadoop/hdfs/namenode/current/fsimage.ckpt_0000000000000000000 of size 398 bytes saved in 0 seconds .
2020-06-07 11:35:57,987 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
2020-06-07 11:35:58,000 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid=0 when meet shutdown.
2020-06-07 11:35:58,003 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu2004/69.87.216.36
************************************************************/

Start de Hadoop Cluster

Start eerst de NameNode en DataNode met het volgende commando:

start-dfs.sh

Je zou de volgende uitvoer moeten krijgen:

Starting namenodes on [0.0.0.0]
Starting datanodes
Starting secondary namenodes [ubuntu2004]

Start vervolgens de YARN resource en nodemanagers door het volgende commando uit te voeren:

start-yarn.sh

Je zou de volgende uitvoer moeten krijgen:

Starting resourcemanager
Starting nodemanagers

Je kunt ze nu verifiëren met het volgende commando:

jps

Je zou de volgende uitvoer moeten krijgen:

5047 NameNode
5850 Jps
5326 SecondaryNameNode
5151 DataNode

Toegang tot Hadoop Web Interface

Je kunt nu de Hadoop NameNode benaderen met de URL http://your-server-ip:9870. Je zou het volgende scherm moeten zien:

Hadoop Web Interface

Je kunt ook de afzonderlijke DataNodes benaderen met de URL http://your-server-ip:9864. Je zou het volgende scherm moeten zien:

Hadoop Data Node

Om de YARN Resource Manager te benaderen, gebruik je de URL http://your-server-ip:8088. Je zou het volgende scherm moeten zien:

Hadoop Yarn Hulpbron Beheerder

Conclusie

Gefeliciteerd! Je hebt Hadoop met succes op een enkele node geïnstalleerd. Je kunt nu beginnen met het verkennen van basis HDFS commando’s en een volledig gedistribueerd Hadoop cluster ontwerpen. Voel je vrij me te vragen als je vragen hebt.