我们需要在hdfs文件夹之间的hdfs位置建立一个文件副本。我们目前在shell脚本循环中使用了curl命令,如下所示。
/usr/bin/curl -v --negotiate -u : -X PUT "<hnode>:<port>/webhdfs/v1/busy/rg/stg/"$1"/"$table"/"$table"_"$3".dsv?op=RENAME&destination=/busy/rg/data/"$1"/"$table"/"$table"_$date1.dsv"
然而这实现了文件移动。我们需要建立一个文件副本,这样文件就可以保存在原来的暂存位置。
我想知道是否有相应的旋度运算? op=RENAME&destination
而不是 Rename
,还有什么办法?
2条答案
按热度按时间kpbwa7wx1#
webhdfs本身并不在其接口中提供复制操作。webhdfs接口提供较低级别的文件系统原语。复制操作是一种更高级别的应用程序,它使用这些基本操作来完成其工作。
实施
hdfs dfs -cp
反对webhdfs:
url本质上结合了op=open和op=create调用来完成拷贝。您可以在脚本中重新实现该逻辑的一个子集。如果你想追求这个方向CopyCommands
类是apache hadoop代码库中了解其工作原理的一个良好起点。这是一个如何工作的起点。在/hello1有一个现有文件,我们要将其复制到/hello2。此脚本调用
curl
打开/hello1并将输出传输到另一个curl
命令创建/hello2,使用stdin作为输入源。但我的要求是从外部unix盒连接,自动kerberos登录到hdfs,然后在hdfs中移动文件,因此是curl。
另一个选择是在外部主机上安装一个客户端专用的hadoop。您将从hadoop集群安装hadoop软件和相同的配置文件,然后您可以发布
hdfs dfs -cp
命令而不是运行curl
针对hdfs的命令。qgelzfjb2#
我不知道您使用什么发行版,如果您使用cloudera,请尝试使用restapi使用bdr(备份、数据恢复模块)。
我用它来复制hadoop集群内和整个hadoop集群中的文件/文件夹,它也适用于加密区域(tde)