10 Python&Hadoop
10 Python&Hadoop
10 Python&Hadoop
从开源中来,到开源中去
EasyHadoop 童小军
[email protected]
2012年10年20日
演讲大纲
• 个人介绍
• 思考数据分析系统的基本指标
• Hadoop史前和史后的数据仓库流程
• Hadoop史前和史后的数据分析流程
• 思考Hadoop解决了什么样的根本问题
• Python 如何在构建数据仓库系统的作用
– 1. 使用Python快速构建 数据分析模块 ComETL
– 2. 基于Python MapReduce Streaming 快速并行编程
– 3. Hive如果内嵌Python实现自定义逻辑
– 4. Pig内嵌JPython 实现PageRank挖掘算法
– 5. JPython MapReduce 框架 Pydoop Happy 等。
• 使用开源软件配合Python快速构建数据仓库
• EasyHadoop提供的资料[EasyHadoop部署安装手册,EasyHive手册]
• EasyHadoop开源技术聚会
思考-数据分析系统的基本指标
思考-数据分析系统的基本指标
思考-数据分析系统的基本指标
反馈决策周期!快
反馈决策粒度! 细
反馈决策准确性! 准
反馈总体成本! 廉价
数据统计/分析 是一个组织
自动控制,自学习,自调整系统
核心组成部分。机会成本 ! 想象空间!
Hadoop 前的数据仓库流程
• perl,shell,awk
反馈决策周期!快 ?
反馈决策粒度! 细 ?
反馈决策准确性! 准 ?
反馈总体成本! 廉价 ?
Hadoop后的数据仓库流程
• Hql,Pig,Mapreduce,工作流
反馈决策周期!快 ?
反馈决策粒度! 细 ?
反馈决策准确性! 准 ?
反馈总体成本! 廉价 ?
持续扩展成本 ?
Hadoop解决了什么样的根本问题?
Hadoop为何会比数据库快?
本地化IO? 大数据计算任务
任务划分
结果合并
计算结果
Hadoop分布式安装
磁盘读取速度,网络IO?
基于hadoop的数据平台总体架构
Python 结合 Hadoop Streaming
原理解析
MapReduce基本流程
实现distinct
一、日志格式:
{0E3AAC3B-E705-4915-9ED4-EB7B1E963590}
{FB11E363-6D2B-40C6-A096-95D8959CDB92}
{06F7CAAB-E165-4F48-B32C-8DD1A8BA2562}
{B17F6175-6D36-44D1-946F-D748C494648A}
{06F7CAAB-E165-4F48-B32C-8DD1A8BA2562}
{B17F6175-6D36-44D1-946F-D748C494648A}
B11E363-6D2B-40C6-A096-95D8959CDB92
17F6175-6D36-44D1-946F-D748C494648A
4
E3AAC3B-E705-4915-9ED4-EB7B1E963590
6F7CAAB-E165-4F48-B32C-8DD1A8BA2562
使用python实现 distinct/count
一、日志格式:
{0E3AAC3B-E705-4915-9ED4-EB7B1E963590}
{FB11E363-6D2B-40C6-A096-95D8959CDB92}
{06F7CAAB-E165-4F48-B32C-8DD1A8BA2562}
{B17F6175-6D36-44D1-946F-D748C494648A}
{06F7CAAB-E165-4F48-B32C-8DD1A8BA2562}
{B17F6175-6D36-44D1-946F-D748C494648A}
B11E363-6D2B-40C6-A096-95D8959CDB92
17F6175-6D36-44D1-946F-D748C494648A
4
E3AAC3B-E705-4915-9ED4-EB7B1E963590
6F7CAAB-E165-4F48-B32C-8DD1A8BA2562
( distinct\count)--map (distinct)--red
#!/usr/bin/python
import sys
lastuid=""
num=1
for line in sys.stdin:
uid,count=line[:-1].split('\t')
if lastuid =="":
lastuid=uid
if lastuid != uid:
num+=1
lastuid=uid
print num
基于Python MapReduce Streaming 快
速并行编程
一、单机测试
head test.log | python map.py | python red.py
一、将文件上传到集群
/bin/hadoop fs -copyFromLocal test.log /hdfs/
三、运行map red
/bin/hadoop jar contrib/streaming/hadoop-streaming-0.20.203.0.jar -file
/path/map.py -file /path/red.py
-mapper map.py -reducer red.py
-input /path/test.log -output /path/
通过界面查看任务状态
Python快速构建 数据分析模块 ComETL
极少的代码量,几万行吧!
1.支持简单工作流
2.支持自动恢复
3.支持自定义驱动
4.支持 Hive Mysql MapReduce 等模式
作者:赵修湘
软件地址: https://github.com/zhuyeqing/ComETL
ComEtl配置样例
etl_op = {"run_mode":'day',
"delay_hours":2,
"jobs":[{"job_name":"job1",
"analysis":[{'etl_class_name':'ExtractionEtl',
'step_name':'mysql_e_1',
'db_type':'hive',
'db_coninfo':[{'db_ip':'192.168.1.50','db_port':3306,'db_user':'jobs','db_passwd':'hhxxttxs','db_db':'test'}],
'db_path':'test.a2',
'pre_sql':[],
'post_sql':[],
'data_save_type':'SimpleOutput',
"sql_assemble":'SimpleAssemble',
'sql':'select* from test.a2 limit 30',
},],
"transform":[{'etl_class_name':'TransformEtl',
'step_name':'transform1',
'data_source':[{"job_name":"job1","step_name":'mysql_e_1','data_field':''},],
'data_transform_type':'SimpleTransform',
},],
"loading":[{'etl_class_name':'LoadingEtl',
'step_name':'load1',
'data_source':{"job_name":"job1","step_name":'transform1'},
'db_type':'mysql',
'db_coninfo':[{'db_ip':'192.168.1.50','db_port':3306,'db_user':'jobs','db_passwd':'hhxxttxs','db_db':'test'}],
'db_path':'test.a2',
'pre_sql':[],
'post_sql':[],
'data_load_type':'SplitLoad',
'data_field':'a|b'},]}
}
Pig内嵌JPython 实现PageRank算法
JPython+pig 代码实现演示
https://github.com/julienledem/Pig-scripting-examples/blob/
其他Python MapReduce框架
• Pydoop - Python API for Hadoop MapReduce and HDFS
• http://pydoop.sourceforge.net/docs/
• Happy - http://code.google.com/p/happy/
• datafu -Pig算法库 linkedin
https://github.com/linkedin/datafu
总体数据规模
• 20+ 服务器的Hadoop/hive计算平台
• 每日 Hive 查询 1200+
• 每天处理3000+作业任务
• 每天处理 10T
0T++数据
集群资源利用率
数据平台 技术路线发展
Python Hadoop最佳实践
• 参加EasyHadoop 聚会学习
• 使用EasyHadoop管理集群
EasyHadoop社区 电子出版物
www.easyhadoop.com
EasyHadoop组织了六次技术分享
HadoopCloud 开放平台计划
学习 Hadoop 需要具备三大前提资源。
• 第一:海量的数据集
• 第二:大规模的分析硬件平台
• 第三:大量真实的业务分析需求
• HadoopCloud 提供以上三个平台给用户学习使用。
谢谢!
ComETL Happyetl
CronHub
多开放一些有趣的开源项目
www.easyhadoop.com