初识MapReduce
1.1MapReduce计算模型介绍
1.1.1理解MapReduce思想
MapReduce的思想核心是“ 分而治之”。
所谓“分而治之”就是把一个复杂的问题按一定的“分解”方法分为规模较小的若干部分,然后逐个解决,分别找出各部分的解,再把把各部分的解组成整个问题的解。
概况起来,MapReduce所包含的思想分为两步:
Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。
Reduce负责“合”,即对map阶段的结果进行全局汇总
1.1.2MapReduce设计构思
MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上。
MapReduce构思体现在如下的三个方面:
如何对付大数据处理:分而治之
对相互间不具有计算依赖关系的大数据,实现并行最自然的办法就是采取分而治之的策略。并行计算的第一个重要问题是如何划分计算任务或者计算数据以便对划分的子任务或数据块同时进行计算。不可分拆的计算任务或相互间有依赖关系的数据无法进行并行计算!
构建抽象模型:Map和Reduce
MapReduce借鉴了函数式语言中的思想,用Map和Reduce两个函数提供了高层的并行编程抽象模型。
Map: 对一组数据元素进行某种重复式的处理;
Reduce: 对Map的中间结果进行某种进一步的结果整理。
MapReduce中定义了如下的Map和Reduce两个抽象的编程接口,由用户去编程实现:
map: (k1; v1) → [(k2; v2)]
reduce: (k2; [v2]) → [(k3; v3)]
Map和Reduce为程序员提供了一个清晰的操作接口抽象描述。通过以上两个编程接口,大家可以看出MapReduce处理的数据类型是<key,value>键值对。
统一构架,隐藏系统层细节
如何提供统一的计算框架,如果没有统一封装底层细节,那么程序员则需要考虑诸如数据存储、划分、分发、结果收集、错误恢复等诸多细节;为此,MapReduce设计并提供了统一的计算框架,为程序员隐藏了绝大多数系统层面的处理细节。
1.2单词词频统计WordCount
![](https://i-blog.csdnimg.cn/blog_migrate/3b71c17bf6084126a8ed1cb2b624c1f5.png)
需求:在一堆给定的文本文件中统计输出每一个单词出现的总次数
node01 服务器执行以下命令,准备数,数据格式准备如下:
cd /export/servers
vim wordcount.txt
#添加以下内容:
hello hello
world world
hadoop hadoop
hello world
hello flume
hadoop hive
hive kafka
flume storm
hive oozie
将数据文件上传到 hdfs 上面去
hdfs dfs -mkdir /wordcount/
hdfs dfs -put wordcount.txt /wordcount/
#准备好之后,执行官方MapReduce实例,对上述文件进行单词次数统计
第一个参数:wordcount表示执行单词统计任务;
第二个参数:指定输入文件的路径;
第三个参数:指定输出结果的路径(该路径不能已存在)
MapReduce 程序运行模式
2.1 本地运行模式
1. mapreduce 程序是被提交给 LocalJobRunner 在本地以单进程的形式运行
2. 而处理的数据及输出结果可以在本地文件系统,也可以在 hdfs 上
3. 怎样实现本地运行?写一个程序,不要带集群的配置文件本质是程序的 conf 中是否
有 mapreduce.framework.name=local 以及
yarn.resourcemanager.hostname=local 参数
4. 本地模式非常便于进行业务逻辑的 debug,只要在 idea 中打断点即可
2.2 集群运行模式
1. 将 mapreduce 程序提交给 yarn 集群,分发到很多的节点上并发执行
2. 处理的数据和输出结果应该位于 hdfs 文件系统
3. 提交集群的实现步骤:
将程序打成 JAR 包,然后在集群的任意一个节点上用 hadoop 命令启动
yarn jar hadoop_hdfs_operate-1.0-SNAPSHOT.jar
cn.itcast.hdfs.demo1.JobMain
3. MapReduce基本原理
3.1 整体执行流程图
![](https://i-blog.csdnimg.cn/blog_migrate/7406751cc7ace456791a088cb63297b8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c4a35ca98a5784433610736ac2757b03.png)
3.2 Map阶段执行流程
![](https://i-blog.csdnimg.cn/blog_migrate/cc1881eb57cfd58c63227d3ea481b750.png)