Upload
leo-zhou
View
198
Download
6
Embed Size (px)
Citation preview
python在⼤大数据任务调度管理中的应用
猎聘⽹网
2015-‐09-‐19
Outline
• 背景
• ⼤大数据任务
• 调度
– Azkaban
– Luigi
• 总结
背景
• 2200万用户数据
• 每日四千万日志数据
• 我们用数据来做什么?
– 简历推荐
– ⼈人脉挖掘
– 商业分析
背景
• Hadoop/Hive
– 存储数据
– 清洗、过滤和统计数据
• MySQL/MonetDB
– 数据集市
背景
• flume/KaFa
– 数据收集
• Storm
– 实时计算
⼤大数据任务
• ETL
– 业务数据同步
• FACT
– 数据仓库建模
• 推荐系统?
⼤大数据任务
• 特点
– 每日/周/月定时执⾏行
– 依赖
– 执⾏行时间长
调度
• 使用crontab?
– 能实现定时执⾏行
– ⽆无法解决依赖
– ⽆无重试机制
– ⽆无监控
调度
• Azkaban – Linkedin
– Java
• Luigi – Spotify
– Python
Azkaban
• https://github.com/azkaban/azkaban
Azkaban
• 定时调度(日/周/月)
• 通过创建Workflow解决依赖
• 可设置retry次数
Azkaban
• 控制后台
– 上传任务
– 编辑任务
– 执⾏行任务
– 查看执⾏行结果及日志
Azkaban
• 任务创建过程
– 编辑.job⽂文件
– 打成zip包在控制后台上传
Azkaban
Azkaban
Azkaban
Azkaban
• 创建Fact任务
– 编写SQL
– 编写执⾏行SQL脚本
• 参数替换
• hive –f sql_file
– 设置定时执⾏行
– 设置导⼊入
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 files
– 先写到临时⽂文件,执⾏行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!!
Q&A