我想將文件從HDFS傳輸到不在hadoop羣集但在網絡中的其他服務器的本地文件系統。從HDFS傳輸文件
我可以做:
hadoop fs -copyToLocal <src> <dest>
and then scp/ftp <toMyFileServer>.
由於數據是巨大的,由於Hadoop的網關機器的本地文件系統中有限的空間,我想避免這種情況,並直接發送數據到我的文件服務器。
請幫助一些關於如何處理這個問題的指針。
我想將文件從HDFS傳輸到不在hadoop羣集但在網絡中的其他服務器的本地文件系統。從HDFS傳輸文件
我可以做:
hadoop fs -copyToLocal <src> <dest>
and then scp/ftp <toMyFileServer>.
由於數據是巨大的,由於Hadoop的網關機器的本地文件系統中有限的空間,我想避免這種情況,並直接發送數據到我的文件服務器。
請幫助一些關於如何處理這個問題的指針。
所以你可能有一堆零件從您的Hadoop程序的輸出文件。
part-r-00000
part-r-00001
part-r-00002
part-r-00003
part-r-00004
那麼讓我們一次做一個部分?
for i in `seq 0 4`;
do
hadoop fs -copyToLocal output/part-r-0000$i ./
scp ./part-r-0000$i [email protected]:/home/you/
rm ./part-r-0000$i
done
您可能需要查找密碼修改爲SCP
我認爲最簡單的解決方案是網絡安裝或SSHFS在本地模擬本地文件服務器目錄。
您還可以安裝FTP作爲本地目錄: http://www.linuxnix.com/2011/03/mount-ftp-server-linux.html
感謝David提供的解決方案!但是,不知何故,跨環境安裝在這裏是不可用的。我將與解決方法一起解決djc391現在提出的問題。 – dipeshtech
您提到了巨大的數據,所以我尋找了完全避免在本地存儲數據的方法。您的意思是跨環境安裝? –
這是做最簡單的方法:它適用於二進制文件太
ssh <YOUR_HADOOP_GATEWAY> "hdfs dfs -cat <src_in_HDFS> " > <local_dst>
。
是否可以遞歸執行?複製文件和目錄? – coloboxp
你可以使用webHDFS REST API來做到這一點。從要下載文件的機器上執行curl
。
curl -i -L "http://namenode:50075/webhdfs/v1/path_of_the_file?op=OPEN" -o ~/destination
另一種方法可以是使用DataNode API
通過wget
做到這一點:
wget http://$datanode:50075/streamFile/path_of_the_file
但是,最便捷的方式,恕我直言,是使用的NameNode的Web用戶界面。由於此機器是網絡的一部分,因此您可以將您的網絡瀏覽器指向NameNode_Machine:50070
。之後瀏覽HDFS,打開您要下載的文件並點擊Download this file
。
我也試圖這樣做(我使用的是Kerberos安全性)。這幫我小小的更新後:https://hadoop.apache.org/docs/r1.0.4/webhdfs.html#OPEN
直接運行curl -L -i --negotiate "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=OPEN"
沒有爲我工作,我會解釋爲什麼。
此命令會做兩個步驟:
找到您想要下載,並創建一個臨時鏈接文件 - 從這個鏈接返回307 Temporary Redirect
,他將下載的數據 - 返回HTTP 200 OK
。
切換臺-L
是說他拿一個文件直接繼續鋸。如果您添加捲曲命令-v
,它會記錄到輸出;如果是這樣,你會看到在命令行中描述了兩個步驟,正如我所說的。但 - 因爲由於舊版本捲曲(我不能udpate)它不會工作。
解本(殼牌):
LOCATION=`curl -i --negotiate -u : "${FILE_PATH_FOR_DOWNLOAD}?op=OPEN" | /usr/bin/perl -n -e '/^Location: (.*)$/ && print "$1\n"'`
這將讓臨時鏈接,並將其保存到$LOCATION
變量。
RESULT=`curl -v -L --negotiate -u : "${LOCATION}" -o ${LOCAL_FILE_PATH_FOR_DOWNLOAD}`
如果您添加-o <file-path>
,這會將其保存到您的本地文件。
我希望它有幫助。
J.
您的文件服務器可以直接連接到您的namenode嗎? –
編號現在,它不連接。但我想知道你的建議。 – dipeshtech
會做一個簡單的SSH隧道到您的namenode並從您的文件服務器連接。 –