Подтвердить что ты не робот

Почему нет команды 'hadoop fs -head' shell?

Быстрый метод проверки файлов на HDFS заключается в использовании tail:

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

Это отображает последний килобайт данных в файле, что очень полезно. Однако противоположная команда head не является частью коллекций команд оболочки. Я нахожу это очень удивительным.

Моя гипотеза заключается в том, что, поскольку HDFS построен для очень быстрых потоковых чтений в очень больших файлах, существует некоторая проблема с доступом, которая влияет на head. Это заставляет меня нерешительно делать что-то, чтобы получить доступ к голове. Кто-нибудь имеет ответ?

4b9b3361

Ответ 1

Я бы сказал, что это больше связано с эффективностью - голова может быть легко реплицирована путем соединения вывода хаоп fs -cat с помощью команды linux head.

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

Это эффективно, так как голова будет закрывать базовый поток после того, как будет выведено желаемое количество строк

Использование хвоста таким образом было бы значительно менее эффективным - так как вам нужно было бы передать весь файл (все блоки HDFS), чтобы найти конечное число x строк.

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

Команда hadoop fs -tail, как вы отмечаете, работает на последнем килобайте - hadoop может эффективно найти последний блок и перейти к позиции последнего килобайта, а затем передать результат. Трубопровод через хвост не может легко сделать это.

Ответ 2

hdfs -dfs /path | head

- хороший способ решить проблему.

Ответ 3

вы можете попробовать следующую команду

hadoop fs -cat /path | head -n 

где -n можно заменить числом записей для просмотра

Ответ 4

В Hadoop v2:

hdfs dfs -cat /file/path|head

В Hadoop v1 и v3:

hadoop fs -cat /file/path|head