#!/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. windows 下编译64位ffmpeg

    window下如何编译ffmpeg 前文已有介绍,前面介绍的都是如何编译32位的库,本文主要介绍window 下如何编译64位ffmpeg库. 一.搭建编译环境 1.下载 windows下编译64位F ...

  2. BFS和DFS的java实现

    <pre name="code" class="java"> import java.util.HashMap; import java.util. ...

  3. pods 遇到的问题

    解决方法 : product -> sccheme ->pod  点击

  4. setpgid()

    #include<unistd.h> int setpgid(pid_t pid,pid_t pgid); 函数作用:将pid进程的进程组ID设置成pgid,创建一个新进程组或加入一个已存 ...

  5. listView的异步加载数据

    1 public class MainActivity extends Activity { 2 3 private ListView listView; 4 private ArrayList< ...

  6. IDEA中配置svn

    反正这个命令行我是勾选了的,软件占用内存不大,我就都选了. 然后是配置IDEA 试一下效果,果然阔以,哈哈.

  7. excel批量取消隐藏工作表

    按下"Alt+F11"键,在打开的"Microsoft Bisual Basic"窗口中,选择"插入——模块".,复制下面的代码,按F5键运 ...

  8. PHP SOCKET编程 .

    1. 预备知识 一直以来很少看到有多少人使用php的socket模块来做一些事情,大概大家都把它定位在脚本语言的范畴内吧,但是其实php的socket模块可以做很多事情,包括做ftplist,http ...

  9. Java多线程编程总结一:多线程基本概念

    Java多线程编程总结一 – 初识多线程 进程.多进程.线程.多线程的概念 进程(process):CPU的执行路径.通俗的说就是系统中正在运行的程序.比如我们打开了浏览器.QQ等等,这些程序一旦被打 ...

  10. WPF编程学习——样式(好文)

    http://www.cnblogs.com/libaoheng/archive/2011/11/20/2255963.html