Home > Database > Mysql Tutorial > Hadoop自学笔记(三)MapReduce简介

Hadoop自学笔记(三)MapReduce简介

WBOY
Release: 2016-06-07 15:55:43
Original
1064 people have browsed it

1. MapReduce Architecture MapReduce是一套可编程的框架,大部分MapReduce的工作都可以用Pig或者Hive完成,但是还是要了解MapReduce本身是如何工作的,因为这才是Hadoop的核心,并且可以为以后优化和自己写做准备。 Job Client, 就是用户 Job Tracker和Task

1. MapReduce Architecture

MapReduce是一套可编程的框架,大部分MapReduce的工作都可以用Pig或者Hive完成,但是还是要了解MapReduce本身是如何工作的,因为这才是Hadoop的核心,并且可以为以后优化和自己写做准备。

Job Client, 就是用户

Job Tracker和Task Tracker也是一种Master - Slave构建

工作流程(MapReduce Pipeline)

Job Client提交了MapReduce的程序(比如jar包中的二进制文件),所需要的数据,结果输出位置,提交给Job Tracker. Job Tracker会首先询问Name Node, 所需要的数据都在哪些block里面,然后就近选择一个Task Tracker(离这些所需数据最近的一个task tracker,可能是在同一个Node上或者同一个Rack上或者不同rack上),把这个任务发送给该Task Tracker, Task Tracker来真正执行该任务。Task Tracker内部有Task Slots来真正执行这些任务。如果执行失败了,Task Tracker就好汇报给Job Tracker, Job Tracker就再分配给别的Task Tracker来执行。Task Tracker在执行过程中要不断的向Job Tracker汇报。最后Task Tracker执行完成后,汇报给Job Tracker,Job Tracker就更新任务状态为成功。

注意,当用户提交一个MapReduce任务的时候,不仅仅同时把任务提交给Job Tracker,同时还会拷贝一份到HDFS的一个公共位置(图中的咖啡位置),因为传递代码和命令相对要容易一些,然后Task Tracker就可以很方便的得到这些代码。

具体步骤就是图中的7步。

\

2. MapReduce Internals

Split阶段:根据Input Format,把输入数据分割成小部分,该阶段与Map任务同时运行,分割后就放到不同的Mapper里面。

Input Format: 决定了数据如何被分割放入Mapper。比如Log, 数据库,二进制码,等。

Map阶段:把分割后传入的splits转化成一些key-value对,如何转化取决于用户代码怎么写的。

Shuffle & Sort阶段:把Map阶段得到的数据归类,然后送给Reducers。

Reduce阶段:把送入的Map数据(Key, Value)按照用户的代码进行整合处理。

Output Format: Reduce阶段处理完后,结果按照此格式放入HDFS的输出目录。

Imperative Programming Paradigm: 把计算当做一系列改变程序状态的过程。也就是程序化编程。更加关注对象和状态。

Functional Programming Paradigm: 大致就是函数化编程,把一系列计算作为一个数学函数。Hadoop使用的是这种编程范式。有输入,有输出;没有对象没有状态。 

为了优化起见,Hadoop还添加了更多的一个接口,combine阶段,见下图。主要是在输送到Shuffle/sort阶段前,现在本地进行一次小的Reduce计算。这样可以省很多带宽(还记得job的代码放入一个公共区域了吗)

\

上面的整个过程看上去可能不那么直观,但是这是Hadoop最难理解的部分了。理解了这个流程(Hadoop Pipeline),就更容易理解以后的内容了。

3. MapReduce Example

举例子来说明,在实际的机器操作中Hadoop如何完成上述任务。

在Windows环境下安装了一个hyperV软件,里面有四个Hadoop节点,每个Hadoop节点都是一个Ubuntu环境。

\

可以看到上面有一个Name Node,还有三个Data Node。

首先,连接上Name Node,并且打开一个Data Node节点。进入Name Node的Ubuntu系统中,打开一个终端,输入jps,可以看到jvm里面正在运行的东西。

\

在Data Node机器中运行同样命令,可以看到里面运行着DataNode, Jps, TaskTracker三个内容。

首先进入Data Node的机器里面,到根目录下面创建一个文件,叫words.txt,文件内容就是上图中要分析的一些词。

\

第二步,把这个Words.txt文件放入HDFS中。

首先

hadoop/bin/hadoop fs -ls

查看目前HDFS中的文件

然后新建一个文件夹

Hadoop/bin/hadoop fs -mkdir /data

\

我们可以使用浏览器来看看HDFS中的文件系统

浏览器中输入hnname:50070,打开Web UI

\

可以再Live Nodes里面看到刚刚新建的data文件夹,执行

hadoop/bin/hadoop fs -copyFromLocal words.txt /data

然后words.txt就拷贝到/data文件夹下了,可以使用Web UI来验证。

第三步,执行MapReduce 任务。这个任务是统计单词频率,这个任务已经由现成的jar包写好了,在hadoop/bin/目录下,hadoop-examples-1.2.0.jar. 这个文件里面有很多很多写好的MapReduce任务。

\

执行命令:

Hadoop/bin/hadoop jar hadoop/hadoop*examples.jar wordcount /data/words.txt /data/results

先指定jar包,再指定程序名wordcount, 再指定输入数据/data/words.txt 最后是输出目录/data/results, 没有目录会创建一个。

\

执行完成后,可以通过Web UI来看执行结果。

\

我擦,原来的图片太多了发不了,不得不说删掉几张。。。。

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template