hbase离线定时入库shell脚本-小栗子
#!/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脚本-小栗子的更多相关文章
- shell脚本小案例
1.获取远程ftp数据到本地目录 #!/bin/bash ftp -n<<! open 135.0.24.19 user exchange exchange binary cd /idep ...
- linux运维自动化shell脚本小工具
linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...
- 【转】linux 定时执行shell脚本
在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 本文讲述crontab具体用法,以供备忘. 在oracle ...
- linux 定时执行shell脚本
转自:http://blog.csdn.net/jingxiangren/article/details/4745631 在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程, ...
- linux crontab定时执行shell脚本
linux下使用crontab命令被用来提交和管理用户的需要周期性执行的任务,示例如下:crontab -e 编辑周期任务30 21 * * * /etc/init.d/smb restart 每晚的 ...
- Linux 定时执行shell脚本命令之crontab
crontab可以在指定的时间执行一个shell脚本以及执行一系列Linux命令 例如:服务器管理员定时备份数据库数据.日志等 详解: 常用命令: crontab –e //修改 crontab 文件 ...
- crontab定时执行shell脚本失败的原因
有一段时间不用crontab定时执行任务了,这次趁着项目实施的机会来进一步分析一下crontab定时任务设置时遇到的一些棘手的问题. crontab -l 查看目前已经设置的crontab信息 cro ...
- 一个简单的linux下设置定时执行shell脚本的示例
很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据.数据库数据等 不适合人工经常做的一些操作这里简单说下 shell Shell俗称壳,类似于DOS下的command ...
- linux定时执行shell脚本
写一个shell脚本,定时执行简单示例 很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据.数据库数据等 不适合人工经常做的一些操作这里简单说下 Shell俗称壳,类 ...
随机推荐
- ListView滚动到底部判断
参考:http://blog.csdn.net/jodan179/article/details/8017693 List13介绍的是ListView.OnScrollListener的 onScro ...
- Android分享功能的一点总结
前段时间给曾经的App加了分享功能,与大家分享一些心得. 实现分享功能有三种方式: 1.调用Android自带的分享接口.这样的方式最简单.它是直接调用App的发信息功能,把我们的链接通过信息方式发出 ...
- NFS详细分析
1. NFS服务介绍 1.1什么是NFS服务 NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端 ...
- 【拆分版】Docker-compose构建Elasticsearch 7.1.0集群
写在前边 搞了两三天了,一直有个问题困扰着我,ES集群中配置怎么能正确映射到主机上,这边经常报ClusterFormationFailureHelper master not discovered o ...
- Jenkins入门(一)
Jenkins就是一个Java Web应用,它主要是干什么呢? 其实很简单: 下载一个jenkins的war包,然后扔到tomcat 的webapps中,启动这个tomcat,访问jenkins应用即 ...
- ntp服务及其配置
集群中使用NTP服务 简介 之前搭建zookeeper时报了一个错,我以为是ntp的问题,结果不是.这里详细学习一下如何在集群中使用ntp服务. 什么是ntp服务 来自ntp的百度百科: NTP服务器 ...
- 跳转 nginx 跳转 apache跳转
公司在google上投广告,需要做一些很简单的站去google上投广告,当用户在google上点击那些很简单的网站的时候,就会跳转到真实的网站.但是,如果用户直接在浏览器输入域名,并访问的话,那样就不 ...
- 【Mysql】之视图操作
一.视图实例1-创建视图及查询数据操作 首先,创建三个表:user.course.user_course 表:user CREATE TABLE `user` ( `id` ) NOT NULL AU ...
- py.test
只运行某一个用例 pytest test_mod.py::test_func 或者 pytest test_mod.py::TestClass::test_method
- InitialContext和lookup
http://wxg6203.iteye.com/blog/680830 最近因为工作需要开始学习Ejb3,遇到了一个让我很郁闷的事情,做一下小小的总结——小心new InitialContext() ...