Comment installer Hadoop en mode autonome sur Ubuntu 18.04

introduction

Hadoop est un framework de programmation basé sur Java qui prend en charge le traitement et le stockage de jeux de données extrêmement volumineux sur un cluster de machines peu coûteuses. C'était le premier grand projet open source sur le marché des Big Data et est sponsorisé par Apache Software Foundation.

Hadoop est composé de quatre couches principales:

  • Hadoop Common est la collection d'utilitaires et de bibliothèques prenant en charge d'autres modules Hadoop.

  • HDFS, qui signifie Hadoop Distributed File System, est responsable de la persistance des données sur le disque.

  • YARN, abréviation de Yet Another Resource Negotiator, est le «système d'exploitation» de HDFS.

  • MapReduce est le modèle de traitement d'origine pour les clusters Hadoop. Il distribue le travail au sein du cluster ou de la carte, puis organise et réduit les résultats des nœuds en une réponse à une requête. De nombreux autres modèles de traitement sont disponibles pour la version 3.x de Hadoop.

Les clusters Hadoop étant relativement complexes à configurer, le projet inclut un mode autonome qui convient à l'apprentissage de Hadoop, à l'exécution d'opérations simples et au débogage.

Dans ce didacticiel, nous allons installer Hadoop en mode autonome et exécuter l’un des exemples de programmes MapReduce qu’il inclut pour vérifier l’installation.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

  • An Ubuntu 18.04 server with a non-root user with sudo privileges: Vous pouvez en savoir plus sur la façon de configurer un utilisateur avec ces privilèges dans notre guideInitial Server Setup with Ubuntu 18.04.

Une fois ces conditions préalables remplies, vous êtes prêt à installer Hadoop et ses dépendances.

Avant de commencer, vous voudrez peut-être aussi jeter un œil àAn Introduction to Big Data Concepts and Terminology ouAn Introduction to Hadoop

[[step-1 -—- Installing-java]] == Étape 1 - Installation de Java

Pour commencer, nous allons mettre à jour notre liste de paquets:

sudo apt update

Ensuite, nous installerons OpenJDK, le kit de développement Java par défaut sur Ubuntu 18.04:

sudo apt install default-jdk

Une fois l’installation terminée, vérifions la version.

java -version
Outputopenjdk 10.0.1 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)

Cette sortie vérifie que OpenJDK a été installé avec succès.

[[step-2 -—- Installing-hadoop]] == Étape 2 - Installation de Hadoop

Une fois Java en place, nous visiterons lesApache Hadoop Releases page pour trouver la version stable la plus récente.

Accédez àbinary pour la version que vous souhaitez installer. Dans ce guide, nous allons installer Hadoop 3.0.3.

Screenshot of the Hadoop releases page highlighting the link to the latest stable binary

Sur la page suivante, cliquez avec le bouton droit de la souris et copiez le lien dans le fichier binaire de la version.

Screenshot of the Hadoop mirror page

Sur le serveur, nous utiliseronswget pour le récupérer:

wget http://www-us.apache.org/dist/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz

[.note] #Note: Le site Web Apache vous dirigera vers le meilleur miroir de manière dynamique, de sorte que votre URL peut ne pas correspondre à l'URL ci-dessus.
#

Afin de nous assurer que le fichier que nous avons téléchargé n'a pas été modifié, nous allons faire une vérification rapide à l'aide de SHA-256. Revenez auxreleases page, puis cliquez avec le bouton droit de la souris et copiez le lien vers le fichier de somme de contrôle pour le binaire de version que vous avez téléchargé:

Screenshot highlighting the .mds file

Encore une fois, nous utiliseronswget sur notre serveur pour télécharger le fichier:

wget https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz.mds

Puis lancez la vérification:

shasum -a 256 hadoop-3.0.3.tar.gz
Outputdb96e2c0d0d5352d8984892dfac4e27c0e682d98a497b7e04ee97c3e2019277a  hadoop-3.0.3.tar.gz

Comparez cette valeur avec la valeur SHA-256 dans le fichier.mds:

cat hadoop-3.0.3.tar.gz.mds

~/hadoop-3.0.3.tar.gz.mds

...
/build/source/target/artifacts/hadoop-3.0.3.tar.gz:
SHA256 = DB96E2C0 D0D5352D 8984892D FAC4E27C 0E682D98 A497B7E0 4EE97C3E 2019277A
...

Vous pouvez en toute sécurité ignorer la différence entre les cas et les espaces. La sortie de la commande que nous avons exécutée sur le fichier que nous avons téléchargé à partir du miroir doit correspondre à la valeur du fichier que nous avons téléchargé à partir d'apache.org.

Maintenant que nous avons vérifié que le fichier n'était pas corrompu ou modifié, nous utiliserons la commandetar avec l'indicateur-x pour extraire,-z pour décompresser,-v pour une sortie détaillée, et-f pour spécifier que nous extrayons d'un fichier. Utilisez la tabulation ou remplacez le numéro de version correct dans la commande ci-dessous:

tar -xzvf hadoop-3.0.3.tar.gz

Enfin, nous allons déplacer les fichiers extraits dans/usr/local, l'emplacement approprié pour les logiciels installés localement. Modifiez le numéro de version, si nécessaire, pour qu'il corresponde à la version que vous avez téléchargée.

sudo mv hadoop-3.0.3 /usr/local/hadoop

Avec le logiciel en place, nous sommes prêts à configurer son environnement.

[[step-3 -—- configuring-hadoop-39-s-java-home]] == Étape 3 - Configuration de Java Home de Hadoop

Hadoop nécessite que vous définissiez le chemin d'accès à Java, en tant que variable d'environnement ou dans le fichier de configuration Hadoop.

Le chemin vers Java,/usr/bin/java est un lien symbolique vers/etc/alternatives/java, qui est à son tour un lien symbolique vers le binaire Java par défaut. Nous utiliseronsreadlink avec l'indicateur-f pour suivre chaque lien symbolique dans chaque partie du chemin, de manière récursive. Ensuite, nous utiliseronssed pour supprimerbin/java de la sortie afin de nous donner la valeur correcte pourJAVA_HOME.

Pour trouver le chemin Java par défaut

readlink -f /usr/bin/java | sed "s:bin/java::"
Output/usr/lib/jvm/java-11-openjdk-amd64/

Vous pouvez copier cette sortie pour définir le répertoire principal Java de Hadoop sur cette version spécifique. Ainsi, si la valeur par défaut de Java est modifiée, cette valeur ne changera pas. Vous pouvez également utiliser la commandereadlink de manière dynamique dans le fichier pour qu'Hadoop utilise automatiquement la version Java définie par défaut.

Pour commencer, ouvrezhadoop-env.sh:

sudo nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh

Ensuite, choisissez l’une des options suivantes:

Option 1: définir une valeur statique

/usr/local/hadoop/etc/hadoop/hadoop-env.sh

 . . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
 . . .

/usr/local/hadoop/etc/hadoop/hadoop-env.sh

 . . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
 . . .

[.note] #Note: En ce qui concerne Hadoop, la valeur deJAVA_HOME danshadoop-env.sh remplace toutes les valeurs définies dans l'environnement par/etc/profile ou dans le profil d'un utilisateur.
#

[[step-4 -—- running-hadoop]] == Étape 4 - Exécuter Hadoop

Nous devrions maintenant pouvoir utiliser Hadoop:

/usr/local/hadoop/bin/hadoop
OutputUsage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
 or    hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
  where CLASSNAME is a user-provided Java class

  OPTIONS is none or any of:

--config dir                     Hadoop config directory
--debug                          turn on shell script debug mode
--help                           usage information
buildpaths                       attempt to add class files from build tree
hostnames list[,of,host,names]   hosts to use in slave mode
hosts filename                   list of hosts to use in slave mode
loglevel level                   set the log4j level for this command
workers                          turn on worker mode

  SUBCOMMAND is one of:
. . .

L’aide signifie que nous avons correctement configuré Hadoop pour s’exécuter en mode autonome. Nous allons nous assurer qu’il fonctionne correctement en exécutant l’exemple de programme MapReduce avec lequel il est livré. Pour ce faire, créez un répertoire appeléinput dans notre répertoire personnel et copiez-y les fichiers de configuration de Hadoop pour utiliser ces fichiers comme nos données.

mkdir ~/input
cp /usr/local/hadoop/etc/hadoop/*.xml ~/input

Ensuite, nous pouvons utiliser la commande suivante pour exécuter le programme MapReducehadoop-mapreduce-examples, une archive Java avec plusieurs options. Nous allons appeler son programmegrep, l'un des nombreux exemples inclus danshadoop-mapreduce-examples, suivi du répertoire d'entrée,input et du répertoire de sortiegrep_example. Le programme MapReduce grep comptera les correspondances d'un mot littéral ou d'une expression régulière. Enfin, nous fournirons l'expression régulièreallowed[.]* pour rechercher les occurrences du motallowed dans ou à la fin d'une phrase déclarative. L’expression est sensible à la casse, nous ne trouverions donc pas le mot s'il était en majuscule au début d’une phrase:

/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep ~/input ~/grep_example 'allowed[.]*'

Une fois la tâche terminée, elle fournit un résumé de ce qui a été traité et des erreurs qu’elle a rencontrées, mais cela ne contient pas les résultats réels.

Output . . .
        File System Counters
        FILE: Number of bytes read=1330690
        FILE: Number of bytes written=3128841
        FILE: Number of read operations=0
        FILE: Number of large read operations=0
        FILE: Number of write operations=0
    Map-Reduce Framework
        Map input records=2
        Map output records=2
        Map output bytes=33
        Map output materialized bytes=43
        Input split bytes=115
        Combine input records=0
        Combine output records=0
        Reduce input groups=2
        Reduce shuffle bytes=43
        Reduce input records=2
        Reduce output records=2
        Spilled Records=4
        Shuffled Maps =1
        Failed Shuffles=0
        Merged Map outputs=1
        GC time elapsed (ms)=3
        Total committed heap usage (bytes)=478150656
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters
        Bytes Read=147
    File Output Format Counters
        Bytes Written=34

[.Remarque]##

Note: Si le répertoire de sortie existe déjà, le programme échouera, et plutôt que de voir le résumé, la sortie ressemblera à quelque chose comme:

Output . . .
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:244)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:158)

Les résultats sont stockés dans le répertoire de sortie et peuvent être vérifiés en exécutantcat sur le répertoire de sortie:

cat ~/grep_example/*
Output19  allowed.
1   allowed

La tâche MapReduce a trouvé 19 occurrences du motallowed suivies d'un point et d'une occurrence là où ce n'était pas le cas. L'exécution du programme exemple a permis de vérifier que notre installation autonome fonctionnait correctement et que les utilisateurs non privilégiés du système pouvaient exécuter Hadoop à des fins d'exploration ou de débogage.

Conclusion

Dans ce didacticiel, nous avons installé Hadoop en mode autonome et l’avons vérifié en exécutant un exemple de programme fourni. Pour apprendre à écrire vos propres programmes MapReduce, vous pouvez consulter lesMapReduce tutorial d’Apache Hadoop qui parcourent le code derrière l’exemple. Lorsque vous êtes prêt à configurer un cluster, consultez le guide Apache FoundationHadoop Cluster Setup.