shell - Curl,Hadoop 上的 Kerberos 身份验证文件副本

标签 shell hadoop curl webhdfs

我们需要在 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"

不过这样就实现了文件的移动。我们需要建立一个文件副本,以便将文件保留在原始暂存位置。

想知道有没有相应的curl操作? op=RENAME&destination 而不是 Rename,还有什么可以工作?

最佳答案

WebHDFS 本​​身不在其界面中提供复制操作。 WebHDFS 接口(interface)提供较低级别的文件系统原语。复制操作是使用这些原始操作来完成其工作的更高级别的应用程序。

针对 webhdfs: URL 的 hdfs dfs -cp 的实现基本上结合了 op=OPENop=CREATE调用完成复制。您可能会在脚本中重新实现该逻辑的一个子集。如果你想追求那个方向,CopyCommands类是 Apache Hadoop 代码库中了解其工作原理的良好起点。

这是它如何工作的起点。/hello1 中有一个现有文件,我们要将其复制到/hello2。此脚本调用 curl 打开/hello1 并将输出通过管道传输到另一个 curl 命令,该命令使用标准输入作为输入源创建/hello2。

> 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

But my requirement is to connect from an external unix box, automated kerberos login into hdfs and then move the files within hdfs, hence the curl.

另一种选择是在您的外部主机上安装仅客户端 Hadoop。您将安装 Hadoop 软件和来自 Hadoop 集群的相同配置文件,然后您可以发出 hdfs dfs -cp 命令而不是运行 curl 命令HDFS。

关于shell - Curl,Hadoop 上的 Kerberos 身份验证文件副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44915786/

相关文章:

linux - 查找文件名中没有空格的文件

sql - 汇总 hive 中的每周数据

php - 如何同时执行多个 Guzzle 请求?

windows - 如何在 Windows 上将 Chrome 的 "Copy as cURL"用于多部分/表单数据发布请求?

PHP CURL 创建和使用唯一命名的 cookie 文件

linux - 如何将 shell 变量作为命令行参数传递给 shell 脚本

bash - 将光标移回 shell 脚本中的第一列

unix - hadoop与mrjob管道在壳上

regex - php脚本中的Bash命令,根据特定列的值获取文件的某些行

hadoop - 是否可以从多个客户端并行附加到 HDFS 文件?