2017-07-05 46 views
1

我們需要在HDFS文件夾之間的HDFS位置建立filecopy。我們目前已經在shell腳本循環中使用了curl命令,如下所示。curl,Kerberos經過身份驗證的hadoop文件副本

/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,還有什麼可以工作?

+0

是有一些原因,你不能用'HDFS DFS -cp'? –

+0

感謝您的回覆。是的,當你在hdfs框中時,這是有效的。但我的要求是從一個外部unix盒子,自動kerberos登錄連接到hdfs,然後移動文件在hdfs,因此捲曲。 –

+0

只是一個提示,elinks(以我的經驗)將使用你的kerberos票。 –

回答

0

單獨的WebHDFS在其界面中不提供複製操作。 WebHDFS接口提供較低級別的文件系統原語。複製操作是使用這些基本操作來完成其工作的更高級應用程序。

hdfs dfs -cp針對webhdfs: URL的實現實質上是將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 

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命令,而不是針對HDFS運行curl命令。

+0

是的,事情就是這樣。但是得到「URL未指定」的錯誤:請格式化。請在下一個註釋代碼 –

+0

/usr/bin/curl -L --negotiate -u:-X GET「hdnode:hdport /webhdfs/v1/bus/rg/file1.dsv?op=OPEN「-o /etrade/home/suser/file11.dsv /usr/bin/curl -i -s --negotiate -u:-X PUT」 hdnode:hdport/webhdfs/v1/bus/rg/data/file11.dsv?op = CREATE「| grep位置: \t/usr/bin/curl -i -s --negotiate -u:-X PUT -T /etrade/home/suser/file11.dsv $位置 –

+0

@SwathiR,我編輯了我的答案以顯示如何將'OPEN'調用傳遞給'CREATE'調用的起點。這工作正常。我的例子是使用簡單的身份驗證(沒有Kerberos),但使它在Kerberos安全集羣中工作應該涉及到只添加SPNEGO選項到'curl'調用,並且我看到你已經熟悉這些選項。我希望這有幫助。 –

0

我不知道你使用的是什麼發行版,如果你使用Cloudera,請嘗試使用REST API使用BDR(備份,數據恢復模塊)。

我用它來Hadoop集羣內和跨Hadoop集羣中的文件/文件夾複製,它的工作原理對加密區(TDE)以及