博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从零开始学Hadoop——浅析MapReduce(一)
阅读量:4262 次
发布时间:2019-05-26

本文共 1619 字,大约阅读时间需要 5 分钟。

      之前,我们说过Hadoop的两个核心为HDFS和MapReduce,既然我们已经学习了Hadoop的HDFS,那么我们就来看看MapReduce是什么。当然,我们学习的顺序还是先看看基本概念,再研究一下原理,最后做一些练习。

一、是什么

1、概念理解

      Hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。

2、Map(映射)

      “Map”:主结点读入输入数据,把它分成可以用相同方法解决的小数据块(这里是一个分而治之的思想),然后把这些小数据块分发到不同的工作节点上(worder nodes)上,每一个工作节点(worder node)循环做同样的事,这就行成了一个树行结构(分布式计算中的很多模型都和图论有关,pageRank也是),而每一个叶子节点有来处理每一个具体的小数据块,再把这些处理结果返回给父节点。

3、Reduce(归约)

      “Reduce”:主结节得到所有子节点的处理结果,然后把所有结果组合并且返回到输出。

4、个人理解

      简单的来讲,map就是分,reduce就是合。怎么理解呢?我们来看个例子。

      我们将100吨砖,从山东运到北京,如果我们用一辆能装1吨的大卡车来运,一天跑一个来回,那么我们需要100天,可是如果我们用10辆这样的车来做同样的事情,那么我们10天就可以完成了。虽然在现实生活中,我们增加了车费等一系列支出,可能不太划算,但是对于计算机来说,我们的成本是相当低的。所以在迎接大数据的到来时,MapReduce将大大提高的计算的速度,特别方便。

二、原理解析

1、图解细说

这里写图片描述

(1).客户端提交一个mr的jar包给JobClient(提交方式:hadoop jar ...)
(2).JobClient通过RPC和JobTracker进行通信,返回一个存放jar包的地址(HDFS)和jobId
(3).client将jar包写入到HDFS当中(path = hdfs上的地址 + jobId)
(4).开始提交任务(任务的描述信息,不是jar, 包括jobid,jar存放的位置,配置信息等等)
(5).JobTracker进行初始化任务(放入调度器)
(6).读取HDFS上的要处理的文件,开始计算输入分片,每一个分片对应一个MapperTask
(7).TaskTracker通过心跳机制领取任务(任务的描述信息)
(8).下载所需的jar,配置文件等
(9).TaskTracker启动一个java child子进程,用来执行具体的任务(MapperTask或ReducerTask)
(10).将结果写入到HDFS当中

经过自己的理解后,自己又画了一张运行图

这里写图片描述

2、详细流程

这里写图片描述

  • map任务处理
读取输入文件内容,解析成key、value对。对输入文件的每一行,解析成key、value对。每一个键值对调用一次map函数。
写自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
对输出的key、value进行分区。
对不同分区的数据,按照key进行排序、分组。相同key的value放到一个集合中。
(可选)分组后的数据进行归约。
  • reduce任务处理
对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
对多个map任务的输出进行合并、排序。写reduce函数自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
把reduce的输出保存到文件中。

总结:

      虽然之前学到的HDFS与今天的MapReduce是两个完全不一样的东西,但是通过今天的学习,我们知道了两者是如何协同工作的,这样对我们以后的实战是非常有帮助的。下次我们将通过实例,来深层解析MapReduce的运行机制,请大家继续关注。

你可能感兴趣的文章
linux网络协议栈(五)网络层 (1)L2与L3
查看>>
linux网络协议栈(五)网络层 (2)路由基本原理
查看>>
linux网络协议栈(五)网络层 (3)路由缓存表
查看>>
linux网络协议栈(五)网络层 (4)路由表
查看>>
linux网络协议栈(五)网络层 (5)策略路由
查看>>
linux网络协议栈(六)传输层 (1)传输层基本框架
查看>>
linux网络协议栈(六)传输层 (2)UDP协议 1)创建和bind
查看>>
linux网络协议栈(六)传输层 (2)UDP协议 2)connect
查看>>
linux网络协议栈(六)传输层 (3)UDP协议 3)报文发送 send/sendto/sendmsg
查看>>
linux网络协议栈(六)传输层 (3)UDP协议 4)报文接收 recv/recvfrom/recvmsg
查看>>
linux网络协议栈(六)传输层 (3)UDP协议 5)传输层框架小节
查看>>
linux的线程(posix thread)
查看>>
多路复用之epoll
查看>>
ET模式下epoll编程需要注意的问题
查看>>
linux的信号(signal)
查看>>
Nagle算法与TCP_NODELAY和TCP_CORK
查看>>
netstat常用命令
查看>>
linux内核TCP相关参数解释
查看>>
HTTP协议的详解
查看>>
HTTP快速入门
查看>>