web-dev-qa-db-fra.com

Pourquoi n'y a-t-il pas de commande Shell «hadoop fs -head»?

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

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

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

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

56
bbengfort

Je dirais que c'est plus à voir avec l'efficacité - une tête peut facilement être répliquée en canalisant la sortie d'un hadoop fs -cat via la commande linux head.

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

Ceci est efficace car head fermera le flux sous-jacent après que le nombre souhaité de lignes ait été sorti

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

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

La commande hadoop fs -tail lorsque vous notez que cela fonctionne sur le dernier kilo-octet - hadoop peut trouver efficacement le dernier bloc et passer à la position du dernier kilo-octet, puis diffuser la sortie. La tuyauterie via la queue ne peut pas facilement faire cela.

130
Chris White

À partir de la version 3.1.0, nous l'avons maintenant:

Utilisation: hadoop fs -head URI

Affiche le premier kilo-octet du fichier à stdout.

Voir ici .

4
yishaiz

Dans Hadoop v2:

hdfs dfs -cat /file/path|head

Dans Hadoop v1 et v3:

hadoop fs -cat /file/path|head
2
Ani Menon
hdfs -dfs /path | head

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

2
xu2mao

vous pouvez essayer la commande suivante

hadoop fs -cat /path | head -n 

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

2
Amey