0

問題の説明:- 以下は他の誰かが書いたスクリプトで、彼は会社を辞めたので、これについて誰に尋ねたらよいかわかりません。そのため、解決策を見つけるためにここに投稿しています。

このスクリプトが行うことは、特定の日付 (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
4

1 に答える 1

1

この場合、gzip行全体を次のように置き換えます。

[ "$date/EXPORT-part-$shard-$piece" == "20121017/EXPORT-part-8-3" ] && {
    echo /data/real/EXPORT_v1x0_${date}_${shard}_T_${group}*.dat.gz
}

これでうまくいくはずです。

編集:削除sleepしてループを高速化してください!

于 2012-10-25T01:33:57.400 に答える