Скопируйте последние 5 обновленных файлов из HDFS Had oop в целевую папку в bash - PullRequest
0 голосов
/ 05 августа

Я пытаюсь выбрать последние 5 последних обновленных файлов и скопировать их в целевую папку в hdfs (было oop) с помощью сценария bash. У меня есть эта команда, которая возвращает последние 5 самых последних файлов:

hdfs dfs -ls -R /user/myfolder | awk -F" " '{print $6" "$7" "$8}' | sort -k6,7 | tail -5

Вывод

/user/myfolder/example1.txt
/user/myfolder/example2.txt
/user/myfolder/example3.txt
/user/myfolder/example4.txt
/user/myfolder/example5.txt

Что было бы хорошим подходом для следующего шага по перемещению этих файлов в целевой hdfs каталог?

Изменить:

Итак, я обнаружил, что команда hdfs dfs -cp может принимать несколько аргументов, например:

latest_files=$(hdfs dfs -ls -R /user/myfolder | awk -F" " '{print $6" "$7" "$8}' | sort -k6,7 | tail -5 | cut -d" " -f3)
hdfs dfs -cp $latest_files $target_directory

Кроме того, я считаю, что принятый ответ с использованием xargs - тоже хороший выбор.

1 Ответ

3 голосов
/ 05 августа

приведенная ниже команда с awk & xargs решает проблему.

hadoop fs -ls -R /dev/hadoop/hdata/test | awk '{print $6, $7, $8}'|sort -nr| head -5| cut -d" " -f3- | xargs  -I{} hadoop fs -cp '{}' /dev/hadoop/hdata/test1

полная проверка команды:


#input files available
[devuser@DATANODEUK03 HADOOP]$ hadoop fs -ls /dev/hadoop/hdata/test
Found 8 items
-rw-r-----   3 devuser uk1-dna-haas_dev          0 2020-08-06 04:51 /dev/hadoop/hdata/test/test1.txt
-rw-r-----   3 devuser uk1-dna-haas_dev         21 2020-08-06 04:56 /dev/hadoop/hdata/test/test10.txt
-rw-r-----   3 devuser uk1-dna-haas_dev         21 2020-08-06 05:00 /dev/hadoop/hdata/test/test15.txt
-rw-r-----   3 devuser uk1-dna-haas_dev         21 2020-08-06 05:01 /dev/hadoop/hdata/test/test16.txt
-rw-r-----   3 devuser uk1-dna-haas_dev         21 2020-08-06 05:04 /dev/hadoop/hdata/test/test17.txt
-rw-r-----   3 devuser uk1-dna-haas_dev         21 2020-08-06 05:04 /dev/hadoop/hdata/test/test18.txt
-rw-r-----   3 devuser uk1-dna-haas_dev          0 2020-08-06 04:51 /dev/hadoop/hdata/test/test2.txt
-rw-r-----   3 devuser uk1-dna-haas_dev          0 2020-08-06 04:53 /dev/hadoop/hdata/test/test3.txt

#command to get latest 5 files in a folder recursively & copy into another folder
hadoop fs -ls -R /dev/hadoop/hdata/test | awk '{print $6, $7, $8}'|sort -nr| head -5| cut -d" " -f3- | xargs  -I{} hadoop fs -cp '{}' /dev/hadoop/hdata/test1

#copy validation in HDFS
[devuser@DATANODEUK03 HADOOP]$ hadoop fs -ls /dev/hadoop/hdata/test1

Found 5 items
-rw-r-----   3 devuser uk1-dna-haas_dev         21 2020-08-06 05:05 /dev/hadoop/hdata/test1/test10.txt
-rw-r-----   3 devuser uk1-dna-haas_dev         21 2020-08-06 05:05 /dev/hadoop/hdata/test1/test15.txt
-rw-r-----   3 devuser uk1-dna-haas_dev         21 2020-08-06 05:04 /dev/hadoop/hdata/test1/test16.txt
-rw-r-----   3 devuser uk1-dna-haas_dev         21 2020-08-06 05:04 /dev/hadoop/hdata/test1/test17.txt
-rw-r-----   3 devuser uk1-dna-haas_dev         21 2020-08-06 05:04 /dev/hadoop/hdata/test1/test18.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...