Pourquoi n’y a-t-il pas de commande shell ‘hadoop fs -head’?

Une méthode rapide pour inspecter des fichiers sur HDFS consiste à utiliser tail :

~$ hadoop fs -tail /path/to/file 

Cela affiche le dernier kilo-octet de données dans le fichier, ce qui est extrêmement utile. Cependant, la head commande opposée ne semble pas faire partie des collections de commandes shell. Je trouve cela très surprenant.

Mon hypothèse est que depuis que HDFS est conçu pour des lectures en streaming très rapides sur des fichiers très volumineux, il existe des problèmes d’access qui affectent la head . Cela me fait hésiter à faire des choses pour accéder à la tête. Quelqu’un a-t-il une réponse?

Je dirais que cela est davantage lié à l’efficacité – une tête peut facilement être répliquée en redirigeant la sortie d’un hadoop fs -cat via la commande linux head.

 hadoop fs -cat /path/to/file | head 

Ceci est efficace car la tête va fermer le stream sous-jacent après que le nombre de lignes souhaité a été généré

Utiliser tail de cette manière serait considérablement moins efficace, car il vous faudrait diffuser sur tout le fichier (tous les blocs HDFS) pour trouver le nombre x final de lignes.

 hadoop fs -cat /path/to/file | tail 

Lorsque vous remarquez que la commande hadoop fs -tail fonctionne sur le dernier kilo-octet, hadoop peut efficacement trouver le dernier bloc et passer à la position du dernier kilo-octet, puis diffuser le résultat. La tuyauterie par la queue ne peut pas facilement faire cela.

 hdfs -dfs /path | head 

est un bon moyen de résoudre le problème.

vous pouvez essayer la commande suivante

 hadoop fs -cat /path | head -n 

-n peut être remplacé par le nombre d’enregistrements à afficher

Dans Hadoop v2:

 hdfs dfs -cat /file/path|head 

Dans Hadoop v1 et v3:

 hadoop fs -cat /file/path|head 

À partir de la version 3.1.0, nous l’aurons:

Utilisation: hadoop fs -head URI

Affiche le premier kilo-octet du fichier à stdout.

Voir ici