問題の説明:- 以下は他の誰かが書いたスクリプトで、彼は会社を辞めたので、これについて誰に尋ねたらよいかわかりません。そのため、解決策を見つけるためにここに投稿しています。
このスクリプトが行うことは、特定の日付 (20121017) の特定のフォルダーからデータを gzip し、 HDFSディレクトリ(/data/ds/real/EXPORT_v1x0)
に戻すことです。(hdfs://ares-nn/apps/tech/ds/new/)
date=20121017
groups=(0 '1[0-3]' '1[^0-3]' '[^01]')
for shard in 0 1 2 3 4 5 6 7 8 9 10 11; do
for piece in 0 1 2 3; do
group=${groups[$piece]}
if ls -l /data/ds/real/EXPORT_v1x0_${date}_${shard}_T_${group}*.dat.gz; then
gzip -dc /data/ds/real/EXPORT_v1x0_${date}_${shard}_T_${group}*.dat.gz | \
hadoop jar /export/home/ds/lib/HadoopUtil.jar com.host.hadoop.platform.util.WriteToHDFS -z -u \
hdfs://ares-nn/apps/tech/ds/new/$date/EXPORT-part-$shard-$piece
sleep 15
fi
done
done
そのため、HDFS への移行中に、このファイルに HDFS で問題があることがわかりました。
hdfs://ares-nn/apps/tech/ds/new/20121017/EXPORT-part-8-3
(/data/ds/real/EXPORT_v1x0)
したがって、上記のスクリプトからいくつかの順列を実行することで、このディレクトリの下にあるファイルが最終的にこれに変換されhdfs://ares-nn/apps/tech/ds/new/20121017/EXPORT-part-8-3
、問題のあるファイルを見つけることができる方法はありますか?
何かご意見は?
アップデート:-
以下のようなものでしょうか?
groups=(0 '1[0-3]' '1[^0-3]' '[^01]')
for shard in 0 1 2 3 4 5 6 7 8 9 10 11; do
for piece in 0 1 2 3; do
group=${groups[$piece]}
if ls -l /data/ds/real/EXPORT_v1x0_${date}_${shard}_T_${group}*.dat.gz; then
[ "$date/EXPORT-part-$shard-$piece" == "20121017/EXPORT-part-8-3" ] && {
echo /data/real/EXPORT_v1x0_${date}_${shard}_T_${group}*.dat.gz
}
fi
done
done
/data/real/EXPORT フォルダーにいくつかのサンプル ファイル形式があります。
/data/real/EXPORT_v1x0_20121017_4_T_115600_115800.dat.gz
/data/real/EXPORT_v1x0_20121017_4_T_235600_235800.dat.gz
/data/real/EXPORT_v1x0_20121017_4_T_115800_120000.dat.gz
/data/real/EXPORT_v1x0_20121017_4_T_235800_000000.dat.gz
そして、変更を加えた後に得たいくつかのサンプル出力-
/data/real/EXPORT_v1x0_20121017_0_T_0*.dat.gz: No such file or directory
/data/real/EXPORT_v1x0_20121017_0_T_1[0-3]*.dat.gz: No such file or directory
/data/real/EXPORT_v1x0_20121017_0_T_1[^0-3]*.dat.gz: No such file or directory
/data/real/EXPORT_v1x0_20121017_0_T_[^01]*.dat.gz: No such file or directory