mapreduce 编程思想

article/2025/10/16 17:47:03


      MapReduce源于Google一篇论文,它充分借鉴了分而治之的思想,将一个数据处理过程拆分为主要的Map(映射)与Reduce(化简)两步。用户不懂分布式计算框架的内部运行机制,只要能用Map和Reduce的思想描述清楚要处理的问题,即编写map()和reduce( )函数,就能轻松地使问题的计算实现分布式,并在Hadoop上运行。MapReduce的编程具有以下特点。

  • 开发简单: 得益于MapReduce的编程模型,用户可以不用考虑进程间通信、套接字编程,无需非常高深的技巧,只需要实现一些非常简单的逻辑,其他的交由MapReduce计算框架去完成,大大简化了分布式程序的编写难度。
  • 可扩展性强: 同HDFS一样,当集群资源不能满足计算需求时,可以通过增加节点的方式达到线性扩展集群的目的。
  • 容错性强:对于节点故障导致的作业失败,MapReduce计算框架会自动将作业安排到健康节点重新执行,直到任务完成,而这些,对于用户来说都是透明的。

MapReduce的编程思想

Map(映射)与Reduce(化简)来源于LISP和其他函数式编程语言中的古老的映射和化简操作,MapReduce操作数据的最小单位是一个键值对。用户在使用MapReduce编程模型的时候,第一步就需要将数据抽象为键值对的形式,接着map函数会以键值对作为输入,经过map函数的处理,产生一系类新的键值对作为中间结果输出到本地。MapReduce计算框架会自动将这些中间结果数据按照键做聚合处理,并将键相同的数据分发给reduce函数处理(用户可以设置分发规则)。reduce函数以键和对应的值的集合作为输入,经过reduce函数的处理后,产生了另外一系列键值对作为最终输出。

如果用表达式表示,其过程如下式所示 :
{Keyl,Value1}~{Key2, List<Value2>}~{Key3, Value3}
读者可能觉得上面的描述和表达式非常抽象,那么让我们先来看一个例子。有一篮苹果,一些是红苹果,一些是青苹果,每个苹果有一个唯一编号,要解决的问题是统计该篮苹果的数目、红苹果(深色)的个数和青苹果(浅色)的个数。



假设有A, B, C三个人,A获得第一排苹果,B获得第二排苹果,这时,A和B分别统计自己手上的苹果的个数,然后将结果告知C, C将A, B的结果做一次汇总,得到最后结果。对于这个过程,其实用到了MapReduce的思想。我们可以从下一幅图看出端倪。

    A的map函数的输入的格式为键值对appleId-count,比女fl " 11-1”表示appleId为11的苹果个数为1,经过map函数的累和,即将所有appleId的count相加,输出为新的键值对AppleCount-6,此时B也进行同样的操作,由于A和B的map函数输出的键值对的键相同,都为“AppIeCount",所以MapReduce框架会将其都分发到C作为reduce函数的输入,并在reduce函数中完成对键相同的值的累和,并输出最后结果AppleCount-12。如果用表达式表示,即为:
(appleId, count}一>(AppleCount,List<count>}一>{AppleCount,count}
    在这个例子中,就是用MapReduce的思想来完成苹果计数的问题,细心的读者可能发现,这个例子中reduce函数只执行了一次,是否可以执行多次呢,答案是肯定的,下面来看用MapReduce思想解决对红苹果和青苹果分别计数的问题。
    假设有A, B. C, D四个人,A获得第一排苹果,B获得第二排苹果,A将手上的红苹果给C、青苹果给D、B将手上的红苹果给C、青苹果给D。C, D再统计各自手上的结果,得到最后结果,如下图所示。

    A的map函数的输入同上次一样,在map函数中,用color和appleId作为新的键值对重新输出,B也做同样的操作。而A, B的map函数的输出的键值对会因为不同的键被分别分发到C和D执行:educe函数,而真正的计数是由reduce函数完成,并输出最后结果。这里:educe函数一共执行了两次,第一次是处理键为Red的数据.第二次是处理键为Green的数据。如果用表达式表示,即为:
{appleId, count}~{color, List<appleId>}~{color, count}
    要理解MapReduce的编程思想,其核心的一点就是将数据用键值对表示。在现实生活中,很多数据要么本身就为键值对的形式,要么可以用键值对这种方式来表示,例如电话号码和通话记录,文件名和文件存储的数据等,键值对并不是高端数据挖掘独有的数据模型,而是存在于我们身边非常普通的模型。
    利用分而治之的思想,可以将很多复杂的数据分析问题转变为一系列MapReduce作业,利用Hadoop的提供MapReduce计算框架,实现分布式计算,这样就能对海量数据进行复杂的数据分析,这也是MapReduce的意义所在。

本文参考书籍------Hadoop海量数据处理 技术详解与项目实战


转载于:https://www.cnblogs.com/DeepRunning/p/9205993.html


http://chatgpt.dhexx.cn/article/SD3Z4c67.shtml

相关文章

MapReduce编程规范及示例编写

1、Mapper类 用户自定义一个Mapper类继承Hadoop的Mapper类Mapper的输入数据是KV对的形式&#xff08;类型可以自定义&#xff09;Map阶段的业务逻辑定义在map()方法中Mapper的输出数据是KV对的形式&#xff08;类型可以自定义&#xff09; 注意&#xff1a;map()方法是对输入…

MapReduce编程快速入门

MapReduce编程规范 用户编写的程序分成三个部分&#xff1a;Mapper&#xff0c;Reducer&#xff0c;Driver(提交运行mr程序的客户端) Mapper阶段继承Mapper类 &#xff08;1&#xff09;用户自定义的Mapper要继承自己的父类 &#xff08;2&#xff09;Mapper的输入数据是KV对…

java mapreduce编程_Hadoop实验——MapReduce编程(1)

实验目的 通过实验掌握基本的MapReduce编程方法。 掌握用MapReduce解决一些常见的数据处理问题&#xff0c;包括数据去重、数据排序和数据挖掘等。 通过操作MapReduce的实验&#xff0c;模仿实验内容&#xff0c;深入理解MapReduce的过程&#xff0c;熟悉MapReduce程序的编程方…

MapReduce编程初级实践

一、实验目的 通过实验掌握基本的MapReduce编程方法&#xff1b;掌握用MapReduce解决一些常见的数据处理问题&#xff0c;包括数据去重、数据排序和数据挖掘等。 二、 实验平台 操作系统&#xff1a;ubuntu18 Hadoop版本&#xff1a;3.2.2 HBase版本&#xff1a;2.2.2 JDK版…

MapReduce编程练习

目录 编程实现按日期统计访问次数 2.编程实现按访问次数排序 获取成绩表最高分 编译jar包方法 编程实现按日期统计访问次数 (1) 定义输入/输出格式 社交网站用户的访问日期在格式上属于文本格式&#xff0c;访问次数为整型数值格式。其组成的键值对为<访问日…

云计算实验 MapReduce编程

一、实验题目 MapReduce编程 二、实验内容 本实验利用 Hadoop 提供的 Java API 进行编程进行 MapReduce 编程。 三、实验目标 掌握MapReduce编程。 理解MapReduce原理 【实验作业】简单流量统计 有如下这样的日志文件&#xff1a; 13726230503 00-FD-07-A4-72-B8:CMCC 120.19…

Hadoop实验4:MapReduce编程

目录 一. 【实验准备】 1.工作目录 2.打开eclipse并配置工作空间 二、准备工作 1. 新建项目 2. 准备测试数据 3. 添加 MapReduce 编程框架 三、Map过程 四、Reduce过程 五、执行MapReduce任务 六、实验结果 七、准备工作 1. 新建项目 2. 准备relation.dat 3. 添加…

MapReduce 编程规范 (以WordCount为例)

先介绍一下常用的数据序列化类型 在MapReduce编程中&#xff0c;需要进行数据传输&#xff0c;比如将Mapper的结果传入Reducer中进行汇总&#xff0c;媒介就是context,所以需要可以序列化的数据类型。 MapReduce编程规范 Mapper阶段、Reducer阶段&#xff0c;Driver阶段 Map…

MapReduce 编程实战

MapReduce 采用了「分而治之」的思想。在分布式计算中&#xff0c;MapReduce 框架负责处理并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题&#xff0c;把处理过程高度抽象为两个函数&#xff1a;map&#xff0c;把一个任务分解成多个任务…

实验三-MapReduce编程

前提&#xff1a;安装好Hadoop 参考文章&#xff1a; MapReduce编程实践(Hadoop3.1.3)_厦大数据库实验室博客 实验要求 基于MapReduce执行“词频统计”任务。 将提供的A&#xff0c;B&#xff0c;C文件上传到HDFS上&#xff0c;之后编写MapReduce代码并将其部署到hadoop&…

MapReduce编程模型

1.MapReduce简介 MapReduce是一个分布式运算程序的编程框架&#xff0c;核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff0c;并发运行在Hadoop集群上。 一个完整的mapreduce程序在分布式运行时有三类实例进程&#xff1a; MRAppMaste…

MapReduce编程框架

1、MapReduce思想 MapReduce思想在生活中处处可见。我们或多或少都曾接触过这种思想。MapReduce的思想核心是分而治之&#xff0c;充分利用了并行处理的优势。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想&#xff0c;而不是自己原创。 MapReduce任务过程是分为…

MapReduce编程实践

MapReduce编程实践 重要知识点&#xff1a; MapReduce是一种分布式并行编程模型,是Hadoop核心子项目之一,如果已经安装了Hadoop&#xff0c;就不需要另外安装MapReduce。主要的理论知识点包括&#xff1a;MapReduce概述、MapReduce的工作流程&#xff0c;WordCount实例分析&a…

mapreduce 编程模型

MapReduce是在总结大量应用的共同特点的基础上抽象出来的分布式计算框架&#xff0c;它适用的应用场景往往具有一个共同的特点&#xff1a;任务可被分解成相互独立的子问题。基于该特点&#xff0c;MapReduce编程模型给出了其分布式编程方法&#xff0c;共分5个步骤&#xff1a…

MapReduce编程基础

&#xff08;一&#xff09;实现词频统计的基本的MapReduce编程。 ①在/user/hadoop/input文件夹(该文件夹为空)&#xff0c;创建文件wordfile1.txt和wordfile2.txt上传到HDFS中的input文件夹下。 文件wordfile1.txt的内容如下&#xff1a; I love Spark I love Hadoop 文件wor…

(超详细)MapReduce工作原理及基础编程

MapReduce工作原理及基础编程&#xff08;代码见文章后半部分&#xff09; JunLeon——go big or go home 目录 MapReduce工作原理及基础编程&#xff08;代码见文章后半部分&#xff09; 一、MapReduce概述 1、什么是MapReduce&#xff1f; 2、WordCount案例解析MapRed…

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

目录 1. MapReduce 简介1.1 起源1.2 模型简介1.3 MRv1体系结构1.4 YARN1.4.1 YARN体系结构1.4.2 YARN工作流程 2. MapReduce 工作流程3. Java Api要点4. 实验过程最后 1. MapReduce 简介 1.1 起源 在函数式语言里&#xff0c;map表示对一个列表&#xff08;List&#xff09;中…

MapReduce编程

一、MapReduce编程规范 MapReduce的开发一共又八个步骤&#xff0c;其中Map阶段分为2个步骤&#xff0c;Shuffle阶段4个步骤&#xff0c;Reduce阶段分为2个步骤。 1.1 步骤流程 Map阶段2个步骤 设置InputFormat类&#xff0c;将数据切分为key-value&#xff08;k1和v1&#x…

SSL/TLS

SSL/TLS 一、SSL/TLS1.1 历史发展1.2 使用场景1.3 解决的问题1.4 工作流程 二、对称加密&#xff08;Symmetric Cryptography&#xff09;2.1 工作原理2.2 翻转攻击2.3 认证加密&#xff08;Authentication Encryption&#xff09;2.4 Diffie-Hellman2.5 KDF2.6 Diffie-Hellman…

HTTPS,SSL,TLS

SSL TLS secure sockets layer 安全套接字层&#xff0c;Netscape公司研发。 transport layer security 安全传输层协议 定义 协议 年份 SSL 1.0 未知 SSL 2.0 1995 SSL 3.0 1996 TLS 1.0 1999 TLS 1.1 2006 TLS 1.2 2008 TLS 1.3 2018 IETF&#xff08;The…