#!/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. ubuntu打开终端多开标签的快捷键是ctrl+ shift+ T 对比ctrl+ alt+ T 另外窗口打开一个终端

    ubuntu打开终端多开标签的快捷键是ctrl+ shift+ T 对比ctrl+ alt+ T 另外窗口打开一个终端

  2. ARM初学引导_转

    一直都在听说ARM有多么好,有多神奇,有多难学.故学它时都兴奋加恐惧.呵呵,我刚好用ARM也有一段时间了.写点东西给ARM的初学者,希望能起到帮助作用. 1,记住:ARM很简单,就如从51转换到PIC ...

  3. 请描述Java中的时间监听机制?

    1.时间监听涉及到三个组件:事件源.事件对象.事件监听器 2.当事件源上发生某个动作时,它会调用事件监听器的一个方法,并将事件对象穿进去,开发人员在监听器中通过事件对象,拿到事件源,从而对事件源进行操 ...

  4. hasOwnProperty()与in操作符的区别

    hasOwnProperty()  判断属性是否是实例化(不包括原型)的属性, 存在会返回true; 否则, 返回false in  无论属性是存在实例本身中, 还是原型对象中, 存在会返回true; ...

  5. java 经典范例

    使用for 循环输出空心菱形 package 开阳; import java.util.Scanner; public class image { public static void main(St ...

  6. HDU 5045 5047 5050 5053(上海网络赛E,F,I,L)

    HDU 5045 5047 5050 5053 太菜了,名额差点没保住.吓尿..赶紧开刷树链抛分 5045:状压DP.压缩10个人.因为两个人不能差2以上,所以能够用01表示 5047:推推公式就可以 ...

  7. cf 251 B Playing with Permutations 暴力 分类讨论

    题链;http://codeforces.com/problemset/problem/251/B B. Playing with Permutations time limit per test 2 ...

  8. Jmeter 04 JMeter 负载与监听

    1. 场景设计 2. 场景设置 3. JMeter性能参数配置 4. 测试监听

  9. K.Bro Sorting(思维题)

    K.Bro Sorting Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others)T ...

  10. Discrete Function(简单数学题)

    Discrete Function There is a discrete function. It is specified for integer arguments from 1 to N (2 ...