Nous mettrons à jour notre Politique de confidentialité prochainement. En voici un aperçu.

L'essentiel de Hadoop

Manipuler les fichiers en ligne de commande

Testez gratuitement nos 1341 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Naviguez avec le terminal dans l'arborescence HDFS. Ainsi, vous pourrez y stocker des données, les lire et les modifier.
09:24

Transcription

Nous pouvons utiliser la ligne de commande pour contrôler le hdfs, comme nous le ferions sur un système GNU/Linux pour interagir avec le système de fichier. Ainsi nous pouvons ouvrir un terminal. Et sous GNU/Linux nous ferions par exemple un ls / pour lister l'ensemble des fichiers ou des répertoires présents à la racine. Pour les avoir sous forme de colonne, nous allons faire un ls -l / et avoir une vision un petit peu plus claire. Sur le hdfs c'est assez similaire sauf que nous allons systématiquement préfixer la commande de hdfs dfs - et rajouter donc la commande ls. Donc la commande ls est toujours préfixée d'un tiret, il ne faut pas l'oublier. Et on va avoir sensiblement la même chose. Ça va lister donc les fichiers et les répertoires à la racine du hdfs. Donc les fichiers et les répertoires stockés sur l'ensemble du cluster hdfs. À chaque fois, on va avoir plusieurs colonnes. Avec en première colonne les permissions qui vont nous permettre de voir directement si c'est un répertoire, quels sont les droits pour le propriétaire, le groupe et les autres. Le x ici ne signifiant pas executable, mais signifiant uniquement traversable en ce qui concerne le répertoire. On voit le propriétaire et son groupe, on voit la taille donc pour un répertoire c'est de 0 et on voit la date à laquelle ça a été créé. On peut également demander à voir certains répertoires en particulier par exemple, le contenu du répertoire /user Contrairement à un shell classique, nous n'avons pas de current directory. Nous ne pouvons donc pas faire la commande cd ou la commande pwd pour please where do pour savoir dans quel répertoire nous opérons si jamais ne nous précisons rien ou si nous précisons des chemins relatifs. De ce fait, tous les chemins relatifs ou quand on ne précise pas le chemin sont forcément le home de l'utilisateur courant. C'est-à-dire qu'en fonction de l'utilisateur sur lequel on est, ça va aller automatiquement dans /user/cloudera si nous sommes le user cloudera. De ce fait si nous faisons hdfs dfs -ls ou hdfs dfs -ls . par exemple le pass relatif courant. Ou hdfs dfs -ls /user/cloudera cela va revenir strictement au même. Sur le hdfs il y a un user, un super user qui a tous les droits, qui peut accéder aux fichiers en lecture ou en écriture même s'il n'est pas le propriétaire du fichier ou s'il n'est pas dans son groupe, ou si les droits ne le lui permettent pas. Ce super user c'est le user hdfs. Il suffit pour l'utiliser de l'impersonifier sur la machine hôte. C'est-à-dire qu'on va faire un sudo -u hdfs qui va nous permettre de lancer les commandes en tant que user hdfs puis de faire la commande par exemple : hdfs dfs -ls Quand nous faisons ça, ce hdfs dfs -ls correspond à notre commande et ceci correspond à l'impersonification en tant que super user. Ici, on voit que ça ne fonctionne pas car il nous dit que le répertoire courant n'existe pas. En effet, il n'y a pas de /user/hdfs qui est le répertoire que l'on demande. Nous allons à présent voir comment transférer des fichiers entre le système de fichiers local et le système de fichiers distant. Pour cela nous allons donc créer un fichier local, test.txt par exemple grâce à la commande vim. Et nous allons le remplir de plusieurs lignes de texte qui seront première ligne, seconde ligne. Nous allons l'enregistrer en local et nous allons l'envoyer sur le hdfs dans un répertoire workspace. Alors avant tout, nous allons créer ce répertoire grâce à la commande hdfs dfs -mkdir suivie donc du nom du répertoire. On va vérifier qu'il a bien été créé grâce à la commande ls et nous voyons bien workspace qui vient d'être créé. Nous allons pouvoir donc envoyer désormais notre fichier test.txt grâce à la commande hdfs dfs -put Ça va prendre en premier argument le chemin vers le fichier local, donc ici text.txt dans le répertoire courant, puis en second argument, le chemin dans lequel on veut le copier sur le hdfs donc dans notre cas /workspace À savoir qu'il existe également un alias à cette commande qui s'appelle copyFromLocal. Nous allons donc maintenant vérifier que notre fichier est bien présent dans le répertoire /workspace ça a l'air d'être le cas et nous allons pouvoir afficher son contenu grâce à la commande : hdfs dfs -cat Ceci va nous permettre de récupérer directement le contenu. Il est assez courant d'avoir dans un même répertoire plusieurs fichiers du même format, notamment dans le cadre de l'utilisation des MapReduce. Aussi il est courant de faire un hdfs dfs -cat de notre répertoire /* cela permet de voir l'ensemble des contenus des fichiers du répertoire concaténés les uns à la suite des autres. Pour les récupérer en local, nous avons donc plusieurs solutions. La première est de faire un -cat et de récupérer la sortie standard pour la rediriger dans un fichier local par exemple : test-local.txt Une commande équivalente sur le hdfs est de faire un getmerge Ça va récupérer tout le contenu des fichiers du répertoire /workspace sur le hdfs et les mettre dans un fichier local. Une troisième possibilité est de faire uniquement un get qui, lui, ne prend pas un répertoire mais prend directement le nom d'un fichier. À chaque fois, il s'agit d'un chemin sur le hdfs en premier argument et d'un chemin sur le système de fichiers local en second argument. Nous allons à présent voir comment supprimer les fichiers. Donc pour cela, on peut faire un hdfs dfs -rm directement de /workspace par exemple. Sauf que comme sur un système GNU/Linux il refuse de le supprimer car c'est un répertoire il faut utiliser la commande rmdir De la même façon, il va refuser de le supprimer parce qu'il n'est pas vide. Alors plusieurs solutions, soit on fait un -rm /workspace/test.txt soit on fait -rm -r /workspace Toutes les options que l'on rajoute, on les rajoute avec des tirets comme avec la normal pause x. Donc il ne faut pas avoir peur d'avoir un -rm -r directement. Et dans ce cas là le rm devient récursif et permet de supprimer l'intégralité du répertoire /workspace Nous allons à présent voir comment jouer avec la compression sur le hdfs Nous avons déjà dit que la compression est supportée nativement. Nous allons voir dans quel cadre. Nous allons pour cela compresser en local notre fichier test.txt Nous allons prendre le fichier test.txt et appliquer la commande gzip dessus. Ça va nous permettre d'avoir un fichier test.txt.gz en local Nous allons l'envoyer dans un répertoire /workspace que nous allons recréer puisque nous l'avons supprimé précédemment et nous allons l'envoyer juste avec la commande put Nous faisons un put de test.txt.gz dans /workspace Nous avons donc, si on regarde le contenu du répertoire /workspace sur le hdfs un fichier qui est test.txt.gz Essayons de lire son contenu, on remarque que c'est un contenu compressé, gzipé et qui est difficilement lisible. Alors une première solution, c'est de faire un gmzip directement avec un pipe et de voir le résultat. Cependant on a dit que le hdfs supportait nativement la compression et la décompression et doit donc pouvoir nous ressortir le contenu du fichier sans avoir à passer par cet artifice. Pour cela il ne faut pas utiliser la commande cat, il faut utiliser la commande text. La commande text va permettre au hdfs qu'il se rende compte que le fichier est compressé grâce à l'extension, qu'il trouve le codec qu'il l'applique pour décompresser le fichier et qu'il nous affiche le texte réellement du fichier. Sur le hdfs, il est possible d'envoyer des fichiers, de récupérer des fichiers. Cependant il n'est jamais possible de modifier des fichiers directement ou sur le hdfs. Il y a cependant une commande happentofile qui permet de rajouter du contenu directement à la fin d'un fichier déjà existant. Enfin, je vous invite à vous référer à l'aide de la commande hdfs dfs en tapant simplement hdfs dfs -help et en regardant l'ensemble des commandes qui sont listées avec les différents arguments qui peuvent être utilisés dans chaque cas.

L'essentiel de Hadoop

Mettez en pratique les concepts spécifiques à Hadoop. Abordez l'HDFS pour le stockage, les MapReduce pour le traitement, ainsi que la base de données NoSQL d​e Hadoop : HBase.

3h43 (42 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
HBase HBase 1.2
Spécial abonnés
Date de parution :31 mars 2017

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !