分享

mapreduce分析日志所隐藏的规律

pig2 发表于 2014-8-3 14:38:14 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 5 16090
本帖最后由 pig2 于 2014-8-3 14:40 编辑

我们写mapreduce的过程中,会不会产生这些疑问。比如:
我们在MapReduce初级案例(3):使用MapReduce实现平均成绩,我们会特意,换行,让mapreduce能够识别。


  1)math:
  1. 张三    88
  2. 李四    99
  3. 王五    66
  4. 赵六    77
复制代码

2)chinese :
  1. 张三    78
  2. 李四    89
  3. 王五    96
  4. 赵六    67
复制代码
那么为什么需要换行。因为mapreduce默认是以行为处理单位。
那么假如我们的日志或则待处理的文件,不是以行为单位,那么会产生什么问题。


183.131.11.98 - - [01/Aug/2014:01:01:05 +0800] "GET /thread-5981-1-1.html HTTP/1.1" 200 18152 "http://www.baidu.com/s?wd=cocos2dx%203.2%20wp8%E6%94%AF%E6%8C%81&pn=30&oq=cocos2dx%203.2%20wp8%E6%94%AF%E6%8C%81&tn=28035039_2_pg&ie=utf-8&rsv_page=1" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 UBrowser/1.0.349.1252 Safari/537.36"
183.131.11.98 - - [01/Aug/2014:01:01:06 +0800] "GET /data/cache/style_1_common.css?A4A HTTP/1.1" 200 15402 "http://www.aboutyun.com/thread-5981-1-1.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 UBrowser/1.0.349.1252 Safari/537.36"
183.131.11.98 - - [01/Aug/2014:01:01:06 +0800] "GET /data/cache/style_1_forum_viewthread.css?A4A HTTP/1.1"

biaoti.png


像上面日志,我们能否处理,答案是不可以的。

原因:
因为mapreduce中map函数所接受的参数,是其中的一行,这一行是哪里来的,是由mapreduce框架来处理的。这是很多迷惑的地方。

总结:
对于日志记录如果不是以行数来记录一条数据的话,那么mapreduce就不能处理。
而这里的一条记录的定义包含如下信息:
183.131.11.98 - - [01/Aug/2014:01:01:05 +0800] "GET /thread-5981-1-1.html HTTP/1.1" 200 18152 "http://www.baidu.com/s?wd=cocos2dx%203.2%20wp8%E6%94%AF%E6%8C%81&pn=30&oq=cocos2dx%203.2%20wp8%E6%94%AF%E6%8C%81&tn=28035039_2_pg&ie=utf-8&rsv_page=1" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 UBrowser/1.0.349.1252 Safari/537.36"


也就是说,在一行中如果日志记录了两条数据,那么map就会收到两条记录,但是我们在处理的过程中,都是按照一条来处理的,所以就会产生错误。



linu.png


我们在看上面日志
上面的日志可以的,为什么。因为这里的一条记录放在了一行。
可是你会反驳说,这明明是三行,这有点像咱们的文本框,如果你去掉换行,那么这条信息:
183.131.11.98 - - [01/Aug/2014:01:01:05 +0800] "GET /thread-5981-1-1.html HTTP/1.1" 200 18152 "http://www.baidu.com/s?wd=cocos2dx%203.2%20wp8%E6%94%AF%E6%8C%81&pn=30&oq=cocos2dx%203.2%20wp8%E6%94%AF%E6%8C%81&tn=28035039_2_pg&ie=utf-8&rsv_page=1" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 UBrowser/1.0.349.1252 Safari/537.36"

如上,则是直接显示在一行。


现在留下一个问题?
对于一条记录放在了两行或则多行,mapreduce能否处理?怎么样mapreduce才能处理。
进一步:
Apache日志一条记录是否都放在一行?





已有(5)人评论

跳转到指定楼层
wubaozhou 发表于 2014-12-31 10:27:42
回复

使用道具 举报

sprite101 发表于 2015-5-8 09:06:07
回复

使用道具 举报

水电费12 发表于 2015-12-9 20:16:14
求解,怎么解决这个问题呀?
回复

使用道具 举报

pig2 发表于 2015-12-9 20:48:04
水电费12 发表于 2015-12-9 20:16
求解,怎么解决这个问题呀?

Hadoop MapReduce中如何处理跨行Block和inputSplit
http://www.aboutyun.com/thread-7704-1-1.html



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条