2017-09-17 42 views
1

我需要通過shell腳本將文件從本地文件系統複製到HDFS。假設我有兩個文件在我的本地系統按字母順序將本地文件複製到HDFS - 排序

fewInfo.tsv.gz 
fewInfo.txt 

在上述情況下,fewInfo.tsv.gz應該首先被複制(S自帶X之前)到HDFS,然後fewInfo.txt應該被複制。這可能嗎?

有人知道當多個文件被複制到HDFS時,「put」命令如何工作的內部結構?

我使用的Hadoop版本是Hadoop 2.5.0-cdh5.3.1。

回答

0

您可以遍歷目錄以查找所有文件,對文件進行排序,然後執行hdfs副本。優點是可以指定排序約束(例如,按文件名,日期,順序等)。有很多選項可以執行此操作。其中之一是使用find命令:

find /some/directory -type f -maxdepth 1 -type f | sort | while IFS= read -r filename; do hdfs dfs -copyFromLocal "$filename" hdfs://target/dir/; done 
  • -maxdepth 1參數防止遞歸下降到任何子目錄找到。 (如果你想這樣的嵌套目錄得到處理,則可以忽略這一點。)
  • -type -f指定只純文本文件將被處理。
  • sort定義了找到的文件進行排序。在這裏,您可以通過反向順序進行擴展,修改日期等。
  • while IFS= read -r filename通過找到的文件進行循環。 IFS在環是保持領先和尾隨空白。該-r選項可防止治療反斜槓作爲特殊字符閱讀。
  • hdfs dfs -copyFromLocal "$filename" hdfs://target/dir/從本地目錄到HDFS目錄需要排序filenames並複製它們。或者,您也可以使用hadoop -fs put "$filename" hdfs://target/dir/