文档章节

Hadoop 大数据实战手册学习-3

ZZK23
 ZZK23
发布于 2017/04/24 18:17
字数 602
阅读 23
收藏 0

Mapreduce 计算框架

如果将Hadoop比做一头大象,那么MapReduce就是那头大象的电脑。MapReduce是 Hadoop 核心编程模型。

在 Hadoop 中,数据处理核心就是 MapReduce 程序设计模型。

本章内容:

1) MapReduce 编程模型
2) MapReduce 执行流程
3) MapReduce 数据本地化
4) MapReduce 工作原理
5) MapReduce 错误处理机制

1. MapReduce 编程模型

Map和Reduce的概念是从函数式变成语言中借来的,整个MapReduce计算过程分为 Map 阶段和 Reduce阶段, 也称为映射和缩减阶段, 这两个独立的阶段实际上是两个独立的过程,即 Map 过程和 Reduce 过程,在 Map 中进行数据的读取和预处理,之后将预处理的结果发送到 Reduce 中进行合并。

我们通过一个代码案例,让大家快速熟悉如何通过代码,快速实现一个我们自己的MapReduce。

案例:分布式计算出一篇文章中的各个单词出现的次数, WordCount。

1) 创建 map.py 文件,写入以下代码:

#!/usr/bin/env python
import sys
word_list = []
for line in sys.stdin:
	word_list = line.strip().split(' ')
	if len(word_list) <= 0:
		continue
		for word in word_list:
			w = word.strip()
			if len(w) <= 0:
				continue
			print '\t'.join([w, "1"])

该代码主要工作是从文章数据源逐行读取,文章中的单词之间以空格分割,word_list = line.strip().split(' ')

这块代码是将当前读取的一整行数据按照空格分割,将分割后的结果存入 word_list 数组中,

然后通过 for word in word_list 遍历数组,取出每个单词,后面追加“1” 标识当前 word 出现 1 次。

 

#!/usr/bin/env python
import sys
cur_word = None
sum_of_word = 0

for line in sys.stdin:
	ss = line.strip().split('\t')
	if len(ss) != 2:
		continue
	word = ss[0].strip()
	count = ss[1].strip()

	if cur_word == None:
		cur_word = word
	if cur_word != word:
		print '\t'.join([cur_word, str(sum_of_word)])

	sum_of_word = 0
	cur_word = word
	sum_of_word += int(count)

	print '\t'.join([cur_word, str(sum_of_word)])
	sum_of_word = 0

该代码针对 map 阶段的数组进行汇总处理,map 到 reduce 过程中默认存在 shufflepartition 分组机制,

保证同一个 word 的记录,会连续传输到 reduce 中, 所以在 reduce阶段只需要对连续相同的 word 后面

的计数进行累加求和即可。

本地模拟测试脚本

cat big.txt | python map.py | sort -k1 | python reduce.py

             

2. MapReduce 执行流程

上面的例子属于 MapReduce 计算框架的一般流程,经过整理总结:

 

 

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

ZZK23
粉丝 1
博文 158
码字总数 176435
作品 0
广州
程序员
私信 提问
【电子书】Hadoop实战手册 (样章第一章)

Hadoop实战手册 [美] Jonathan R. Owens,Jon Lentz,Brian Femiano 著; 傅杰,赵磊,卢学裕 译 内容简介   这是一本Hadoop实用手册,主要针对实际问题给出相应的解决方案。《Hadoop实战手...

dwf07223
2018/06/28
0
0
3月,献给程序员们的技术书

北京的雾霾刚刚过去,小编便开始埋头做三月书讯了。每天关注人邮IT书坊,分享微信内容,都可能会有惊喜降临在你的头上。 本期特别推荐 经典算法谜题的合集 Google、Facebook等一流IT公司算法...

生气的散人
2014/03/05
262
0
开源力量公开课第二十四期-为何Hadoop是分布式大数据处理的未来&如何掌握Hadoop?

详情:http://www.osforce.cn/?p=1216 课程题目:开源力量公开课第二十四期-为何Hadoop是分布式大数据处理的未来&如何掌握Hadoop? 开课时间:2013年07月30日 18:30 - 21:30 现场或线上参课:...

程开源
2013/07/19
194
2
开源力量公开课第二十四期-为何Hadoop是分布式大数据处理的未来&如何掌握Hadoop?

详情:http://www.osforce.cn/?p=1216 课程题目:开源力量公开课第二十四期-为何Hadoop是分布式大数据处理的未来&如何掌握Hadoop? 开课时间:2013年07月30日 18:30 - 21:30 现场或线上参课:...

程开源
2013/07/19
5
0
光环大数据CLoudera认证&实战课程说明会

7月23日(周六),光环国际将在北京举办一场HadoopSpark大数据开发实战技术私享会,一次参会,全面了解大数据生态体系及如何学习掌握大数据的开发技术,特此邀请你的到来! Cloudera 大数据 国际...

简直是天才
2016/07/21
32
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部