问题陈述:- 下面是别人写的脚本,他离开了公司,所以我不知道我应该问谁。所以这就是我在这里发布以找到解决方案的原因。
该脚本的作用是 - 它从特定文件夹(/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