Comment installer Hadoop en mode autonome sur Ubuntu 16.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 2.7 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 2.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 16.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 16.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-get update

Nous installerons ensuite OpenJDK, le kit de développement Java par défaut sur Ubuntu 16.04.

sudo apt-get install default-jdk

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

java -version
Outputopenjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14)
OpenJDK 64-Bit Server VM (build 25.91-b14, 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. Suivez le binaire pour la version actuelle:

Screenshot of the Hadoop Releases page highlighting the link the mirrors page

Sur la page suivante, cliquez avec le bouton droit de la souris et copiez le lien du dernier binaire de version stable.

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

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

wget http://apache.mirrors.tds.net/hadoop/common/hadoop-2.7.3/hadoop-2.7.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. Renvoyez lesreleases page, puis suivez le lien Apache:

Screenshot highlighting the .mds file

Entrez le répertoire de la version que vous avez téléchargée:
Screenshot highlighting the .mds file

Enfin, recherchez le fichier.mds de la version que vous avez téléchargée, puis copiez le lien du fichier correspondant:

Screenshot highlighting the .mds file

Encore une fois, nous allons faire un clic droit pour copier l'emplacement du fichier, puis utiliserwget pour transférer le fichier:

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

Puis lancez la vérification:

shasum -a 256 hadoop-2.7.3.tar.gz
Outputd489df3808244b906eb38f4d081ba49e50c4603db03efd5e594a1e98b09259c2  hadoop-2.7.3.tar.gz

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

cat hadoop-2.7.3.tar.gz.mds

~/hadoop-2.7.3.tar.gz.mds

...
hadoop-2.7.3.tar.gz: SHA256 = D489DF38 08244B90 6EB38F4D 081BA49E 50C4603D B03EFD5E 594A1E98 B09259C2
...

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-2.7.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-2.7.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-8-openjdk-amd64/jre/

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-8-openjdk-amd64/jre/
 . . .

/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 [--config confdir] [COMMAND | CLASSNAME]
  CLASSNAME            run the class named CLASSNAME
 or
  where COMMAND is one of:
  fs                   run a generic filesystem user client
  version              print the version
  jar             run a jar file
                       note: please use "yarn jar" to launch
                             YARN applications, not this command.
  checknative [-a|-h]  check native hadoop and compression libraries availability
  distcp   copy file or directories recursively
  archive -archiveName NAME -p  *  create a hadoop archive
  classpath            prints the class path needed to get the
  credential           interact with credential providers
                       Hadoop jar and the required libraries
  daemonlog            get/set the log level for each daemon

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 une expression régulière pour rechercher les occurrences du motprincipal à l'intérieur 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-2.7.3.jar grep ~/input ~/grep_example 'principal[.]*'

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=1247674
                FILE: Number of bytes written=2324248
                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=37
                Map output materialized bytes=47
                Input split bytes=114
                Combine input records=0
                Combine output records=0
                Reduce input groups=2
                Reduce shuffle bytes=47
                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)=61
                Total committed heap usage (bytes)=263520256
        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=151
        File Output Format Counters
                Bytes Written=37

[.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.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

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/*
Output6       principal
1       principal.

La tâche MapReduce a trouvé une occurrence du motprincipal suivie d'un point et de six occurrences 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 savoir comment é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.