Ricerca nel sito web

Come installare e configurare Apache Hadoop su Ubuntu 20.04


Questo tutorial esiste per queste versioni del sistema operativo

  • Ubuntu 22.04 (Jammy Jellyfish)
  • Ubuntu 20.04 (Focal Fossa)

Su questa pagina

  1. Prerequisiti
  2. Aggiorna i pacchetti di sistema
  3. Installa Java
  4. Crea utente Hadoop e imposta SSH senza password
  5. Installa Hadoop
  6. Configura Hadoop
    1. Configura le variabili d'ambiente Java
    2. Configura il file core-site.xml
    3. Configura il file hdfs-site.xml

    1. Configura il file yarn-site.xml

    Apache Hadoop è un framework open source utilizzato per gestire, archiviare ed elaborare i dati per varie applicazioni di big data in esecuzione su sistemi cluster. È scritto in Java con del codice nativo in C e script di shell. Utilizza un file system distribuito (HDFS) e scala da singoli server a migliaia di macchine.

    Apache Hadoop si basa sui quattro componenti principali:

    • Hadoop Common: è la raccolta di utilità e librerie necessarie per altri moduli Hadoop.
    • HDFS: noto anche come Hadoop Distributed File System distribuito su più nodi.
    • MapReduce : è un framework utilizzato per scrivere applicazioni per elaborare enormi quantità di dati.
    • Hadoop YARN : Conosciuto anche come Yet Another Resource Negotiator è il livello di gestione delle risorse di Hadoop.

    In questo tutorial, spiegheremo come configurare un cluster Hadoop a nodo singolo su Ubuntu 20.04.

    Prerequisiti

    • Un server che esegue Ubuntu 20.04 con 4 GB di RAM.
    • Una password di root è configurata sul tuo server.

    Aggiorna i pacchetti di sistema

    Prima di iniziare, si consiglia di aggiornare i pacchetti di sistema all'ultima versione. Puoi farlo con il seguente comando:

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

    Una volta aggiornato il sistema, riavvialo per implementare le modifiche.

    Installa Java

    Apache Hadoop è un'applicazione basata su Java. Quindi dovrai installare Java nel tuo sistema. Puoi installarlo con il seguente comando:

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

    Una volta installato, puoi verificare la versione installata di Java con il seguente comando:

    java -version

    Dovresti ottenere il seguente output:

    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)
    

    Crea un utente Hadoop e imposta SSH senza password

    Innanzitutto, crea un nuovo utente denominato hadoop con il seguente comando:

    adduser hadoop

    Successivamente, aggiungi l'utente hadoop al gruppo sudo
    usermod -aG sudo hadoop

    Successivamente, accedi con l'utente hadoop e genera una coppia di chiavi SSH con il seguente comando:

    su - hadoop
    ssh-keygen -t rsa

    Dovresti ottenere il seguente output:

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

    Quindi, aggiungi questa chiave alle chiavi ssh autorizzate e dai l'autorizzazione appropriata:

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

    Successivamente, verifica l'SSH senza password con il seguente comando:

    ssh localhost

    Una volta effettuato l'accesso senza password, puoi procedere al passaggio successivo.

    Installa Hadoop

    Innanzitutto, accedi con l'utente hadoop e scarica l'ultima versione di Hadoop con il seguente comando:

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

    Una volta completato il download, estrai il file scaricato con il seguente comando:

    tar -xvzf hadoop-3.2.1.tar.gz

    Successivamente, sposta la directory estratta in /usr/local/:

    sudo mv hadoop-3.2.1 /usr/local/hadoop

    Quindi, crea una directory per archiviare il registro con il seguente comando:

    sudo mkdir /usr/local/hadoop/logs

    Successivamente, modifica la proprietà della directory hadoop in hadoop:

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

    Successivamente, dovrai configurare le variabili di ambiente Hadoop. Puoi farlo modificando il file ~/.bashrc:

    nano ~/.bashrc

    Aggiungi le seguenti righe:

    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"
    

    Salva e chiudi il file quando hai finito. Quindi, attiva le variabili di ambiente con il seguente comando:

    source ~/.bashrc

    Configura Hadoop

    In questa sezione impareremo come configurare Hadoop su un singolo nodo.

    Configurare le variabili d'ambiente Java

    Successivamente, dovrai definire le variabili di ambiente Java in hadoop-env.sh per configurare le impostazioni del progetto relative a YARN, HDFS, MapReduce e Hadoop.

    Innanzitutto, individua il percorso Java corretto utilizzando il seguente comando:

    which javac

    Dovresti vedere il seguente output:

    /usr/bin/javac
    

    Quindi, trova la directory OpenJDK con il seguente comando:

    readlink -f /usr/bin/javac

    Dovresti vedere il seguente output:

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

    Successivamente, modifica il file hadoop-env.sh e definisci il percorso Java:

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

    Aggiungi le seguenti righe:

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

    Successivamente, dovrai anche scaricare il file di attivazione Javax. Puoi scaricarlo con il seguente comando:

    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

    Ora puoi verificare la versione di Hadoop utilizzando il seguente comando:

    hadoop version

    Dovresti ottenere il seguente output:

    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
    

    Configurare il file core-site.xml

    Successivamente, dovrai specificare l'URL per il tuo NameNode. Puoi farlo modificando il file core-site.xml:

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

    Aggiungi le seguenti righe:

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

    Salva e chiudi il file quando hai finito:

    Configura il file hdfs-site.xml

    Successivamente, sarà necessario definire la posizione per l'archiviazione dei metadati del nodo, del file fsimage e del file di registro delle modifiche. Puoi farlo modificando il file hdfs-site.xml. Innanzitutto, crea una directory per l'archiviazione dei metadati del nodo:

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

    Successivamente, modifica il file hdfs-site.xml e definisci la posizione della directory:

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

    Aggiungi le seguenti righe:

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

    Salva e chiudi il file.

    Configura il file mapred-site.xml

    Successivamente, dovrai definire i valori MapReduce. Puoi definirlo modificando il file mapred-site.xml:

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

    Aggiungi le seguenti righe:

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

    Salva e chiudi il file.

    Configurare il file yarn-site.xml

    Successivamente, dovrai modificare il file yarn-site.xml e definire le impostazioni relative a YARN:

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

    Aggiungi le seguenti righe:

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

    Salva e chiudi il file quando hai finito.

    Formato HDFS NomeNodo

    Successivamente, dovrai convalidare la configurazione Hadoop e formattare il NameNode HDFS.

    Innanzitutto, accedi con l'utente Hadoop e formatta HDFS NameNode con il seguente comando:

    su - hadoop
    hdfs namenode -format

    Dovresti ottenere il seguente output:

    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 ubunt4/69.87.216.36
    ************************************************************/
    

    Avvia il cluster Hadoop

    Innanzitutto, avvia NameNode e DataNode con il seguente comando:

    start-dfs.sh

    Dovresti ottenere il seguente output:

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

    Successivamente, avvia la risorsa YARN e nodemanagers eseguendo il seguente comando:

    start-yarn.sh

    Dovresti ottenere il seguente output:

    Starting resourcemanager
    Starting nodemanagers
    

    Ora puoi verificarli con il seguente comando:

    jps

    Dovresti ottenere il seguente output:

    5047 NameNode
    5850 Jps
    5326 SecondaryNameNode
    5151 DataNode
    

    Accedi all'interfaccia web di Hadoop

    È ora possibile accedere a Hadoop NameNode utilizzando l'URL http://your-server-ip:9870. Dovresti vedere la seguente schermata:

    Puoi anche accedere ai singoli DataNode utilizzando l'URL http://your-server-ip:9864. Dovresti vedere la seguente schermata:

    Per accedere a YARN Resource Manager, utilizza l'URL http://your-server-ip:8088. Dovresti vedere la seguente schermata:

    Conclusione

    Congratulazioni! hai installato correttamente Hadoop su un singolo nodo. Ora puoi iniziare a esplorare i comandi HDFS di base e progettare un cluster Hadoop completamente distribuito. Non esitate a chiedermi se avete domande.