zoukankan      html  css  js  c++  java
  • 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 0
            return 1
    }
    if [ -f ${pidpath} ]; then
            check_running
            exist=$?
            while [[ $exist = 0 ]]
            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循环,睡眠等等。

  • 相关阅读:
    vs中nodejs代码 resharper 提示 ECMAScript2015 Feature. your Current language level is ECMAScript5的解决办法
    为什么使用Sails?
    关于sails 初学者常见问题汇总
    mongoDb,下载及启动
    npm命令,查看当前npm版本,更新nmp到最新版本,安装sails
    ReSharper Ultimate 2017 下载地址及破解方法
    visual studio 2015开发nodejs教程1搭建环境
    简介Gulp, Grunt, Bower, 和 Npm 对Visual Studio的支持
    VS2015前端工具:NPM和Web Essentials
    在Visual Studio上开发Node.js程序
  • 原文地址:https://www.cnblogs.com/husky/p/6422001.html
Copyright © 2011-2022 走看看