#!/bin/bash
#######数据类型(cdr,ims,pc,.ngn_sip)######
dir=***
#############
#原始文件地址
oripath=/bigdata/data8/zhxl/${dir}/dst/
#压缩文件地址
standardpath=/bigdata/data8/zhxl/${dir}/standard/
#temp临时文件存放地址
temppath=/bigdata/data8/zhxl/${dir}/temp/
#日志文件存放地址
logpath=/bigdata/data8/zhxl/${dir}/logs/`date "+%Y-%m-%d"`.log
#PID地址
pidpath=/home/hadoop/nocloadhbase/${dir}.pid
echo "###########日期:"`date "+%Y-%m-%d"`" NOC源数据加载到HBase脚本开始运行##########" >> ${logpath} #判断是否有进程正在执行
check_running() {
pid=`cat ${pidpath}`
[ -d /proc/$pid ] && return
return
}
if [ -f ${pidpath} ]; then
check_running
exist=$?
while [[ $exist = ]]
do
echo `date "+%Y-%m-%d %H:%M:%S"`": sleep 检测到有相同任务的进程在执行,该次任务睡眠等待30分钟!" >> ${logpath}
sleep 30m
check_running
exist=$?
done
fi
echo $$ > ${pidpath} #遍历dst目录,获取所有的符合格式的件,开启入库处理
echo `date "+%Y-%m-%d %H:%M:%S"`": start 遍历dst目录。获取所有的符合格式的文件,开启入库处理!" >> ${logpath}
cd $oripath
for filename in `ls | grep -E "xw.*_[0-9]*\.txt"`
do
echo "#====> "${filename} >> ${logpath}
#判断文件内容是否为空,文件内容为空跳过入库过程
if [ -s $filename ]
then
#对元数据文件进行cat重定向,以转化数据格式,以符合入库要求
nocfile="cdr"${filename}
echo `date "+%Y-%m-%d %H:%M:%S"`": transform 对"${filename}"进行cat重定向,转化到"${temppath}${nocfile} >> ${logpath}
cat ${filename} | awk 'BEGIN{FS=",";OFS="|"}{print $3"-"$7, $1, $3, $4, $5, $7, $13, $14, $16, $22, $23, $25, $31, $32, $46, $0}' > ${temppath}${nocfile}.tmp
mv ${temppath}${nocfile}.tmp ${temppath}${nocfile} #将转化过格式的文件上传到hdfs,以便进行入库处理
echo `date "+%Y-%m-%d %H:%M:%S"`": upload 上传"${nocfile}"到hdfs上/data/noc/中!" >> ${logpath}
hadoop fs -put ${temppath}${nocfile} hdfs:///data/noc/ #使用上传的hdfs上的文件进行入库存储
echo `date "+%Y-%m-%d %H:%M:%S"`": storage 对"${nocfile}"进行入库存储到HBase中noc表中!" >> ${logpath}
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator='|' -Dimporttsv.skip.bad.lines=false -Dimporttsv.columns='HBASE_ROW_KEY,c:src_type,c:start_time,c:end_time,c:city_id,c:caller_call,c:caller_city,c:caller_sp,c:called_call,c:called_city,c:called_sp,c:callee_call,c:callee_city,c:callee_sp,c:succ_flag,c:info' noc hdfs:///data/noc/${nocfile}
else
echo `date "+%Y-%m-%d %H:%M:%S"`": null "${filename}"文件内容为空,跳过转格式入库过程!" >> ${logpath}
fi
#将处理过的文件压缩,存储到standard文件目录下
echo `date "+%Y-%m-%d %H:%M:%S"`": compress 对"${filename}"进行压缩到"${standardpath} >> ${logpath}
tar -zcvf ${standardpath}${filename}.tar.gz ${filename}
#删除处理过的元数据文件,以及转格式文件
echo `date "+%Y-%m-%d %H:%M:%S"`": remove 删除"${filename}"以及"${nocfile} >> ${logpath}
rm -rf ${filename}
rm -rf ${temppath}${nocfile}
done
#处理结束
echo "##########"`date "+%Y-%m-%d %H:%M:%S"`":本次任务结束##########" >> ${logpath}

1.文件处理最好指定处理的文件格式,确保处理的文件符合规范。

ls | grep -E "xw.*_[0-9]*\.txt"

2.保证操作的原子性cat 重定向就不是原子操作。

3.定时任务确保重复执行不受影响。

4.shell正则表达式。

5.hbase离线入库。

6.文件解压缩到指定文件。

7.shell循环,睡眠等等。

hbase离线定时入库shell脚本-小栗子的更多相关文章

  1. shell脚本小案例

    1.获取远程ftp数据到本地目录 #!/bin/bash ftp -n<<! open 135.0.24.19 user exchange exchange binary cd /idep ...

  2. linux运维自动化shell脚本小工具

    linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...

  3. 【转】linux 定时执行shell脚本

    在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 本文讲述crontab具体用法,以供备忘. 在oracle ...

  4. linux 定时执行shell脚本

    转自:http://blog.csdn.net/jingxiangren/article/details/4745631 在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程, ...

  5. linux crontab定时执行shell脚本

    linux下使用crontab命令被用来提交和管理用户的需要周期性执行的任务,示例如下:crontab -e 编辑周期任务30 21 * * * /etc/init.d/smb restart 每晚的 ...

  6. Linux 定时执行shell脚本命令之crontab

    crontab可以在指定的时间执行一个shell脚本以及执行一系列Linux命令 例如:服务器管理员定时备份数据库数据.日志等 详解: 常用命令: crontab –e //修改 crontab 文件 ...

  7. crontab定时执行shell脚本失败的原因

    有一段时间不用crontab定时执行任务了,这次趁着项目实施的机会来进一步分析一下crontab定时任务设置时遇到的一些棘手的问题. crontab -l 查看目前已经设置的crontab信息 cro ...

  8. 一个简单的linux下设置定时执行shell脚本的示例

    很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据.数据库数据等 不适合人工经常做的一些操作这里简单说下 shell Shell俗称壳,类似于DOS下的command ...

  9. linux定时执行shell脚本

    写一个shell脚本,定时执行简单示例 很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据.数据库数据等 不适合人工经常做的一些操作这里简单说下 Shell俗称壳,类 ...

随机推荐

  1. [译]GLUT教程 - 重整子窗体

    Lighthouse3d.com >> GLUT Tutorial >> Subwindows >> Reshape Subwindows 重整函数的回调需要处理两 ...

  2. u-boot README--Memory Management&initialize

    Memory Management:------------------ U-Boot runs in system state and uses physical addresses, i.e. t ...

  3. X264使用指南

    x264是一个开源的H.264视频编码器库.是目前最好的有损视频编码器. 基本用法是 x264 [options]-o outfile infile 主页: http://www.videolan.o ...

  4. 如何在github上发起一个pull request,如何贡献代码,参与开源项目

    点击页面右上角的 “fork” ,把你关注的项目fork到你自己的账号下了. 把项目克隆到本地 修改并push 回到你的github界面,发起请求: 在自己fork的库处新建请求:New pull r ...

  5. mysql 考勤表异常 【待修改】

    有考勤刷卡记录表,表名为attendance ,有如下字段: 姓名 卡号 刷卡时间 刷卡类型 name id time type    张三 59775623 2010-04-01 07:23:37  ...

  6. 8168开发之---1g内存换成512M的内存映射配置

    最近在帮新来同事调式内存分配,起初是将config.bld 中的内存在标配的基础上减少sr1,和tiler 将dsp从9m增加到16m,然后编译通过, 可是在加载的时候卡住了,init.sh 过,lo ...

  7. window下php5安装redis扩展 设置自启动服务

    最近想在5.6版本的开发环境装一下redis的扩展,结果找了半天都是失效链接,特此做下备份 5.3-5.6 https://pecl.php.net/package/redis/2.2.7/windo ...

  8. 统计输入的单词中有几个长度大于n的,n是自己指定的,用函数对象实现

    #ifndef COUNT_WORD_H #define COUNT_WORD_H #include <string.h> #include <iostream> #inclu ...

  9. Obj-C数组以及字符串拼接与分割

    本文转载至 http://mobile.51cto.com/iphone-392148.htm Obj-C只是增加了一点“特殊语料”的C语言,所以可以用printf()代替NSLog().但我们建议使 ...

  10. HDFS上传机制