簡體   English   中英

從遠程Linux服務器將文件傳輸到Hadoop HDFS

[英]File Transfer to Hadoop HDFS from remote linux server

我需要將文件從遠程Linux服務器傳輸到直接HDFS。 我將keytab放置在遠程服務器上,激活了kinit命令后,但是我無法瀏覽HDFS文件夾。 我從邊緣節點知道我可以直接將文件復制到HDFS,但是我需要跳過邊緣節點並將文件直接傳輸到HDFS。

我們怎樣才能做到這一點。

讓我們先假設幾件事。 您有一台安裝了外部硬盤驅動器的計算機(名為DISK),另一台計算機具有通過ssh訪問主服務器的計算機集群(我們在命令行中通過master表示主計算機的user @ hostname部分)。 您在帶有驅動器的計算機上運行腳本。 驅動器上的數據由多個目錄組成,每個目錄中都有多個文件(例如100)。 數字無關緊要,只是為了證明循環是合理的。 數據的路徑將存儲在$ {DIR}變量中(在Linux上為/ media / DISK,在Mac OS X上為/ Volumes / DISK)。 腳本如下所示:

DIR=/Volumes/DISK;

for d in $(ls ${DIR}/);
do
  for f in $(ls ${DIR}/${d}/);
  do
    cat ${DIR}/${d}/${f} | ssh master "hadoop fs -put - /path/on/hdfs/${d}/${f}";
  done;
done;

請注意,我們遍歷每個文件並將其復制到特定文件中,因為用於放置的HDFS API要求“當源為stdin時,目標必須為文件”。

不幸的是,這需要永遠。 第二天早上回來時,它僅處理了數據的五分之一(100 GB),並且仍在運行...基本上每個目錄需要20分鍾! 我最終提出了將數據臨時復制到其中一台計算機上,然后將其本地復制到HDFS的解決方案。 出於空間原因,我一次只做了一個文件夾,然后立即刪除了該臨時文件夾。 腳本如下所示:

DIR=/Volumes/DISK;
PTH=/path/on/one/machine/of/the/cluster;
for d in $(ls ${DIR}/);
do
  scp -r -q ${DIR}/${d} master:${PTH}/
  ssh master "hadoop fs -copyFromLocal ${PTH}/${d} /path/on/hdfs/";
  ssh master "rm -rf ${PTH}/${d}";
done;

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM