linux - 将HDFS Hadoop中的最后5个更新文件复制到bash中的目标文件夹

标签 linux bash hadoop awk hdfs

我正在尝试选择最近5个最新更新的文件,并使用bash脚本将它们复制到hdfs(Hadoop)中的目标文件夹中。我有此命令返回最近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接受的答案也是一个不错的选择。

最佳答案

下面的命令使用awkxargs解决了该问题。

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

关于linux - 将HDFS Hadoop中的最后5个更新文件复制到bash中的目标文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63268953/

相关文章:

linux - 如何在 Linux 上使用 while 检查 2 个条件

python - 为什么 python 中的 os.mkdir 设置权限的方式与 bash 中的 mkdir 之一不同?

hadoop - 使用 Java 运行 EmbeddedPig 时,Pig 脚本中的 ORDER BY 作业失败

linux - 将具有相同名称的文件夹分组

hadoop - 使用分区将数据从一个 Hive 表加载到另一个

hadoop - Oozie Java Action 在使用 HCat 摄取期间失败?

linux - ubuntu10.4设置环境变量

linux - 识别单个 unix 目录中文本文件中的模式

linux - CentOS 7 即使在安装时也会要求 cabextract

linux - AWK 函数的问题