问题陈述: - 下面是别人写的剧本,他离开了公司,所以我不知道应该向谁询问这个问题。所以这就是我在这里找到解决方案的原因。
这个脚本的作用是 - 它从特定文件夹(/data/ds/real/EXPORT_v1x0)
gzip特定日期(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
答案 0 :(得分:1)
在这种情况下,将整个gzip
行替换为:
[ "$date/EXPORT-part-$shard-$piece" == "20121017/EXPORT-part-8-3" ] && {
echo /data/real/EXPORT_v1x0_${date}_${shard}_T_${group}*.dat.gz
}
这应该可以解决问题。编辑:删除sleep
以加快循环!