Получить два первых файла из HDFS - PullRequest
0 голосов
/ 14 февраля 2019

Есть ли способ получить два первых файла из HDFS с помощью командной строки?Моя версия hadoop 2.7.3

У меня есть папка в HDFS с несколькими файлами, которую выкладывает туда другое приложение: /user/Lab01/inpu/ingestionFile1.json / user / Lab01 / inpu / ingestionFile2.json /user/Lab01/inpu/ingestionFile3.json /user/Lab01/inpu/ingestionFile4.json

Мне нужно работать только с первыми двумя файлами в зависимости от времени, поэтому, если список содержимого используется с помощью:

 $ hdfs dfs -ls -R /user/Lab01/input

-rw-------   3 huser dev       668 2019-02-13 11:34 /user/Lab01/inpu/ingestionFile1.json
-rw-------   3 huser dev        668 2019-02-13 11:36 /user/Lab01/inpu/ingestionFile2.json
-rw-------   3 huser dev        668 2019-02-13 11:38 /user/Lab01/inpu/ingestionFile3.json
-rw-------   3 huser dev        668 2019-02-13 11:41 /user/Lab01/inpu/ingestionFile4.json

Чтобы получить два первых файла из каталога, я просто отправляю команду с помощью головки -2, чтобы получить:

$ hdfs dfs -ls -R /user/Lab01/input | head -2

-rw-------   3 huser dev       668 2019-02-13 11:34 /user/Lab01/inpu/ingestionFile1.json
-rw-------   3 huser dev        668 2019-02-13 11:36 /user/Lab01/inpu/ingestionFile2.json

Обычная команда для получения файлов из hdfs использует -get:

  hdfs dfs -get /user/Lab01/input/fileName

Так вот почему сейчас я пытаюсь объединить эти две команды:

$ hdfs dfs -get /user/Lab01/input | hdfs dfs -ls -R /user/Lab01/input | head -2 

Но я не получаю желаемого результата, я просто получаю сообщениевыдает вывод из последней команды (hdfs dfs -ls -R / user / Lab01 / input | head -2):

-rw-------   3 huser dev       668 2019-02-13 11:34 /user/Lab01/inpu/ingestionFile1.json
-rw-------   3 huser dev        668 2019-02-13 11:36 /user/Lab01/inpu/ingestionFile2.json

1 Ответ

0 голосов
/ 15 февраля 2019

Вы не можете передать -get на -ls

. Вам нужно сначала -ls | head -2, затем awk и вырезать имена файлов, которые перечислены ва затем по отдельности -get эти двое.

Примерно так должны получать только имена

hdfs dfs -ls -R /user/Lab01/input | head -2 | awk '{print $8}'

Также - Как вывести список только имен файлов в HDFS

Тогда добавьте просто "| xargs hdfs dfs -get "для загрузки файлов

...