44
python在数据任务调度管 理中的应用 猎聘 20150919

用Python实现hadoop任务调度管理

Embed Size (px)

Citation preview

Page 1: 用Python实现hadoop任务调度管理

python在⼤大数据任务调度管理中的应用

猎聘⽹网  

2015-­‐09-­‐19

Page 2: 用Python实现hadoop任务调度管理

Outline

•  背景  

•  ⼤大数据任务  

•  调度  

– Azkaban  

– Luigi  

•  总结  

Page 3: 用Python实现hadoop任务调度管理

背景

•  2200万用户数据  

•  每日四千万日志数据  

•  我们用数据来做什么?  

– 简历推荐  

– ⼈人脉挖掘  

– 商业分析  

Page 4: 用Python实现hadoop任务调度管理

背景

•  Hadoop/Hive  

– 存储数据  

– 清洗、过滤和统计数据  

•  MySQL/MonetDB  

– 数据集市  

Page 5: 用Python实现hadoop任务调度管理

背景

•  flume/KaFa  

– 数据收集  

•  Storm  

– 实时计算

Page 6: 用Python实现hadoop任务调度管理

⼤大数据任务

•  ETL  

– 业务数据同步  

•  FACT  

– 数据仓库建模  

•  推荐系统?  

Page 7: 用Python实现hadoop任务调度管理

⼤大数据任务

•  特点  

– 每日/周/月定时执⾏行  

– 依赖  

– 执⾏行时间长

Page 8: 用Python实现hadoop任务调度管理

调度

•  使用crontab?  

– 能实现定时执⾏行  

– ⽆无法解决依赖  

– ⽆无重试机制  

– ⽆无监控

Page 9: 用Python实现hadoop任务调度管理

调度

•  Azkaban  – Linkedin  

– Java  

•  Luigi  – Spotify  

– Python

Page 10: 用Python实现hadoop任务调度管理

Azkaban

•  https://github.com/azkaban/azkaban

Page 11: 用Python实现hadoop任务调度管理

Azkaban

•  定时调度(日/周/月)  

•  通过创建Workflow解决依赖  

•  可设置retry次数  

Page 12: 用Python实现hadoop任务调度管理

Azkaban

•  控制后台  

– 上传任务  

– 编辑任务  

– 执⾏行任务  

– 查看执⾏行结果及日志  

Page 13: 用Python实现hadoop任务调度管理

Azkaban

•  任务创建过程  

– 编辑.job⽂文件  

– 打成zip包在控制后台上传  

Page 14: 用Python实现hadoop任务调度管理

Azkaban

Page 15: 用Python实现hadoop任务调度管理

Azkaban

Page 16: 用Python实现hadoop任务调度管理

Azkaban

Page 17: 用Python实现hadoop任务调度管理

Azkaban

•  创建Fact任务  

– 编写SQL  

– 编写执⾏行SQL脚本  

•  参数替换  

•  hive  –f  sql_file  

– 设置定时执⾏行  

– 设置导⼊入

Page 18: 用Python实现hadoop任务调度管理

Azkaban

•  问题  

– 任务主要由数据分析师提出  

– 分析师做不了任务提交  

– 每天七⼋八个分析师盯着程序员给他们提交任务

Page 19: 用Python实现hadoop任务调度管理

Azkaban

•  沟通成本  

•  等待成本  

Page 20: 用Python实现hadoop任务调度管理

Korin

•  Azkaban提供AJAX  API  

•  Python写的API  Client  :AzkabanCLI  

– https://github.com/mtth/azkaban  

Page 21: 用Python实现hadoop任务调度管理

Korin

Page 22: 用Python实现hadoop任务调度管理

Korin

•  基于AzkabanCLI开发了korin系统  

– Tornado  

– docopt  

–  requests  

Page 23: 用Python实现hadoop任务调度管理

Korin

•  简化Fact任务提交操作  

– 编辑SQL  

– 设置执⾏行参数  

– 提交  

•  让只会写SQL的分析师也能提交任务

Page 24: 用Python实现hadoop任务调度管理

Korin

Page 25: 用Python实现hadoop任务调度管理

复杂点的任务

•  SEM统计分析  

– 调用接⼝口取得外部数据(baidu,360,sogou)  

– 自有数据获取  

– Join  

Page 26: 用Python实现hadoop任务调度管理

复杂点的任务•  SEM统计分析  

– Aggregate  

– Format  

– 导⼊入到Hive  

– 导⼊入到monetdb  

– 邮件发送到相关⼈人员

Page 27: 用Python实现hadoop任务调度管理

复杂点的任务

Page 28: 用Python实现hadoop任务调度管理

复杂点的任务

•  出错时不会出现不完整数据⽂文件  

•  重复执⾏行时成功任务不再执⾏行  

•  日期参数  

•  历史数据⽣生成

Page 29: 用Python实现hadoop任务调度管理

复杂点的任务

Page 30: 用Python实现hadoop任务调度管理

复杂点的任务

Page 31: 用Python实现hadoop任务调度管理

Luigi

Page 32: 用Python实现hadoop任务调度管理

Luigi

https://github.com/spotify/luigi

Page 33: 用Python实现hadoop任务调度管理

Luigi

Page 34: 用Python实现hadoop任务调度管理

Luigi

•  启动任务  

– python  sem_tasks.py  FormatBaidu  

– python  sem_tasks.py  FormatBaidu  –date  

2015-­‐09-­‐02  

– python  sem_tasks.py  FormatBaidu  –workers  4  

Page 35: 用Python实现hadoop任务调度管理

Luigi

•  技术架构  

– Tornado  

– SQLAlchemy  

– numpy、pandas  

– pycurl、request、suds  

Page 36: 用Python实现hadoop任务调度管理

Luigi

Page 37: 用Python实现hadoop任务调度管理

Luigi

•  类似于GNU  make的⽅方式解决依赖  

•  DateParameter、DateIntervalParameter  

•  Atomic  files  

– 先写到临时⽂文件,执⾏行close时再copy⾄至target  

– close未执⾏行则删除临时⽂文件  

•  Process  synchronization  

Page 38: 用Python实现hadoop任务调度管理

Luigi•  命令⾏行⼯工具  

– RangeDaily、RangeHourly  

–  luigi  -­‐-­‐module  sem_tasks  RangeDaily  -­‐-­‐

of  FormatBaidu  -­‐-­‐start  2015-­‐01-­‐01  

•  Luigi  package  –  ssh、ftp、Mysql、Hadoop、Pig、Spark支持  

•  Task  Visualization  

 

Page 39: 用Python实现hadoop任务调度管理

总结

•  Azkaban  – 控制后台强⼤大  

•  Luigi  – 可简化任务处理代码

– ⽆无Trigger,需要配合crontab或是Azkaban使用  

– 控制后台功能较弱

Page 40: 用Python实现hadoop任务调度管理

总结

•  仍存在的问题  

– 执⾏行SQL的依赖需要⼈人来判断  

– ⽆无法设置任务执⾏行的优先级  

Page 41: 用Python实现hadoop任务调度管理

总结

•  理想的任务调度引擎  

– 依赖  

– 优先级  

– 重试机制  

– 监控预警  

– 控制后台

Page 42: 用Python实现hadoop任务调度管理

总结

•  目标:Python  rules  Hadoop  

•  急需⼤大量Pythonista来搞⼤大数据  

Page 43: 用Python实现hadoop任务调度管理

猎聘网DIG团队概况 � 

大数据平台

数据仓库

BI工程

客户 分析

市场 分析

产品 分析

招聘推荐

用户模型

社交模型

首席数据官    

We  Are  Hiring!!          

[email protected]  

Page 44: 用Python实现hadoop任务调度管理

Q&A