使用python构建基于hadoop的mapreduce日志分析平台
2014-09-05 14:24
886 查看
使用python构建基于hadoop的mapreduce日志分析平台
2013-12-17 09:52 rfyiamcool 51CTO博客 字号:T | T流量比较大的日志要是直接写入Hadoop对Namenode负载过大,所以入库前合并,可以把各个节点的日志凑并成一个文件写入HDFS。 根据情况定期合成,写入到hdfs里面。
AD:2014WOT全球软件技术峰会北京站 课程视频发布
流量比较大的日志要是直接写入Hadoop对Namenode负载过大,所以入库前合并,可以把各个节点的日志凑并成一个文件写入HDFS。 根据情况定期合成,写入到hdfs里面。
咱们看看日志的大小,200G的dns日志文件,我压缩到了18G,要是用awk perl当然也可以,但是处理速度肯定没有分布式那样的给力。
Hadoop Streaming原理
mapper和reducer会从标准输入中读取用户数据,一行一行处理后发送给标准输出。Streaming工具会创建MapReduce作业,发送给各个tasktracker,同时监控整个作业的执行过程。
任何语言,只要是方便接收标准输入输出就可以做mapreduce~
再搞之前我们先简单测试下shell模拟mapreduce的性能速度~
看下他的结果,350M的文件用时35秒左右。
这是2G的日志文件,居然用了3分钟。 当然和我写的脚本也有问题,我们是模拟mapreduce的方式,而不是调用shell下牛逼的awk,gawk处理。
awk的速度 !果然很霸道,处理日志的时候,我也很喜欢用awk,只是学习的难度有点大,不像别的shell组件那么灵活简单。
这是官方的提供的两个demo ~
map.py
咱们就简单模拟下数据,跑个测试
剩下就没啥了,在hadoop集群环境下,运行hadoop的steaming.jar组件,加入mapreduce的脚本,指定输出就行了. 下面的例子我用的是shell的成分。
(1)-input:输入文件路径
(2)-output:输出文件路径
(3)-mapper:用户自己写的mapper程序,可以是可执行文件或者脚本
(4)-reducer:用户自己写的reducer程序,可以是可执行文件或者脚本
(5)-file:打包文件到提交的作业中,可以是mapper或者reducer要用的输入文件,如配置文件,字典等。
(6)-partitioner:用户自定义的partitioner程序
(7)-combiner:用户自定义的combiner程序(必须用java实现)
(8)-D:作业的一些属性(以前用的是-jonconf),具体有:
1)mapred.map.tasks:map task数目
2)mapred.reduce.tasks:reduce task数目
3)stream.map.input.field.separator/stream.map.output.field.separator: map task输入/输出数
据的分隔符,默认均为\t。
4)stream.num.map.output.key.fields:指定map task输出记录中key所占的域数目
5)stream.reduce.input.field.separator/stream.reduce.output.field.separator:reduce task输入/输出数据的分隔符,默认均为\t。
6)stream.num.reduce.output.key.fields:指定reduce task输出记录中key所占的域数目
这里是统计dns的日志文件有多少行 ~
在mapreduce作为参数的时候,不能用太多太复杂的shell语言,他不懂的~
可以写成shell文件的模式;
13/12/14 13:26:52 INFO streaming.StreamJob: Tracking URL: http://101.rui.com:50030/jobdetails.jsp?jobid=job_201312131904_0030
13/12/14 13:26:53 INFO streaming.StreamJob: map 0% reduce 0%
13/12/14 13:27:16 INFO streaming.StreamJob: map 100% reduce 100%
13/12/14 13:27:16 INFO streaming.StreamJob: To kill this job, run:
13/12/14 13:27:16 INFO streaming.StreamJob: /usr/local/hadoop/libexec/../bin/hadoop job -Dmapred.job.tracker=localhost:9001 -kill job_201312131904_0030
13/12/14 13:27:16 INFO streaming.StreamJob: Tracking URL: http://101.rui.com:50030/jobdetails.jsp?jobid=job_201312131904_0030
13/12/14 13:27:16 ERROR streaming.StreamJob: Job not successful. Error: # of failed Map Tasks exceeded allowed limit. FailedCount: 1. LastFailedTask: task_201312131904_0030_m_000000
13/12/14 13:27:16 INFO streaming.StreamJob: killJob...
Streaming Command Failed!
python做为mapreduce执行成功后,结果和日志一般是放在你指定的目录下的,结果是在part-00000文件里面~
下面咱们谈下,如何入库和后台的执行
本文出自 “峰云,就她了。” 博客,谢绝转载!原文地址:/article/4123285.html
【编辑推荐】
Hadoop虚拟化的性能对比和调优经验
hadoop1.2.1+zookeeper-3.4.5+hbase-0.94.1集群安装
Mongodb千万级数据在python下的综合压力测试及应用探讨
YARN动摇了MapReduce对Hadoop的掌控
Python正在取代R,成为数据科学界新宠
相关文章推荐
- 使用python构建基于hadoop的mapreduce日志分析平台 推荐
- 使用python构建基于hadoop的mapreduce日志分析平台
- 使用hadoop平台进行小型网站日志分析
- hadoop平台使用python编写mapreduce排序小程序
- hadoop日志分析系统二 第二部分利用hadoop平台进行数据处理 第二中种方式 mapreduce方式
- hadoop日志分析系统二 第二部分利用hadoop平台进行数据处理 第一种方式 mapreduce方式
- 基于Hadoop MapReduce模型的数据分析平台研究设计
- hadoop日志分析系统二 第二部分利用hadoop平台进行数据处理 第一种方式 mapreduce方式
- Python之——使用原生Python编写Hadoop MapReduce程序(基于Hadoop 2.5.2)
- 使用hadoop平台进行小型网站日志分析
- hadoop日志分析系统二 第二部分利用hadoop平台进行数据处理 第二中种方式 mapreduce方式
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- hadoop日志分析系统二 第二部分利用hadoop平台进行数据处理 第三种方式 hive+sqoop+zookeeper方式
- 能分析压缩的日志,且基于文件输入的PYTHON代码实现
- 基于Hadoop的日志收集框架---Chukwa的源码分析(数据处理)
- Hadoop MapReduce基于新API的WordCount程序运行过程分析
- 基于Hadoop的日志收集框架---Chukwa的源码分析(连接器)
- 使用Hadoop构建MapReduce应用
- China (googlegroups) - [CPyUG:78205] 基于Python的MapReduce算法的快速构建框架
- 基于linux-2.6.38.8内核的SDIO/wifi驱动分析&&android 平台USB wifi驱动移植及使用 SDIOwifi