我在hdfs的文件夹中有许多文件,它们的名称在hdfs中的格式为filename.yyyy-mm-dd-hh.machinename.gz。我需要将它们传输到s3,但我想将它们放在我指定的bucket下的yyyy/mm/dd/hh/filename.yyyy-mm-dd-hh.machinename.gz(这将是对象名,因为s3具有平面结构)。distcp命令可以将文件从hdfs传输到s3,但是是否有一个选项可以执行上述操作?如果没有,如何扩展distcp来执行此操作?
dldeef671#
注意:这不是一个解决方案,只是一个提示。我不知道确切的答案,也没有一个s3示例来实际测试它。但这里有一种预处理文件名并在特定目录结构中复制文件的awk方法。以下命令是根据本地linux文件系统编写的:初始目录内容:
user@machine:~/path/to/input$ find ./filename.yyyy-mm-dd-hh.machinename.gz ./filename.2016-12-10-08.machinename.gz ./filename.2015-12-10-08.machinename.gz ./filename.2015-10-10-08.machinename.gz ./filename.2015-10-11-08.machinename.gz
用于在特定目录结构中复制文件的命令:
user@machine:~/path/to/input$ ls | awk -F"." '{print $1" "$2" "$3" "$4}' | awk -F"-" '{print $1" "$2" "$3" "$4" "$5" "$6" "$7}' | awk -F" " '{PATH=$2"/"$3"/"$4"/"$5; FNAME=$1"."$2"-"$3"-"$4"-"$5"."$6"."$7; system("mkdir -p "PATH); system("cp "FNAME" "PATH); }'
执行命令后的最终目录内容:
./filename.yyyy-mm-dd-hh.machinename.gz ./yyyy ./yyyy/mm ./yyyy/mm/dd ./yyyy/mm/dd/hh ./yyyy/mm/dd/hh/filename.yyyy-mm-dd-hh.machinename.gz ./filename.2016-12-10-08.machinename.gz ./2016 ./2016/12 ./2016/12/10 ./2016/12/10/08 ./2016/12/10/08/filename.2016-12-10-08.machinename.gz ./filename.2015-12-10-08.machinename.gz ./2015 ./2015/12 ./2015/12/10 ./2015/12/10/08 ./2015/12/10/08/filename.2015-12-10-08.machinename.gz ./filename.2015-10-11-08.machinename.gz ./2015/10 ./2015/10/11 ./2015/10/11/08 ./2015/10/11/08/filename.2015-10-11-08.machinename.gz ./filename.2015-10-10-08.machinename.gz ./2015/10/10 ./2015/10/10/08 ./2015/10/10/08/filename.2015-10-10-08.machinename.gz
1条答案
按热度按时间dldeef671#
注意:这不是一个解决方案,只是一个提示。
我不知道确切的答案,也没有一个s3示例来实际测试它。但这里有一种预处理文件名并在特定目录结构中复制文件的awk方法。以下命令是根据本地linux文件系统编写的:
初始目录内容:
用于在特定目录结构中复制文件的命令:
执行命令后的最终目录内容: