侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python 获取 datax 执行结果保存到数据库的方法

Python  /  管理员 发布于 7年前   250

执行 datax 作业,创建执行文件,在 crontab 中每天1点(下面有关系)执行:

其中 job_start 及 job_finish 这两行记录是自己添加的,为了方便识别出哪张表。

#!/bin/bashsource /etc/profileuser1="root"pass1="pwd"user2="root"pass2="pwd"job_path="/opt/datax/job/" jobfile=(job_table_a.jsonjob_table_b.json) for filename in ${jobfile[@]}doecho "job_start: "`date "+%Y-%m-%d %H:%M:%S"`" ${filename}"python /opt/datax/bin/datax.py -p "-Duser1=${user1} -Dpass1=${pass1} -Duser2=${user2} -Dpass2=${pass2}" ${job_path}${filename}echo "job_finish: "`date "+%Y-%m-%d %H:%M:%S"`" ${filename}"done # 0 1 * * * /opt/datax/job/dc_to_ods_incr.sh >> /opt/datax/job/log/dc_to_ods_incr_$(date +\%Y\%m\%d_\%H\%M\%S).log 2>&1# egrep '任务|速度|总数|job_start|job_finish' /opt/datax/job/log/

datax 执行日志:

job_start: 2018-08-08 01:13:28 job_table_a.json任务启动时刻          : 2018-08-08 01:13:28任务结束时刻          : 2018-08-08 01:14:49任务总计耗时          :         81s任务平均流量          :     192.82KB/s记录写入速度          :      1998rec/s读出记录总数          :       159916读写失败总数          :          0job_finish: 2018-08-08 01:14:49 job_table_a.jsonjob_start: 2018-08-08 01:14:49 job_table_b.json任务启动时刻          : 2018-08-08 01:14:50任务结束时刻          : 2018-08-08 01:15:01任务总计耗时          :         11s任务平均流量          :        0B/s记录写入速度          :       0rec/s读出记录总数          :          0读写失败总数          :          0job_finish: 2018-08-08 01:15:01 job_table_b.json

接下来读取这些信息保存到数据库,在数据库中创建表:

CREATE TABLE `datax_job_result` ( `log_file` varchar(200) DEFAULT NULL, `job_file` varchar(200) DEFAULT NULL, `start_time` datetime DEFAULT NULL, `end_time` datetime DEFAULT NULL, `seconds` int(11) DEFAULT NULL, `traffic` varchar(50) DEFAULT NULL, `write_speed` varchar(50) DEFAULT NULL, `read_record` int(11) DEFAULT NULL, `failed_record` int(11) DEFAULT NULL, `job_start` varchar(200) DEFAULT NULL, `job_finish` varchar(200) DEFAULT NULL, `insert_time` datetime DEFAULT CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8;

定时执行以下文件,因为 datax 作业 1 点执行,为了获取一天内最新生产的日志,脚本中取 82800内生产的日志文件,及23 小时内生产的那个最新日志。所以一天内任何时间执行都可以。此文件也是定时每天执行(判断 datax 作业完成后执行)

#!/usr/bin/python# -*- coding: UTF-8 -*-# 0 5 * * * source /etc/profile && /usr/bin/python2.7 /opt/datax/job/save_log_to_db.py > /dev/null 2>&1 import reimport osimport sqlalchemyimport pandas as pdimport datetime as dt def save_to_db(df):engine = sqlalchemy.create_engine("mysql+pymysql://root:pwd@localhost:3306/test", encoding="utf-8") df.to_sql("datax_job_result", engine, index=False, if_exists='append')  def get_the_latest_file(path):t0 = dt.datetime.utcfromtimestamp(0)d2 = (dt.datetime.now() - t0).total_seconds()d1 = d2 - 82800for (dirpath, dirnames, filenames) in os.walk(path):for filename in sorted(filenames, reverse = True):if filename.endswith(".log"):f = os.path.join(dirpath,filename)ctime = os.stat(f)[-1]if ctime>=d1 and ctime <=d2:return fdef get_job_result_from_logfile(path):result = pd.DataFrame(columns=['log_file','job_file','start_time','end_time','seconds','traffic','write_speed','read_record','failed_record','job_start','job_finish'])log_file = get_the_latest_file(path)index = 0content = open(log_file, "r")for line in content:result.loc[index, 'log_file'] = log_fileif re.compile(r'job_start').match(line):result.loc[index, 'job_file'] = line.split(' ')[4].strip()result.loc[index, 'job_start'] = line,elif re.compile(r'任务启动时刻').match(line):result.loc[index, 'start_time'] = line.split('刻')[1].strip().split(' ')[1].strip() + ' ' + line.split('刻')[1].strip().split(' ')[2].strip()elif re.compile(r'任务结束时刻').match(line):result.loc[index, 'end_time'] = line.split('刻')[1].strip().split(' ')[1].strip() + ' ' + line.split('刻')[1].strip().split(' ')[2].strip()elif re.compile(r'任务总计耗时').match(line):result.loc[index, 'seconds'] = line.split(':')[1].strip().replace('s','')elif re.compile(r'任务平均流量').match(line):result.loc[index, 'traffic'] = line.split(':')[1].strip()elif re.compile(r'记录写入速度').match(line):result.loc[index, 'write_speed'] = line.split(':')[1].strip()elif re.compile(r'读出记录总数').match(line):result.loc[index, 'read_record'] = line.split(':')[1].strip()elif re.compile(r'读写失败总数').match(line):result.loc[index, 'failed_record'] = line.split(':')[1].strip()elif re.compile(r'job_finish').match(line):result.loc[index, 'job_finish'] = line,index = index + 1else:passsave_to_db(result) get_job_result_from_logfile("/opt/datax/job/log")

以上这篇Python 获取 datax 执行结果保存到数据库的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


  • 上一条:
    Python循环中else,break和continue的用法实例详解
    下一条:
    python opencv捕获摄像头并显示内容的实现
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客