20

私は Hadoop を使用しており、Hadoop ファイルシステム内の約 100 個のファイルのうち、特定の文字列が含まれているファイルを見つける必要があります。

検索したいファイルは次のように表示されます。

bash-3.00$ hadoop fs -ls /apps/mdhi-technology/b_dps/real-time

..次のようないくつかのエントリを返します。

-rw-r--r--   3 b_dps mdhi-technology 1073741824 2012-07-18 22:50 /apps/mdhi-technology/b_dps/HADOOP_consolidated_RT_v1x0_20120716_aa
-rw-r--r--   3 b_dps mdhi-technology 1073741824 2012-07-18 22:50 /apps/mdhi-technology/b_dps/HADOOP_consolidated_RT_v1x0_20120716_ab

これらのどれに文字列が含まれているかを見つけるにはどうすればよいbcd4bc3e1380a56108f486a4fffbc8dcですか? わかったら、手動で編集できます。

4

5 に答える 5

36

これはHadoopの「ファイルシステム」であり、POSIXのものではないので、これを試してください:

hadoop fs -ls /apps/hdmi-technology/b_dps/real-time | awk '{print $8}' | \
while read f
do
  hadoop fs -cat $f | grep -q bcd4bc3e1380a56108f486a4fffbc8dc && echo $f
done

これは機能するはずですが、シリアルであるため遅くなる可能性があります。クラスターが熱に耐えられる場合は、並列化できます。

hadoop fs -ls /apps/hdmi-technology/b_dps/real-time | awk '{print $8}' | \
  xargs -n 1 -I ^ -P 10 bash -c \
  "hadoop fs -cat ^ | grep -q bcd4bc3e1380a56108f486a4fffbc8dc && echo ^"

-P 10のオプションに注意してくださいxargs。これは、ダウンロードして並行して検索するファイルの数です。設定に関係なく、ディスク I/O またはネットワーク帯域幅が飽和するまで、低い値から始めて数値を増やします。

編集:あなたがSunOS(わずかに脳死している)を使用していることを考えると、これを試してください:

hadoop fs -ls /apps/hdmi-technology/b_dps/real-time | awk '{print $8}' | while read f; do hadoop fs -cat $f | grep bcd4bc3e1380a56108f486a4fffbc8dc >/dev/null && echo $f; done
于 2012-07-28T02:44:02.127 に答える
0
hadoop fs -find /apps/mdhi-technology/b_dps/real-time  -name "*bcd4bc3e1380a56108f486a4fffbc8dc*"

hadoop fs -find /apps/mdhi-technology/b_dps/real-time  -name "bcd4bc3e1380a56108f486a4fffbc8dc"
于 2019-07-26T21:18:00.027 に答える