curl、kerberos身份验证文件副本

5sxhfpxr  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(443)

我们需要在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 ,还有什么办法?

kpbwa7wx

kpbwa7wx1#

webhdfs本身并不在其接口中提供复制操作。webhdfs接口提供较低级别的文件系统原语。复制操作是一种更高级别的应用程序,它使用这些基本操作来完成其工作。
实施 hdfs dfs -cp 反对 webhdfs: url本质上结合了op=open和op=create调用来完成拷贝。您可以在脚本中重新实现该逻辑的一个子集。如果你想追求这个方向 CopyCommands 类是apache hadoop代码库中了解其工作原理的一个良好起点。
这是一个如何工作的起点。在/hello1有一个现有文件,我们要将其复制到/hello2。此脚本调用 curl 打开/hello1并将输出传输到另一个 curl 命令创建/hello2,使用stdin作为输入源。

> hdfs dfs -ls /hello*
-rw-r--r--   3 cnauroth supergroup          6 2017-07-06 09:15 /hello1

> curl -sS -L 'http://localhost:9870/webhdfs/v1/hello1?op=OPEN' |
>     curl -sS -L -X PUT -d @- 'http://localhost:9870/webhdfs/v1/hello2?op=CREATE&user.name=cnauroth'

> hdfs dfs -ls /hello*
-rw-r--r--   3 cnauroth supergroup          6 2017-07-06 09:15 /hello1
-rw-r--r--   3 cnauroth supergroup          5 2017-07-06 09:20 /hello2

但我的要求是从外部unix盒连接,自动kerberos登录到hdfs,然后在hdfs中移动文件,因此是curl。
另一个选择是在外部主机上安装一个客户端专用的hadoop。您将从hadoop集群安装hadoop软件和相同的配置文件,然后您可以发布 hdfs dfs -cp 命令而不是运行 curl 针对hdfs的命令。

qgelzfjb

qgelzfjb2#

我不知道您使用什么发行版,如果您使用cloudera,请尝试使用restapi使用bdr(备份、数据恢复模块)。
我用它来复制hadoop集群内和整个hadoop集群中的文件/文件夹,它也适用于加密区域(tde)

相关问题