3

有没有办法只复制特定文件,比如使用 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
4

3 回答 3

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`
于 2013-02-11T20:49:51.533 回答
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/

于 2012-05-21T14:25:24.547 回答
1

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

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

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

于 2012-05-21T14:44:46.007 回答