0

问题陈述:- 下面是别人写的脚本,他离开了公司,所以我不知道我应该问谁。所以这就是我在这里发布以找到解决方案的原因。

该脚本的作用是 - 它从特定文件夹(/data/ds/real/EXPORT_v1x0)中压缩特定日期(20121017)的数据并将其移回 HDFS(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 回答