【发布时间】: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