3

fs-getまたはfs-copyToLocalを使用して、ファイルタイプに基づいて、特定のファイルのみをコピーする方法はありますか?注:これを再帰的にして、クラスター全体をトラバースしたいと思います。

それを理解しましたが、私は自分の質問に答えることができません。

これが私たちのやり方です。簡単なシェルスクリプトを書いただけです。

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

これが私たちのやり方です。簡単なシェルスクリプトを書いただけです。

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は、パスでの二重星グロブ表記をサポートしていないため、これを行うためのすぐに使用できる方法はありません。

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

ただし、独自のコードを記述して、FsShellの現在のソースを調べ、PathFilterを受け入れるように構成できるFileInputFormatのlistStatusメソッドと組み合わせることができます。このPathFilterでは、Pathが目的のファイルタイプである場合にのみtrueを返すことができます。

于 2012-05-21T14:44:46.007 に答える