有没有办法只复制特定文件,比如根据文件类型使用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
答案 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。