前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据之认识MapReduce

大数据之认识MapReduce

作者头像
袁新栋-jeff.yuan
发布2021-12-07 17:38:59
1980
发布2021-12-07 17:38:59
举报

认识MapReduce

什么是MapReduce?
  1. MapReduce 既是一个编程模型,又是一个计算框架。
  2. 模型是对事物共性的抽象,编程模型就是对编程的共性的抽象, 最重要的共性就是:程序设计时,代码的抽象方式、组织方式或复用方式。大概是了解了 可以理解为MapReduce 就是一套抽象好的两个函数,一个是Map ,一个是Reduce。我们可以再这两个函数里面填充计算的业务逻辑。
  3. 将MapReduce分为Map和Reduce,Map就是将数据进行切分,Reduce就是将数据进行归类。MapReduce计算框架进行分类聚合,Reduce将分类聚合好的数据进行处理计算。
举个列子 统计海量词汇中重复的单词

我们看下大佬给的计算流程图:

在这里插入图片描述
在这里插入图片描述

是不是很清楚了,有无数个数据页面,MapReduce框架将这些数据读取为一行一行的(其实这个读取为一行行的,对于一个通用的框架他怎么做能知道是读取为一行一行的呢?看样子也是自定义的),我们定义的Map函数分别放入Hash表中(其实 这块就可以放我们各种的抽象好的算法逻辑,比如树了等等)然后MapReudce框架将这些数据进行聚合起来,reduce对聚合好的数据进行

计算处理reduce输出计算好的数据,也就是<word,count>。

大概是理解了MapReduce,由于还没有真正的使用Mapreduce所以还不能有真正自己的见解。

通过上面的列子我们约就是映射到我们开头所说的,MapReduce 既是一个编程模型,又是一个计算框架。再结合例子:编程模型就是Reduce 和 Map 这两个通用函数。计算框架就是MapReduce的计算框架,我们的原始数据块需要MapReduce框架处理,这块就可以理解为MapReduce是一个框架(这块太抽象了,我在勉为其难的解释)。

Mapreduce的作用

我们只要遵循 MapReduce 编程模型编写业务处理逻辑代码(编写Map和Reduce里面的函数),就可以运行在 Hadoop 分布式集群上,无需关心分布式计算是如何完成的。也就是说,我们只需要关心业务逻辑,不用关心系统调用与运行环境,这和我们目前的主流开发方式是一致的。

其他人对MapReduce的理解
  • 其实,MapReduce中的map在做select/scan,shuffle就是在做groupby,reduce在做aggregation。另外,reduce也用于实现join。
  • MapReduce 既是一个编程模型,又是一个计算框架。也就是说,开发人员必须基于 MapReduce 编程模型进行编程开发,然后将程序通过 MapReduce 计算框架分发到 Hadoop 集群中运行。我们先看一下作为编程模型的 MapReduce。
  • MapReduce 的编程模型,类似于函数式编程,按照这个模型写出的代码运行在hadoop集群,可以实现分布式计算的效果

大佬的思考: 模型是人们对一类事物的概括与抽象,可以帮助我们更好地理解事物的本质,更方便地解决问题。比如,数学公式是我们对物理与数学规律的抽象,地图和沙盘是我们对地理空间的抽象,软件架构图是软件工程师对软件系统的抽象。通过抽象,我们更容易把握事物的内在规律,而不是被纷繁复杂的事物表象所迷惑,更进一步深刻地认识这个世界。通过抽象,伽利略发现力是改变物体运动的原因,而不是使物体运动的原因,为全人类打开了现代科学的大门。这些年,我自己认识了很多优秀的人,他们各有所长、各有特点,但是无一例外都有个共同的特征,就是对事物的洞察力。他们能够穿透事物的层层迷雾,直指问题的核心和要害,不会犹豫和迷茫,轻松出手就搞定了其他人看起来无比艰难的事情。有时候光是看他们做事就能感受到一种美感,让人意醉神迷。这种洞察力就是来源于他们对事物的抽象能力,虽然我不知道这种能力缘何而来,但是见识了这种能力以后,我也非常渴望拥有对事物的抽象能力。所以在遇到问题的时候,我就会停下来思考:这个问题为什么会出现,它揭示出来背后的规律是什么,我应该如何做。甚至有时候会把这些优秀的人带入进思考:如果是戴老师、如果是潘大侠,他会如何看待、如何解决这个问题。通过这种不断地训练,虽然和那些最优秀的人相比还是有巨大的差距,但是仍然能够感受到自己的进步,这些小小的进步也会让自己产生大大的快乐,一种不荒废光阴、没有虚度此生的感觉。我希望你也能够不断训练自己,遇到问题的时候,停下来思考一下:这些现象背后的规律是什么。有时候并不需要多么艰深的思考,仅仅就是停一下,就会让你察觉到以前不曾注意到的一些情况,进而发现事物的深层规律。这就是洞察力。

我的思考: 能把一个复杂东西,进行抽象整理为一个通用的方法,函数或者显示的一个工具,其原因本质是首先你对这个事物是真的熟悉。能对其进行分层和归类(可以联想我们对业务逻辑的分层,包括DDD思想中的领域模型的创建,也就是一种抽象),我个人认为一切事物都有相同之处,这个相同之处也许在一个事物的最底层。也就想像我们java中的Object 在java中Object 就是一切事物的抽像。(瞎扯:其实我一直都想给Object对象中加一个函数叫verify()自我检验,虽然说只有有思想的事物才能自我校验,但是代码是人写的,我们赋予给他思想,可以让他自己校验,还有一方面是 我们终会有很多的校验逻辑,很烦,其实真确来说是再DTO有一个base inteface 又一个verify方法所有DTOresult 实现它都得拿到他的第一件事就是verify)。所以个人认为,提高抽象能力,也就是不断去了解和熟悉,提高对事物的认知,然后总结和思考其中的相似之处。最后在某个层面进行抽象。总而言之,一切的来源都是思考,深度思考。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-05-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 认识MapReduce
    • 什么是MapReduce?
      • 举个列子 统计海量词汇中重复的单词
        • Mapreduce的作用
          • 其他人对MapReduce的理解
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档