Hadoop fs -get仅复制特定文件

时间:2012-05-21 13:55:08

标签: hadoop

有没有办法只复制特定文件,比如根据文件类型使用fs -get或fs -copyToLocal?注意:我希望这是递归的并遍历整个集群。

想出来但我不能回答我自己的问题。

以下是我们如何做到的。刚写了一个快速的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 个答案:

答案 0 :(得分:5)

以下是我们如何做到的。刚写了一个快速的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 :(得分:2)

您可以提供正则表达式来复制文件。这里有一个例子在hadoop中使用命令行。这不使用get,但它使用put,它应该与get相同。

这样的事情:hadoop fs -get out/*

http://prazjain.wordpress.com/2012/02/15/how-to-run-hadoop-map-reduce-program-from-command-line/

答案 2 :(得分:1)

Hadoop不支持路径中的双星全局表示法,因此没有开箱即用的方法:

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

然而,您可以编写自己的代码来执行此操作 - 查看FsShell的当前源代码,并将其与FileInputFormat的listStatus方法配对 - 可以将其配置为接受PathFilter。在此PathFilter中,如果Path是您想要的文件类型,则只能返回true。