如果将">流量比较大的日志直接写入Hadoop的话,对Namenode无疑会负载过大,因此入库前合并,可以把各个节点的日志凑并成一个文件写入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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #!/usr/bin/env python """A more advanced Mapper, using Python iterators and generators.""" import
时间: 2024-11-10 01:17:46