【问题标题】:Copy last 5 updated files in HDFS Hadoop to target folder in bash将 HDFS Hadoop 中最后 5 个更新的文件复制到 bash 中的目标文件夹
【发布时间】:2020-11-25 20:27:48
【问题描述】:

我正在尝试选择最后 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 的公认答案也是一个不错的选择。

【问题讨论】:

  • 您想从 HDFS 中的一个位置复制到 HDFS 中的另一个位置??
  • 是的,我认为这主要是关于 bash 脚本的问题。
  • 所以您想使用 awk 构建 cp 本身?
  • 我认为这就是方法。除非有其他更好的选择?
  • hdfs dfs -ls -R /user/myfolder | awk -F" " '{print "hdfs dfs -cp "$6" "$7" "$8 "/target_directory"}' | sort -k6,7 | tail -5 应该可以,但我无法测试它

标签: linux bash hadoop awk hdfs


【解决方案1】:

下面带有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

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多