MapReduce
MapReduce框架分两个阶段
MapReduce原语
MapReduce运行平台YARN
MapReduce运行官方的wordcount小程序
MapReduce框架分两个阶段:
map阶段: 程序MapTask
reduce阶段: 程序ReduceTask
Map阶段:
对maptask读到的一行数据如何处理
Reduce阶段:
对reducetask拿到的一组相同key的kv数据如何处理
从宏观角度可以看出:
split(切片)
MpaReduce原语:
"相同"的key为一组,调用一次reduce方法, 方法内迭代这一组进行计算
输入(格式化k,v)数据集--> map映射成一个中间数据集(k,v)-->reduce
block:文件块
split: 切块
map: 执行maptask的
reduce: 执行reducetask
group(key): 相同k为一组的数据
partition: 分区.相当于有多少个reduce就有多少个partition. parttion和reduce进行绑定的
outputfile: 就是reduce输出的数据会在哪个地方,比如HDFS
block > split
- 1 : 1
- N : 1
- 1 : N
split > map
- 1 : 1
map > reduce
- N : 1
- N : N
- 1 : 1
- 1 : N
group(key) > partition
- 1 : 1
- N : 1
- N : N
- 1 : N ---> 1:N的比例关系违背了MapReduce原语. 不符合。
partition > outputfile
- 1 : 1
MapReduce简单的WordCountde的计算流程
MapReduce运行平台YARN
MapReduce程序应该是在很多机器上并行启动, 而且先执行MapTask,当众多的maptask都处理完自己的数据后, 还需要启动众多的reduce task,
这个过程如果用用户自己手动调度不太现实,
需要一个自动化的调度平台--hadoop中就为MapReduce之类的分布式运行程序开发了一个自动化调度平台--YARN
MapReduce运行官方的wordcount小程序
[root@master mapreduce]# hadoop jar hadoop-mapreduce-examples-2.6.0.jar wordcount /opt/ /shaojun
注意: 1) 执行命令的前提是在HDFS中在/路径下创建一个opt文件。这个文件的内容是随便的东西。比如:
aa
ab
ab
aa
aa
aaa
bbb
aaa
a
aa
bb
dd
dd
ddddd
ddee
eee
eee
dde
dde
asga
ag
ages
asga
- HDFS下不需要创建一个shaojun目录,它会自动该目录,不需要手动指定。
- 使用HDFS命令可以看到/shaojun目录下的文件内容,内容如下:
可以看到wordcount小程序计算的是源文件opt文件的单词出现的次数。以下可以看出单词出现的次数。
[root@master /]# hadoop fs -cat /shaojun/part-r-00000
a 1
aa 4
aaa 2
ab 2
ag 1
ages 1
asga 2
bb 1
bbb 1
dd 2
ddddd 1
dde 2
ddee 1
eee 2
- 登录yarn的web访问界面,可以看出执行该wordcount的相关信息。mapreduce的运行是需要yarn来提供资源和调度管理