Curl,Kerberos在hadoop上验证了文件副本

时间:2017-07-05 01:23:32

标签: 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"

然而,这实现了文件移动。我们需要建立一个文件复制,以便在原始的登台位置维护文件。

我想知道是否有相应的卷曲操作? op=RENAME&destination代替Rename,还有什么可行?

2 个答案:

答案 0 :(得分:0)

单独的WebHDFS在其界面中不提供复制操作。 WebHDFS接口提供较低级别的文件系统原语。复制操作是一个更高级别的应用程序,它使用这些基本操作来完成其工作。

针对hdfs dfs -cp网址webhdfs:的实施基本上结合了op=OPENop=CREATE次来完成复制。您可以在脚本中重新实现该逻辑的子集。如果你想追求这个方向,CopyCommands类是Apache Hadoop代码库中的一个很好的起点,可以看到它是如何工作的。

以下是这可行的起点。 / hello1中存在一个我们要复制到/ hello2的现有文件。此脚本调用curl打开/ hello1并将输出传递给另一个curl命令,该命令使用stdin作为输入源创建/ 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
  

但我的要求是从外部unix盒连接,自动kerberos登录到hdfs,然后在hdfs中移动文件,因此卷曲。

另一个选项可能是外部主机上仅限客户端的Hadoop安装。您可以从Hadoop集群安装Hadoop软件和相同的配置文件,然后您可以发出hdfs dfs -cp命令,而不是针对HDFS运行curl命令。

答案 1 :(得分:0)

我不知道你使用什么发行版,如果你使用Cloudera,尝试使用REST API使用BDR(备份,数据恢复模块)。

我用它来复制hadoop集群中的文件/文件夹和hadoop集群,它也适用于加密区域(TDE)