狠狠撸

狠狠撸Share a Scribd company logo
python在?大数据任务调度管
理中的应用
猎聘?网	
 ?
2015-?‐09-?‐19
Outline
?? 背景	
 ?
?? ?大数据任务	
 ?
?? 调度	
 ?
–?Azkaban	
 ?
–?Luigi	
 ?
?? 总结	
 ?
背景
?? 2200万用户数据	
 ?
?? 每日四千万日志数据	
 ?
?? 我们用数据来做什么?	
 ?
–?简历推荐	
 ?
–??人脉挖掘	
 ?
–?商业分析	
 ?
背景
?? Hadoop/Hive	
 ?
–?存储数据	
 ?
–?清洗、过滤和统计数据	
 ?
?? MySQL/MonetDB	
 ?
–?数据集市	
 ?
背景
?? ?ume/KaFa	
 ?
–?数据收集	
 ?
?? Storm	
 ?
–?实时计算
?大数据任务
?? ETL	
 ?
–?业务数据同步	
 ?
?? FACT	
 ?
–?数据仓库建模	
 ?
?? 推荐系统?	
 ?
?大数据任务
?? 特点	
 ?
–?每日/周/月定时执?行	
 ?
–?依赖	
 ?
–?执?行时间长
调度
?? 使用crontab?	
 ?
–?能实现定时执?行	
 ?
–??无法解决依赖	
 ?
–??无重试机制	
 ?
–??无监控
调度
?? Azkaban	
 ?
–?Linkedin	
 ?
–?Java	
 ?
?? Luigi	
 ?
–?Spotify	
 ?
–?Python
Azkaban
?? https://github.com/azkaban/azkaban
Azkaban
?? 定时调度(日/周/月)	
 ?
?? 通过创建Work?ow解决依赖	
 ?
?? 可设置retry次数	
 ?
Azkaban
?? 控制后台	
 ?
–?上传任务	
 ?
–?编辑任务	
 ?
–?执?行任务	
 ?
–?查看执?行结果及日志	
 ?
Azkaban
?? 任务创建过程	
 ?
–?编辑.job?文件	
 ?
–?打成zip包在控制后台上传	
 ?
Azkaban
Azkaban
Azkaban
Azkaban
?? 创建Fact任务	
 ?
–? 编写SQL	
 ?
–? 编写执?行SQL脚本	
 ?
?? 参数替换	
 ?
?? hive	
 ?–f	
 ?sql_?le	
 ?
–? 设置定时执?行	
 ?
–? 设置导?入
Azkaban
?? 问题	
 ?
–?任务主要由数据分析师提出	
 ?
–?分析师做不了任务提交	
 ?
–?每天七?八个分析师盯着程序员给他们提交任务
Azkaban
?? 沟通成本	
 ?
?? 等待成本	
 ?
Korin
?? Azkaban提供AJAX	
 ?API	
 ?
?? Python写的API	
 ?Client	
 ?:AzkabanCLI	
 ?
–?https://github.com/mtth/azkaban	
 ?
Korin
Korin
?? 基于AzkabanCLI开发了korin系统	
 ?
–?Tornado	
 ?
–?docopt	
 ?
–?requests	
 ?
Korin
?? 简化Fact任务提交操作	
 ?
–?编辑SQL	
 ?
–?设置执?行参数	
 ?
–?提交	
 ?
?? 让只会写SQL的分析师也能提交任务
Korin
复杂点的任务
?? SEM统计分析	
 ?
–?调用接?口取得外部数据(baidu,360,sogou)	
 ?
–?自有数据获取 	
 ?
–?Join	
 ?
复杂点的任务
?? SEM统计分析	
 ?
–?Aggregate	
 ?
–?Format	
 ?
–?导?入到Hive	
 ?
–?导?入到monetdb	
 ?
–?邮件发送到相关?人员
复杂点的任务
复杂点的任务
?? 出错时不会出现不完整数据?文件	
 ?
?? 重复执?行时成功任务不再执?行	
 ?
?? 日期参数	
 ?
?? 历史数据?生成
复杂点的任务
复杂点的任务
Luigi
Luigi
https://github.com/spotify/luigi
Luigi
Luigi
?? 启动任务	
 ?
–?python	
 ?sem_tasks.py	
 ?FormatBaidu	
 ?
–?python	
 ?sem_tasks.py	
 ?FormatBaidu	
 ?–date	
 ?
2015-?‐09-?‐02	
 ?
–?python	
 ?sem_tasks.py	
 ?FormatBaidu	
 ?–workers	
 ?4	
 ?
Luigi
?? 技术架构	
 ?
–?Tornado	
 ?
–?SQLAlchemy	
 ?
–?numpy、pandas	
 ?
–?pycurl、request、suds	
 ?
Luigi
Luigi
?? 类似于GNU	
 ?make的?方式解决依赖	
 ?
?? DateParameter、DateIntervalParameter	
 ?
?? Atomic	
 ??les	
 ?
–?先写到临时?文件,执?行close时再copy?至target	
 ?
–?close未执?行则删除临时?文件	
 ?
?? Process	
 ?synchronization	
 ?
Luigi
?? 命令?行?工具	
 ?
–? RangeDaily、RangeHourly	
 ?
–? luigi	
 ?-?‐-?‐module	
 ?sem_tasks	
 ?RangeDaily	
 ?-?‐-?‐
of	
 ?FormatBaidu	
 ?-?‐-?‐start	
 ?2015-?‐01-?‐01	
 ?
?? Luigi	
 ?package	
 ?
–? ssh、ftp、Mysql、Hadoop、Pig、Spark支持	
 ?
?? Task	
 ?Visualization	
 ?
	
 ?
总结
?? Azkaban	
 ?
–?控制后台强?大	
 ?
?? Luigi	
 ?
–?可简化任务处理代码
–??无Trigger,需要配合crontab或是Azkaban使用	
 ?
–?控制后台功能较弱
总结
?? 仍存在的问题	
 ?
–?执?行SQL的依赖需要?人来判断	
 ?
–??无法设置任务执?行的优先级	
 ?
总结
?? 理想的任务调度引擎	
 ?
–?依赖	
 ?
–?优先级	
 ?
–?重试机制	
 ?
–?监控预警	
 ?
–?控制后台
总结
?? 目标:Python	
 ?rules	
 ?Hadoop	
 ?
?? 急需?大量Pythonista来搞?大数据	
 ?
猎聘网DIG团队概况 ?
大数据平台
数据仓库
BI工程
客
户
分
析
市
场
分
析
产
品
分
析
招
聘
推
荐
用
户
模
型
社
交
模
型
首席数据官	
 ?
	
 ?
We	
 ?Are	
 ?Hiring!!	
 ?
	
 ?
	
 ?
	
 ?
	
 ?
dig@liepin.com	
 ?
Q&A

More Related Content

用笔测迟丑辞苍实现丑补诲辞辞辫任务调度管理