MFS迁移到hbase,需要模拟较大数据量的情况,生成shell脚本记录备份如下
Mfs上的数据结构要求如下
存储目录:/opt/mfs_trip_data/trace_service/estimate/yy/mm/dd/type/orderNo后两位/
文件名称为 orderNo_1_gaode.data。订单号+轨迹类型(1送乘客,2接乘客)+gaode.data。
其中/opt/logs/order.log文件中存放的是一万条订单和订单类型数据,数据来源为订单数据库中直接导出生成,格式为:orderNo,orderType
此处orderType类型为单个数字,也可在数据库导出时直接格式化为“00”,则shell中无需做处理
调用方式为./testguiji_shiji_gaode.shell 文件名(生成规则依赖文件) 09(月份) 23(日期) 例如./testguiji_shiji_gaode.shell order.log 10 19
也可以使用nohup /opt/logs/guiji_shell/allshell.sh > allshell.log 2>&1 &此种方式后台运行
testguiji_shiji_gaode.shell脚本内容如下
#!/bin/bash
#文件要复制到的目标路径-实际轨迹目录
targetpath="/opt/mfs_trip_data/tracerecv_service/19/$2/$3"
#待复制的源文件路径
sourcepath="/opt/logs/guiji_shell/log/shiji"
#待复制的源文件
sourcefile="T43ec6n9w1178529ea78fa46c5aa04131cab0bd71f_1_gaode.data"
#开始逐行读取订单号文件,以解析路径和文件名规则
thenfilename="_1_gaode.data"
echo "start..."
cat /opt/logs/guiji_shell/log/$1 | while read line
do
filename=`echo $line|awk -F"," '{print $1}'`
pathsource=`echo $line|awk -F"," '{print $2}'`
path1="0${pathsource:0:1}"
path2=`echo $filename|sed 's/.*\(..\)$/\1/'`
if [ ! -d "$targetpath/$path1/" ];then
mkdir -p $targetpath/$path1/$path2
cp $sourcepath/$sourcefile $targetpath/$path1/$path2/$filename$thenfilename
else
if [ ! -d "$targetpath/$path1/$path2/" ];then
mkdir $targetpath/$path1/$path2
cp $sourcepath/$sourcefile $targetpath/$path1/$path2/$filename$thenfilename
else
cp $sourcepath/$sourcefile $targetpath/$path1/$path2/$filename$thenfilename
fi
fi
done
echo "done"