目录
本地运行模式:Eclipse 开发环境下本地运行,好处是方便调试和测试
1、MapReduce 入门
1.1、什么是 MapReduce
首先让我们来重温一下 hadoop 的四大组件:
HDFS:分布式存储系统
MapReduce:分布式计算系统
YARN:hadoop 的资源调度系统
Common:以上三大组件的底层支撑组件,主要提供基础工具包和 RPC 框架等
MapReduce 是一个分布式运算程序的编程框架,是用户开发“基于 Hadoop 的数据分析应用” 的核心框架
MapReduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布 式运算程序,并发运行在一个 Hadoop 集群上
1.2、为什么需要 MapReduce
为什么需要 MapReduce?
1、海量数据在单机上处理因为硬件资源限制,无法胜任
2、而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度
3、引入 MapReduce 框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将 分布式计算中的复杂性交由框架来处理
设想一个海量数据场景下的数据计算需求:
单机版:
磁盘受限,内存受限,计算能力受限
分布式版:
1、 数据存储的问题,hadoop 提供了 hdfs 解决了数据存储这个问题
2、 运算逻辑至少要分为两个阶段,先并发计算(map),然后汇总(reduce)结果
3、 这两个阶段的计算如何启动?如何协调?
4、 运算程序到底怎么执行?数据找程序还是程序找数据?
5、 如何分配两个阶段的多个运算任务?
6、 如何管理任务的执行过程中间状态,如何容错?
7、 如何监控?
8、 出错如何处理?抛异常?重试?
可见在程序由单机版扩成分布式版时,会引入大量的复杂工作。为了提高开发效率,可以将 分布式程序中的公共功能封装成框架,让开发人员可以将精力集中于业务逻辑。
Hadoop 当中的 MapReduce 就是这样的一个分布式程序运算框架,它把大量分布式程序都会 涉及的到的内容都封装进了,让用户只用专注自己的业务逻辑代码的开发。它对应以上问题 的整体结构如下:
MRAppMaster:MapReduce Application Master,分配任务,协调任务的运行
MapTask:阶段并发任,负责 mapper 阶段的任务处理 YARNChild
ReduceTask:阶段汇总任务,负责 reducer 阶段的任务处理 YARNChild
1.3、MapReduce 程序运行演示
在 MapReduce 组件里,官方给我们提供了一些样例程序,其中非常有名的就是 wordcount 和 pi 程序。这些 MapReduce 程序的代码都在 hadoop-mapreduce-examples-2.6.4.jar 包里,这 个 jar 包在 hadoop 安装目录下的/share/hadoop/mapreduce/目录里
下面我们使用 hadoop 命令来试跑例子程序,看看运行效果 先看 MapReduce 程序求 pi 的程序:
命令:
[hadoop@hadoop03 mapreduce]$ pwd
/home/hadoop/apps/hadoop-2.6.4/share/hadoop/mapreduce
[hadoop@hadoop03 mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.6.4.jar pi 5 5
执行过程和结果展示:
再来看 wordcount 程序:
那除了这两个程序以外,还有没有官方提供的其他程序呢,还有就是它们的源码在哪里呢? 我们打开 mapreduce 的源码工程,里面有一个 hadoop-mapreduce-project 项目:
里面有一个例子程序的子项目:hadoop-mapreduce-examples
找到该目录: