使用Python构建基于Hadoop的MapReduce日志分析平台

流量比较大的日志要是直接写入Hadoop对Namenode负载过大,所以入库前合并,可以把各个节点的日志凑并成一个文件写入HDFS。 根据情况定期合成,写入到hdfs里面。

使用Python构建基于Hadoop的MapReduce日志分析平台

咱们看看日志的大小,200G的dns日志文件,我压缩到了18G,要是用awk perl当然也可以,但是处理速度肯定没有分布式那样的给力。

使用Python构建基于Hadoop的MapReduce日志分析平台

Hadoop Streaming原理

mapper和reducer会从标准输入中读取用户数据,一行一行处理后发送给标准输出。Streaming工具会创建MapReduce作业,发送给各个tasktracker,同时监控整个作业的执行过程。

任何语言,只要是方便接收标准输入输出就可以做mapreduce~

再搞之前我们先简单测试下shell模拟mapreduce的性能速度~

使用Python构建基于Hadoop的MapReduce日志分析平台

看下他的结果,350M的文件用时35秒左右。

使用Python构建基于Hadoop的MapReduce日志分析平台

这是2G的日志文件,居然用了3分钟。 当然和我写的脚本也有问题,我们是模拟mapreduce的方式,而不是调用shell下牛逼的awk,gawk处理。

使用Python构建基于Hadoop的MapReduce日志分析平台

awk的速度 !果然很霸道,处理日志的时候,我也很喜欢用awk,只是学习的难度有点大,不像别的shell组件那么灵活简单。

使用Python构建基于Hadoop的MapReduce日志分析平台

推荐阅读:

Python 的详细介绍:请点这里
Python 的下载地址:请点这里

相关推荐