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:
Sur la page suivante, cliquez avec le bouton droit de la souris et copiez le lien du dernier binaire de version stable.
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:
Entrez le répertoire de la version que vous avez téléchargée:
Enfin, recherchez le fichier.mds
de la version que vous avez téléchargée, puis copiez le lien du fichier correspondant:
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/
. . .
Option 2: Utiliser Readlink pour définir la valeur de manière dynamique
/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.