一、Hadoop 诞生的传奇故事


(上图是 Doug Cutting,hadoop 之父)

1985年,Cutting 毕业于美国斯坦福大学。

Cutting 的第一份工作是在 Xerox 做实习生,为激光扫描仪上的操作系统开发屏幕保护程序,这也是他最早的“平台”级的作品。

Cutting 却不满足于此,于是他开始踏入搜索领域,让搜索技术可以为更多人所用。于是1997年底,他用 java 开发出了 Lucene,一个非常伟大的项目。

2004年,Cutting 和同为程序员出身的 Mike Cafarella 决定开发一款可以代替当时的主流搜索产品的开源搜索引擎,这个项目被命名为 Nutch。

刚好 2004 年 Google 发布了大数据分析、MapReduce 算法的论文,于是 Doug Cutting 利用 Google 公开的技术,扩充他已经开发出来的 Lucene 搜索技术,进而打造出了 Hadoop。

二、MapReduce 编程模型

其实在 Hadoop 诞生之前,其实就已经有了分布式计算,只是那个时候的分布式计算都是专用的系统,只能专门处理某一类计算问题,比如大规模数据的排序,有很多的局限性。

而 Hadoop 的出现,使大数据计算通用编程成为可能,我们只需要遵循 MapReduce 编程模型编写业务处理代码,就可以运行在 hadoop 集群上,无需关系分布式计算内部是如何处理的。

但其实 MapReduce 编程模型并不是 Hadoop 原创,甚至也不是 Google 原创,但是 Google 和 Hadoop 创造性地将 MapReduce 编程模型用到大数据计算上,立刻产生了神奇的效果。

看似复杂的各种各样的机器学习、数据挖掘、SQL 处理等大数据计算变得简单清晰起来。

MapReduce 是一种非常简单的模型。

简单在于其编程模型只包含 Map 和 Reduce 两个过程,map 的主要输入是一对 <Key, Value> 值,经过 map 计算后输出一对 <Key, Value> 值;

然后将相同 Key 合并,形成 <Key, Value 集合 >;

再将这个 <Key, Value 集合 > 输入 reduce,经过计算输出零个或多个 <Key, Value> 对。

MapReduce 又是一份非常强大的模型

不管是关系代数运算(SQL 计算),还是矩阵运算(图计算),大数据领域几乎所有的计算需求都可以通过 MapReduce 编程来实现。

三、Hadoop 的 MapReduce 设计目标是什么

hadoop 的 MapReduce 大部分借鉴了 Google 的 MapReduce 的设计思想,包括简化编程接口,提高系统容错性等等。总结一下 MapReduce 的设计目标,主要有四个:

  • 易于编程
    传统的分布式程序设计非常复杂,用户需要关注的细节非常多,比如数据分片、数据传输、节点间通信等,因而设计分布式程序的门槛非常高。
    MapReduce的一个重要设计目标便是简化分布式程序设计。它将与并行程序逻辑无关的设计细节抽象成公共模块并交由系统实现,而用户只需专注于自己的应用程序逻辑实现,这样简化了分布式程序设计且提高了开发效率。

  • 良好的扩展性
    随着业务的发展,积累的数据量(如搜索公司的网页量)会越来越大,当数据量增加到一定程度后,现有集群可能已经无法满足其计算和存储需求,这时候管理员可能期望通过添加机器以达到线性扩展集群能力的目的。

  • 高容错性
    在分布式环境下,随着集群规模的增加,集群中的故障次数(这里的“故障”包括磁盘损坏、机器宕机、节点间通信失败等硬件故障和用户程序bug产生的软件故障)会显著增加,进而导致任务失败和数据丢失的可能性增加,为避免这些问题,MapReduce通过计算迁移或者数据迁移等策略提高集群的可用性与容错性。

  • 高吞吐率
    一个分布式系统通常需要在高吞吐率和低延迟之间做权衡,而MapReduce计算引擎则选择了高吞吐率。MapReduce通过分布式并行技术,能够利用多机资源,一次读取和写入海量数据。

四、核心设计思想是什么

MapReduce模型是对大量分布式处理问题的总结和抽象,它的核心思想是分而治之,即将一个分布式计算过程拆解成两个阶段:

第一阶段:Map阶段,由多个可并行执行的Map Task构成,主要功能是,将待处理数据集按照数据量大小切分成等大的数据分片,每个分片交由一个任务处理。

第二阶段:Reduce阶段,由多个可并行执行的Reduce Task构成,主要功能是,对前一阶段中各任务产生的结果进行规约,得到最终结果。

以一个 wordcount 词频统计来说明

map 函数的计算过程是,将这行文本中的单词提取出来,针对每个单词输出一个 <word, 1> 这样的 <Key, Value> 对。

reduce 函数的计算过程是,将这个集合里的 1 求和,再将单词(word)和这个和(sum)组成一个 <Key, Value>,也就是 <word, sum> 输出。每一个输出就是一个单词和它的词频统计总和。

五、总结

今天介绍了 MapReduce 编程模型,它是一个非常简单而又强大的模型。

简单之处在于它只有两个方法

强大之处在于它几乎可以处理大数据领域所有的计算需求。

更多精彩关注公众号:KK架构师

大数据快速入门(05):MapReduce 编程模型赏析相关推荐

  1. 大数据快速入门(09):永久弄清楚 Hive 分区表和分桶表的区别

    蛋蛋 和 小智 今天又在"打情骂俏",他们今天在谈论分区表和分桶表,走,我们去听听. 这天,蛋蛋去茶水间倒水,他把水杯放在饮水机下面,打开开关,一直盯着墙上的画在看,灵魂仿佛已经飞 ...

  2. 大数据快速入门(03):漫谈数据收集,你的数据值百万

    札记 亲爱的粉丝老爷,好久不见. 这次我为文章增加一个新的栏目,叫"札记",记录一下平时的工作,给冷冰冰的技术文章增加一些温度,给即将到来的冬天暖暖心,大概 200 字左右. 说说 ...

  3. 【小白视角】大数据基础实践(五) MapReduce编程基础操作

    目录 1. MapReduce 简介 1.1 起源 1.2 模型简介 1.3 MRv1体系结构 1.4 YARN 1.4.1 YARN体系结构 1.4.2 YARN工作流程 2. MapReduce ...

  4. 网络智能和大数据公开课Homework3 Map-Reduce编程

    Web Intelligence and Big Data  by Dr. Gautam Shroff 这门课是关于大数据处理,本周是第一次编程作业,要求使用Map-Reduce对文本数据进行统计.使 ...

  5. 大数据快速入门(06):秒懂资源调度框架 YARN

    一.第一代资源管理器为什么会被淘汰掉 我们知道,hadoop 主要是由三部分组成,HDFS (hadoop 分布式文件系统),MapReduce(分布式计算框架),还有一个就是分布式集群资源调度框架 ...

  6. 大数据技术入门:MapReduce(分布式计算框架)

    大家好,我是百思不得小赵. 创作时间:2022 年 7 月 7 日 博客主页:

  7. 大数据从入门到实战 - 第3章 MapReduce基础实战

    大数据从入门到实战 - 第3章 MapReduce基础实战 一.关于此次实践 1.实战简介 2.全部任务 二.实践详解 1.第 1 关:成绩统计 2.第 2 关:文件内容合并去重 3.第 3 关:信息 ...

  8. 大数据-03-Spark入门

    Spark 简介 行业广泛使用Hadoop来分析他们的数据集.原因是Hadoop框架基于一个简单的编程模型(MapReduce).这里,主要关注的是在处理大型数据集时在查询之间的等待时间和运行程序的等 ...

  9. 大数据与Hadoop有什么关系?大数据Hadoop入门简介

    学习着数据科学与大数据技术专业(简称大数据)的我们,对于"大数据"这个词是再熟悉不过了,而每当我们越去了解大数据就越发现有个词也会一直被提及那就是--Hadoop 那Hadoop与 ...

最新文章

  1. fileupload的回调方法_jQuery File Upload文件上传插件使用详解
  2. 白话科普系列——网站靠什么提升加载速度?
  3. mysql日期处理的一些实现
  4. django 1.8 官方文档翻译: 1-2-5 编写你的第一个Django应用,第5部分
  5. mysql存储过程批量建表
  6. [codeup 2132] Repair the Wall
  7. 元胞自动机在交通系统中的应用之二【单车道NaSch元胞自动机模型】
  8. 串口termios函数
  9. 内网服务器软件共享文件,服务器共享文件夹设置软件、局域网共享文件夹加密工具、文件共享服务器软件的选择...
  10. 【Python】使用Selenium实现淘宝抢单
  11. linux下使用LVM合并挂载硬盘以及扩容
  12. VM虚拟机桥接模式的复制物理网络连接状态是什么意思
  13. 聊聊MySQL存储过程
  14. 基于springboot+jsp的服装穿搭信息管理系统
  15. 如何把C盘下用户的中文用户名改成英文用户名
  16. windows10修复引导
  17. 《Spring》第二十一篇 事务底层源码解析
  18. 如何搭建高质量在线网校平台
  19. Python一张足够大的纸,纸质厚度0.5,请问对折多少次,才能到达珠穆朗玛峰的高度。(珠峰最新数据:8844.43)
  20. 80后的风口,80公里的感悟

热门文章

  1. 暴饮暴食 将给你的健康带来灾难
  2. Install NVIDIA Drivers on Fedora 37
  3. 深度学习常用的激活函数以及python实现(Sigmoid、Tanh、ReLU、Softmax、Leaky ReLU、ELU、PReLU、Swish、Squareplus)
  4. BraTS数据集处理详解(附代码详解)
  5. 基于springboot+vue前后端分离的婚礼服装租赁系统
  6. 【软件工程】模块分解之内聚和耦合
  7. JMM~Java Memory Model
  8. Ostu(大津法)二值化图像算法/最佳全局阈值
  9. 关于向已有的excel表单写入数据
  10. 叉积和点积及其应用简介