1

私のクラスタの "/ user"ディレクトリにあるすべてのHDFSファイルから最初の行を取得しようとしています。ディレクトリ内のすべてのHDFSファイルから最初の行を取得する方法はありますか?

現在、所有者、完全なパス(場所)、所有者の企業ID、ファイルの作成日、ファイルの読み書き権限など、これらのファイルに関する情報を含むHiveテーブルがあります。新しい列を追加したいファイルの完全な最初の行を含むこのHiveテーブルに追加します。

だからこそ私はディレクトリ(私の場合は "/ user"ディレクトリ)内のすべてのHDFSファイルの最初の行を抽出する方法を探しています。私はこれを達成することはできますか?

hadoop fs -cat /user/* | head 

と遊ぶ:

答えて

0

(デフォルトでは、表示画面である、)を入力として、それに与えられた任意のテキストの最初の数行を読み込み、標準出力に書き込まれその後、catを使用してdすなわちディレクトリ

から始まるすべての行を反転させるために

hdfs dfs -ls -R /user/ | grep -v "^d" | awk '{print $8}' | while read file; do 
    echo "${file}" 
    hdfs dfs -cat ${file} | head -1 
    echo 
done 

grepvフラグとともに使用され@gsamarasによって他の回答で指定されている最初の行を取ります

awkは、ファイル名である各行の8番目のフィールドを印刷するために使用されます。

+1

これは私のために働いた!ありがとう@恋人 – PreethiS

2

はこのような何かを試してみてください。

catは、/のように動作します。

headは、あなたはすべてのファイルを再帰的に検索を行うことができます

+0

これは、ディレクトリ内の直接のファイルから情報を取得するのに便利なコマンドです。問題は、/ user自身がファイルを含んでおらず、それにはいくつかの他のディレクトリがあり、これらのディレクトリには他のディレクトリ/ファイルが含まれているということです。基本的には、/ user内のディレクトリとファイルのWebのようなものです。この "web"内のすべてのファイルの情報を取得できるかどうかは疑問でした。 – PreethiS

関連する問題