10 Python&Hadoop

Download as pdf or txt
Download as pdf or txt
You are on page 1of 32

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

import sys #!/usr/bin/python


import sys
for line in sys.stdin: res = {}
try: for line in sys.stdin:
flags = line[1:-2] try:
flags = line[:-1].split('\t')
str = flags+'\t'+'1' if len(flags) != 2:
print str continue
field_key = flags[0]
if res.has_key(field_key) ==
except Exception,e: False:
print e res[field_key] = [0]
res[field_key][0] = 1
except Exception,e:
pass
for key in res:
print key
(count
(count的优化实现 )--reduce

#!/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 等模式

类似系统 Sqoop DataX Oozie

作者:赵修湘

软件地址: 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
总体数据规模

• 总空间150T以上, 每日新增数据 0.5T

• 20+ 服务器的Hadoop/hive计算平台

• 单个任务优化从 7个小时到 1个小时

• 每日 Hive 查询 1200+

• 每天处理3000+作业任务

• 每天处理 10T
0T++数据
集群资源利用率
数据平台 技术路线发展
Python Hadoop最佳实践

• 通过Tornado Nginx 接受日志


• 通过Scribe 同步数据
• 使用Python 编写加载和清洗脚本
• 使用ComEtl 通过Hive做ETL
• 参考HappyEtl,Pydoop编写Python Streaming
• 使用CronHub 做定时调度
• 使用phpHiveAdmin 提供自助查询
• 使用 Mysql 存储中间结果
• 通过Tornado+highcharts/gnuplot 提供报表展现
• 使用 Python + Nagios Cacti Ganglia 监控集群
• 整体构建在 Hadoop+Hive+pig 基础平台之上。

• 参加EasyHadoop 聚会学习
• 使用EasyHadoop管理集群
EasyHadoop社区 电子出版物
www.easyhadoop.com
EasyHadoop组织了六次技术分享
HadoopCloud 开放平台计划
学习 Hadoop 需要具备三大前提资源。

• 第一:海量的数据集
• 第二:大规模的分析硬件平台
• 第三:大量真实的业务分析需求

• HadoopCloud 提供以上三个平台给用户学习使用。
谢谢!

ComETL Happyetl

CronHub

多开放一些有趣的开源项目
www.easyhadoop.com

You might also like