Vous êtes sur la page 1sur 10

Prof. M.

Merrouchi
Commandes Hadoop
I- Commandes Shell du système de fichiers pour HDFS
Les commandes du système de fichiers Hadoop sont exécutées en utilisant le script
bin/hdfs comme suit.

hdfs dfs [COMMAND[COMMAND_OPTIONS]]

Le système de fichiers (FS) se réfère non seulement au HDFS mais aussi à d'autres systèmes
de fichiers supportés par Hadoop tels que Local FS et HFTP FS. Un chemin de répertoire HDFS peut
être spécifié en utilisant le préfixe hdfs://namenodehost ou le chemin relatif commençant par
le répertoire racine dans HDFS /. Les sections suivantes traitent de certaines des commandes
système de fichiers Hadoop les plus utilisées pour HDFS.

Création d'un répertoire


La commande mkdir est utilisée pour créer un ou plusieurs répertoires dans le HDFS. La
commande mkdir est utilisée comme suit.

hdfs dfs -mkdir [-p] <chemins>

Si l'option -p est utilisée, tous les répertoires précédents du chemin du répertoire sont créés.
Par exemple, la commande suivante crée le répertoire /user/hadoop/dir1 et le répertoire
/dir2/dir3 y compris tous les répertoires dans le chemin du répertoire.

hdfs dfs -mkdir -p /user/hadoop/dir1 hdfs://localhost:9000/dir2/dir3

Il renvoie 0 sur le succès et -1 sur l'erreur.

Liste des fichiers et répertoires


La commande ls liste les statistiques pour un fichier ou un répertoire donné. Pour un
répertoire donné, la commande liste les fichiers et sous-répertoires. Son utilisation est la suivante.

hdfs dfs -ls <args>

La commande ls avec un dir arg liste les statistiques suivantes.

permissions userid groupid modification_date modification_time dirname

Pour un fichier comme arg, la commande ls liste les statistiques suivantes.

permissions number_of_replicas userid groupid filesize modification_date


modification_time filename
Par exemple, la commande suivante liste les fichiers et répertoires du répertoire
/user/hadoop/dir1.

hdfs dfs -ls /user/hadoop/dir1

La version récursive de la commande est lsr avec l'utilisation suivante.

1
hdfs dfs -lsr <args>

La commande suivante liste tous les sous-répertoires et les fichiers qu'ils contiennent pour le
répertoire /dir1.

hdfs dfs -lsr hdfs://localhost:9000/dir1

Placer des fichiers dans le SFHD


La commande put est utilisée pour mettre les fichiers du système de fichiers local, ou stdin
dans le HDFS. La commande put est la suivante.

hdfs dfs -put <localsrc> .... <dst>

<localsrc> spécifie les fichiers locaux à mettre dans HDFS et <dst> spécifie la destination dans
HDFS. Par exemple, la commande suivante place localfile1 et localfile2 dans le répertoire
HDFS /user/hadoop/dir1.

hdfs dfs -put localfile1 localfile2 hdfs://localhost:9000/user/hadoop/dir1

Une commande synonyme est copyFromLocal, qui restreint la source au système de fichiers
local. L'option -f de copyFromLocal écrase la destination. La commande moveFromLocal est
également similaire à la commande put, à la différence près que le répertoire source local est
supprimé après copie.
La commande put renvoie 0 en cas de succès et -1 en cas d'erreur.

Création d'un fichier


La commande touchz permet de créer un fichier de longueur nulle et possède la syntaxe
suivante.

hdfs dfs -touchz URI[URI ....

Par exemple, la commande suivante crée deux fichiers-fichier1 dans /user/hadoop/dir1 et


fichier2 dans /user/hadoop/dir2. Le chemin du répertoire doit déjà être créé.

hdfs dfs -touchz /user/hadoop/dir1/file1 hdfs://localhost:9000/user/hadoop/dir2/file2

La commande touchz renvoie 0 en cas de succès et -1 en cas d'erreur. La commande échoue si le


fichier existe déjà et n'est pas de longueur zéro.

Modification des associations de groupe pour les fichiers et les répertoires


La commande chgrp est utilisée pour changer l'association de groupe pour les fichiers et
répertoires. L'utilisation de chgrp est la suivante.

hdfs dfs -chgrp[-R] GROUP URI[URI...]

L'option -R rend les changements récursifs dans l'ensemble du système de fichiers. Récursivement
implique des sous-répertoires et des fichiers dans les sous-répertoires. L'utilisateur qui exécute la
commande doit être soit un super-utilisateur, soit le propriétaire du fichier/répertoire.

2
Par exemple, la commande suivante définit le groupe du répertoire /user/hadoop/dir1 et des
sous-répertoires et fichiers du répertoire et des sous-répertoires à hadoop. Le groupe
/user/hadoop/dir2/file1 est également défini sur hadoop.

hdfs dfs -chgrp -R hadoop /user/hadoop/dir1 hdfs://localhost:9000/user/hadoop/dir2/file1

Modification des autorisations des fichiers


La commande chmod est utilisée pour changer les permissions des fichiers et son utilisation
est la suivante.

hdfs dfs -chmod[-R] <MODE[,MODE]..... | OCTALMODE> URI[URI ....]

L'option -R rend les changements récursifs dans l'ensemble du système de fichiers. Récursivement
implique des sous-répertoires et des fichiers dans les sous-répertoires. L'utilisateur qui exécute la
commande doit être soit un super-utilisateur, soit le propriétaire du fichier/répertoire.
Par exemple, la commande suivante modifie les permissions du fichier /file1 et du
répertoire /user/hadoop/dir2 à 700.

hdfs dfs -chmod -R 700 hdfs://localhost:9000/file1 /user/hadoop/dir2

Changement de propriétaire des fichiers et répertoires


La commande chown est utilisée pour changer le propriétaire des fichiers et répertoires.
L'utilisation de chown est la suivante.

hdfs dfs -chown [-R] [OWNER] [ :[GROUP]] URI[URI ]

Le groupe propriétaire peut également être spécifié avec OWNER:GROUP. L'option -R rend les
changements récursifs dans l'ensemble du système de fichiers. Récursivement implique des sous-
répertoires et des fichiers dans les sous-répertoires. L'utilisateur qui exécute la commande doit
être soit un super-utilisateur, soit le propriétaire du fichier ou du répertoire.
Par exemple, la commande suivante définit le propriétaire du répertoire /user/hadoop/dir1 et
sous-répertoires et fichiers dans le répertoire et sous-répertoires à hadoop:hadoop. Le
propriétaire de /user/hadoop/dir2/file1 est également réglé sur hadoop:hadoop.

hdfs dfs dfs -chown -R hadoop:hadoop /user/hadoop/dir1


hdfs://localhost:9000/user/hadoop/dir2/ fichier1

Copie de fichiers dans le système de fichiers local


La commande get permet de copier les fichiers du HDFS vers le système de fichiers local.
La syntaxe de la commande est la suivante.

hdfs dfs -get [-ignorecrc] [-crc] <src> <localdst>

Un fichier.crc est créé dans le système de fichiers local pour la vérification de la somme de
contrôle. Par défaut, les fichiers qui échouent à la vérification de la somme de contrôle CRC ne
sont pas copiés. Pour copier les fichiers qui échouent à la vérification de la somme de contrôle,
incluez l'option - ignorecrc. L'option -crc copie également les fichiers.crc.

Par exemple, la commande suivante copie /user/hadoop/file1 de HDFS vers /user/local/

3
file1 dans le système de fichiers local.

hdfs dfs -get /user/hadoop/file1 /user/local/file1

Une commande synonyme est copyToLocal, qui limite la destination à la référence du fichier
local. La commande get peut également être utilisée pour copier de HDFS vers HDFS, bien qu'elle
ne soit pas conçue à cette fin. La commande get retourne 0 en cas de succès et -1 en cas d'erreur.

Ajouter à un fichier
La commande appendToFile est utilisée pour ajouter un ou plusieurs fichiers du système
de fichiers local ou stdin à un fichier HDFS et son utilisation est la suivante.

hdfs dfs -appendToFile <localsrc> .... <dst>

Par exemple, la commande suivante ajoute les fichiers locaux localfile1 et localfile2 au
fichier HDFS /user/hadoop/dir1/hadoopfile1.

hdfs dfs -appendToFile localfile1 localfile2 /user/hadoop/dir1/hadoopfile1

La commande appendToFile renvoie 0 en cas de succès et -1 en cas d'erreur.

Copie des fichiers HDFS dans STDOUT


La commande cat est utilisée pour copier des fichiers locaux ou/et HDFS vers stdout et son
utilisation est la suivante.

hdfs dfs -cat URI [URI ...]]

Par exemple, la commande suivante copie le fichier local:///file1 et le fichier HDFS


hdfs://localhost:8029/file2 vers stdout.

hdfs dfs -cat file:///file1 hdfs://localhost:8029/file2

La commande tail sort le dernier Ko d'un fichier vers stdout. L'utilisation de la commande est
la suivante.

hdfs dfs -tail [-f] URI

L'option -f affiche les données ajoutées au fur et à mesure que le fichier grandit, comme sous
UNIX. Par exemple, la commande suivante édite le dernier Ko de file1 dans le répertoire racine du
HDFS.

hdfs dfs -tail hdfs://localhost:9000/file1

La commande de queue renvoie 0 en cas de succès et -1 en cas d'erreur.

Test d'un fichier


La commande test est utilisée pour tester l'existence d'un fichier, si le fichier est de
longueur zéro, et si le fichier est un répertoire. Son utilisation est la suivante.

hdfs dfs -test -[ezd] URI

4
Les options de commande sont présentées dans le tableau suivant:
Option Description

-e Teste si le fichier existe. Renvoie 1 si vrai et 0 si faux.


-z Teste si le fichier est de longueur zéro. Renvoie 1 si vrai et 0 si faux.
-d Teste si le fichier est un répertoire. Renvoie 1 si vrai et 0 si faux.

Par exemple, la commande suivante vérifie si le fichier1 existe dans HDFS.

hdfs dfs -test -e hdfs://localhost:9000/file1

Compter les fichiers et les répertoires


La commande count est utilisée pour compter le nombre de fichiers et de répertoires pour
un ou plusieurs chemins HDFS et son utilisation est la suivante.

hdfs dfs -count [-q] <chemins>

Les colonnes de sortie par défaut sont DIR_COUNT, FILE_COUNT, CONTENT_SIZE et FILE_NAME. Si
l'option -q est utilisée, les colonnes de sortie sont QUOTA, REMAINING_QUOTA, SPACE_QUOTA,
REMAINING_SPACE_QUOTA, DIR_ COUNT, FILE_COUNT, CONTENT_SIZE et FILE_NAME.
Par exemple, la commande suivante édite les colonnes CONTENT_SIZE et FILE_NAME pour /file1
dans HDFS et les colonnes DIR_COUNT, FILE_COUNT, CONTENT_SIZE et FILE_NAME pour /dir1
dans HDFS.

hdfs dfs -count hdfs://localhost:9000/file1 hdfs://localhost:9000/dir1

La commande stat énumère les statistiques sur un chemin de fichier ; son utilisation est la
suivante.

hdfs dfs -stat chemin

La commande stat renvoie 0 en cas de succès et -1 en cas d'erreur.

Copie de fichiers dans le HDFS


La commande cp est utilisée pour copier des fichiers d'une ou plusieurs sources vers une
destination dans HDFS. Si plusieurs fichiers sont copiés, la destination doit être un répertoire.
L'option -f écrase la destination si elle existe déjà. L'option -p préserve topax ; les horodatages, la
propriété, la permission, ACL, XAttr. Si -p est spécifié sans arg, il conserve les horodatages, la
propriété, la permission. Le paramètre -pa, qui est l'option -p et l'arg 'a', préserve également
ACL.

hdfs dfs -cp [-f] [-p | -p[topax]] URI[URI ....] <dest>

Par exemple, la commande suivante copie les fichiers /user/hadoop/file1 et


/user/hadoop/file2 dans le répertoire /user/hadoop/dir1.

hdfs dfs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir1

La commande cp renvoie 0 en cas de succès et -1 en cas d'erreur.

5
Déplacement de fichiers dans le HDFS
La commande mv est utilisée pour déplacer des fichiers dans HDFS et son utilisation est la
suivante.

hdfs dfs -mv URI[URI ...] <dest>

Si plusieurs fichiers sont copiés, la destination doit être un répertoire.


Par exemple, la commande suivante déplace file1, file2 et file3 du répertoire racine du
HDFS vers le répertoire dir1.

hdfs dfs -mv hdfs://localhost:9000/file1 hdfs://ocalhost:9000/file2


hdfs://ocalhost:9000/fichier3 hdfs://ocalhost:9000/dir1

Les fichiers sources sont supprimés après le déplacement vers la destination. La commande mv
renvoie 0 en cas de succès et -1 en cas d'erreur.

Affichage des tailles de fichiers et de répertoires


La commande du est utilisée pour afficher l'utilisation du disque (tailles) des fichiers et
répertoires dans un répertoire donné ou la taille d'un fichier donné. Son utilisation est la suivante.

hdfs dfs -du [-s] [-h] URI [URI ....]

L'option -s permet d'agréger les tailles de fichier plutôt que de lister les tailles individuelles de
fichier. L'option -h formate les tailles dans un format lisible tel que 128M au lieu de 134217730.
Par exemple, la commande suivante liste la taille du fichier /user/hadoop/file1 et le fichier et
la taille du fichier pour le répertoire /user/hadoop/dir1.

hdfs dfs -du /user/hadoop/file1 hdfs://localhost:9000/user/hadoop/dir1

La commande du renvoie 0 sur succès et -1 sur erreur.


Une alternative à l'utilisation de la commande du avec l'option -s est la commande dus (obsolète)
avec l'utilisation suivante.

hdfs dfs dfs -dus <args>

Sortie d'un fichier au format texte


La commande texte édite un fichier (ZIP ou TextRecordInputStream) au format texte ;
son utilisation est la suivante.

hdfs dfs -text <src>

Suppression de fichiers et de répertoires


La commande rm est utilisée pour supprimer les fichiers et les répertoires vides et son
utilisation est la suivante.

hdfs dfs -rm [-skipTrash] URI [URI...]

La commande rm renvoie 0 en cas de succès et -1 en cas d'erreur.

6
L'option [-skipTrash] saute la corbeille et supprime les fichiers immédiatement, ce qui peut
être utile pour supprimer des fichiers d'un répertoire hors quota. Par exemple, la commande
suivante supprime /user/hadoop/dir1 dans HDFS et file1 dans /user/hadoop/dir2.

hdfs dfs -rm hdfs://localhost:9000/user/hadoop/dir1


/user/hadoop/dir2/file1

Si le répertoire à supprimer n'est pas vide, ajoutez l'option -f. L'option -f n'affiche pas de
message de diagnostic ou ne modifie pas l'état de sortie pour indiquer une erreur si le fichier
n'existe pas. Par exemple, vous pouvez supprimer le répertoire non vide /user/hadoop/dir1 avec
la commande suivante.

hdfs dfs -rm -f hdfs://localhost:9000/user/hadoop/dir1

Pour supprimer des sous-répertoires récursivement, utilisez la commande -rm -r ou -rm -R,
qui a la syntaxe suivante.

hdfs dfs -rm -r [-skipTrash] URI [URI ....]

Par exemple, vous pouvez supprimer le répertoire


hdfs://localhost:9000/user/hadoop/dir1 et tous les sous-répertoires (non vides) avec la
commande suivante.

hdfs dfs -rm -r hdfs://localhost:9000/user/hadoop/dir1

La commande pour vider la corbeille est expunge et son utilisation est la suivante.

hdfs dfs -expunge

II- Utilisation de l'utilitaire dsfadmin


La commande hdfs dfsadmin vous permet d'administrer HDFS depuis la ligne de
commande. Alors que les commandes hdfs dfs que vous avez apprises dans la section précédente
vous aident à gérer les fichiers et répertoires HDFS, la commande dfsadmin est utile pour
effectuer des tâches administratives générales spécifiques à HDFS. La commande suivante donne
une idée sur toutes les options disponibles pour l'utilitaire dfsadmin:

hdfs dfsadmin -help

Voici Quelques commandes dfsadmin


La commande dfsadmin -report
L'outil dfsadmin vous aide à examiner l'état du cluster HDFS. La commande
dfsadmin -report produit une sortie utile qui montre les statistiques de base du cluster, y
compris l'état des DataNodes et NameNode, la capacité du disque configuré et l'état des blocs de
données. Elle affiche les détails HDFS pour l'ensemble du cluster, ainsi que séparément pour
chaque nœud du cluster. La commande à exécuter est:

hdfs dfsadmin -report

7
La commande dfsadmin -refreshNodes
La commande dfsadmin -refreshNodes met à jour le NameNode avec la liste des
DataNodes autorisés à se connecter au NameNode.
Le NameNode lit les noms d'hôtes des DataNode à partir des fichiers pointés par les paramètres
de configuration dfs.hosts et dfs.hosts.exclude dans le fichier hdfs site.xml. Le fichier indiqué dans
le paramètre dfs.hosts liste tous les hôtes autorisés à s'enregistrer avec le NameNode. Toutes les
entrées dans le fichier indiqué dans dfs.hosts.exclude pointent vers des DataNodes qui doivent
être déclassés (le déclassement est finalisé après que toutes les répliques du nœud qui est
déclassé ont été répliquées vers d'autres DataNodes). La commande à exécuter est:

hdfs dfsadmin -refreshNodes

La commande dfsadmin –metasave


La commande dfsadmin -metasave fournit plus d'informations que celle fournie par la
commande dfsadmin -report. Cette commande vous permet d'obtenir diverses informations
relatives aux blocs, telles que :
- Nombre total de blocs
- Blocs en attente de réplication
- Blocs qui sont actuellement en cours de réplication
Voici comment exécuter la commande dfsadmin -metasave :

sudo -u hdfs hdfs dfsadmin -metasave test.txt

Lorsque vous exécutez la commande dfsadmin -metasave, elle crée un fichier dans le
répertoire log de hadoop hdfs sur le serveur où vous avez exécuté la commande. Le fichier de
sortie contiendra les informations sur les blocs.

La commande dfsadmin –safemode


Parfois, il se peut que vous souhaitiez effectuer des actions administratives qui exigent que
le HDFS soit en mode lecture seule. Vous pouvez explicitement mettre le NameNode en mode sans
échec pendant ces opérations. Une fois que vous avez terminé d'effectuer les actions
administratives, vous pouvez sortir le NameNode du mode sans échec. Utilisez la commande
dfsadmin -safemode pour gérer les opérations en mode sans échec pour le NameNode. Vous
pouvez vérifier l'état actuel du mode sans échec avec la commande -safemode get :

hdfs dfsadmin -safemode get

Vous pouvez placer le NameNode en mode sans échec avec la commande -safemode enter :

hdfs dfsadmin -safemode enter

Enfin, vous pouvez sortir le NameNode du safemode avec la commande -safemode leave :

hdfs dfsadmin -safemode leave

8
III- Quelques opérations de gestion du cluster Hadoop
Mettre hors service un DataNode
Il y a des situations où nous devons désactiver temporairement un DataNode du cluster,
par exemple, parce que l'espace de stockage du DataNode a été utilisé. Dans cette recette, nous
décrivons les étapes à suivre pour retirer un DataNode d'un cluster Hadoop vivant.
Connectez-vous au nœud maître à partir de l'ordinateur administrateur du cluster. Puis exécuter
les commandes suivantes:

1- Créez le fichier $HADOOP_HOME/conf/dfs-exclude.txt, et mettre dans ce fichier les noms


des DataNodes à retirer du cluster.
Le fichier dfs-exclude.txt contient les noms d'hôtes DataNode, un par ligne, qui doivent être
retirés du cluster.
Remarque: supprimez les informations sur les nœuds déclassés du fichier
$HADOOP_HOME/conf/dfs-include.txt, si vous utilisez le fichier yarn.include.

2- Ajoutez la propriété suivante au fichier $HADOOP_HOME/conf/hdfs-site.xml :

<property>
<name>dfs.hosts.exclude</name>
<value>$HADOOP_HOME/conf/dfs-exclude.txt</value>
</property>

3- Forcez le NameNode pour recharger les DataNodes actifs en utilisant la commande suivante :

hdfs dfsadmin -refreshNodes

Le processus de mise hors service d'un DataNode peut prendre un certain temps, le temps
dépendant de la taille des disques durs. En effet, Hadoop doit répliquer les blocs de données HDFS
sur le nœud qui sera bientôt retiré vers d'autres nœuds du cluster. Vous pouvez vérifier l'état
d'avancement de cette opération en lançant la commande dfsadmin -report à intervalles
réguliers. Cette commande vous montrera les nœuds connectés au cluster.

4- Obtenir un rapport de description de chaque DataNode actif :


hdfs dfsadmin -report

Vous pouvez également vérifier l'interface Web http://DataNodehost:50070 pour le DataNode en


cours de mise hors service et vérifier son état administrateur. L'état admin devrait être changé en
"Decommission in progress" à ce stade. Lorsque vous voyez que la mise hors service du
DataNode est terminé, tous ses blocs ont été répliqués vers d'autres nœuds. L'interface web doit
également indiquer l'état du DataNode comme" Decommissioned".

Mettre hors service un NodeManager


Suivre ces étapes:

1- Add the name of the NodeManager host to the $HADOOP_CONF_DIR/yarn.exclude file on


the server where the NameNode is running.

Remarque: supprimez les informations sur les nœuds déclassés du fichier $HADOOP_CONF_
DIR/yarn.include, si vous utilisez le fichier yarn.include.

9
2- Rafraîchir le ResourceManager en exécutant la commande suivante :

yarn rmadmin –refreshNodes

3- Comme pour le DataNode, une fois la mise hors service du NodeManager est terminée, vous
êtes libre d'arrêter le nœud sur lequel le NodeManager était exécuté.

Remettre un nœud en service


La remise au point d'un nœud signifie que vous voulez l'ajouter de nouveau au cluster.
Comme vous pouvez le constater, le "recommissioning" est l'opposé du "decommissioning" et, par
conséquent, vous devez refaire les pas en arrière.
Supposons que le nœud que vous voulez remettre en service exécute à la fois un service DataNode
et un service NodeManager. Démarrez d'abord l'hôte. Pour le remettre en service, supprimez le
nom d'hôte du fichier d'exclusion dans les fichiers HDFS et YARN (dfs.exclude et yarn.exclude).
Ensuite, exécutez les deux commandes suivantes, et vous êtes prêt à y aller :

hdfs dfsadmin -refreshNodes

yarn rmadmin -refreshNodes

Remarque: pour exécuter ces instructions, il faut avoir les droits nécessaires.

10