pig2 发表于 2014-8-3 14:38:14

mapreduce分析日志所隐藏的规律

本帖最后由 pig2 于 2014-8-3 14:40 编辑


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


1)math:
张三    88

李四    99

王五    66

赵六    77
2)chinese :
张三    78

李四    89

王五    96

赵六    67那么为什么需要换行。因为mapreduce默认是以行为处理单位。
那么假如我们的日志或则待处理的文件,不是以行为单位,那么会产生什么问题。


183.131.11.98 - - "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 - - "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 - - "GET /data/cache/style_1_forum_viewthread.css?A4A HTTP/1.1"



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

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

总结:
对于日志记录如果不是以行数来记录一条数据的话,那么mapreduce就不能处理。
而这里的一条记录的定义包含如下信息:
183.131.11.98 - - "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就会收到两条记录,但是我们在处理的过程中,都是按照一条来处理的,所以就会产生错误。

static/image/hrline/2.gif




我们在看上面日志
上面的日志可以的,为什么。因为这里的一条记录放在了一行。
可是你会反驳说,这明明是三行,这有点像咱们的文本框,如果你去掉换行,那么这条信息:
183.131.11.98 - - "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日志一条记录是否都放在一行?





wubaozhou 发表于 2014-12-31 10:27:42

{:soso_e181:}

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

迷惑。。。{:soso_e179:}

水电费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



yuntian0215 发表于 2017-7-13 16:54:18

给你个赞
页: [1]
查看完整版本: mapreduce分析日志所隐藏的规律