2012-05-21 89 views
3

有沒有辦法只複製特定的文件,說基於文件類型使用fs -get或fs -copyToLocal?注意:我希望這是遞歸的並遍歷整個集羣。Hadoop fs -get只複製特定文件

想通了,但我不能回答我自己的問題。

以下是我們如何做到的。剛剛寫了一個快速的shell腳本。

mkdir /tmp/txt 

    for F in `hadoop fs -fs hdfs://namenode.mycluster -lsr/| grep '/*.txt$' | awk '{print $NF}'; 
    do 
     hadoop fs -fs hdfs://namenode.mycluster -copyToLocal $F /tmp/las/ 
    done 

回答

3

下面是我們如何做到的。剛剛寫了一個快速的shell腳本。

LOCAL_DIR=/tmp/txt 
mkdir $LOCAL_DIR 

for F in `hadoop fs -fs hdfs://namenode.mycluster -lsr/| grep '/*.txt$' | awk '{print $NF}'; 
do 
    hadoop fs -fs hdfs://namenode.mycluster -copyToLocal $F $LOCAL_DIR 
done` 
1

的Hadoop不支持路徑雙星水珠符號,所以沒有超出這樣的盒子方式:

hadoop fs -get /**/*.txt /tmp 

然而,您可以編寫自己的代碼來執行此操作 - 查看FsShell的當前源代碼,並將其與FileInputFormat的listStatus方法(可配置爲接受PathFilter)進行配對。在這個PathFilter中,如果Path是你想要的文件類型,你只能返回true。