MapReduce程序基本架构

news2024/11/17 8:26:03

MapReduce程序是以(键/值)对的形式来处理数据的,即可以通过以下的形式来表示:

map: (K1,V1) ➞ list(K2,V2)

reduce: (K2,list(V2)) ➞ list(K3,V3)

不令人惊奇的是,这是一种超越一般数据的数据流表示形式。在本文中将讲述一个MapReduce程序每个阶段的更多的细节。图中表示的是一个表示完全的Hadoop流程的高级图表,我们将在一点点地介绍各个流程的功能。

 

值得注意的是:各个节点之间彼此交流的唯一时间是在“shuffle”阶段,这样的通讯限制很大程度上促进了程序的可拓展性。

在分析数据在某个阶段中的传递和处理过程之前,我们必须首先对Hadoop所支持的数据类型有所熟悉。

Hadoop数据类型

尽管在之前的讨论中我们没有涉及到(键/值)概念,但是MapReduce架构不允许程序中的一些参数为任意的类。打个比方来说,尽管我们的的确确在讨论一些键值时把他们当成integer,string以及其他等等的数据类型,但是他们实际上不是标准的Java对象(就像Integer,String等等)。这就是为什么MapReduce架构拥有自己定义的序列化键值对来处理集群中的计算这是因为这些类会更好地支持这种架构下的序列化。

特别注意的是,实现了Writable接口的类可以是值,而实现了WritableComparable<T>接口的类则既可以为键也可以为值。所以说WritableComparable<T>接口是Writable和java.lang.Comparable<T>的混合体。我们需要对键进行比较是因为它们在Reduce阶段会被排序,而值在这个时候只是简简单单地经过。

Hadoop已经有一系列已经定义好的实现了WritableComparable接口的类,这其中包括了封装了许多基本数据类型的包装类,就像下面所给的表中所显示的那样:

除此之外,你还可以通过实现WritableComparable或者Writable接口来创造自己的类,就像下面的例子所给的:

public class Edge implements WritableComparable<Edge>{

    private String departureNode;

    private String arrivalNode;

    public String getDepartureNode() { return departureNode;}

    @Override

    public void readFields(DataInput in) throws IOException {

        departureNode = in.readUTF();

        arrivalNode = in.readUTF();

    }

    @Override

    public void write(DataOutput out) throws IOException {

        out.writeUTF(departureNode);

        out.writeUTF(arrivalNode);

    }

    @Override

    public int compareTo(Edge o) {

        return (departureNode.compareTo(o.departureNode) != 0)? departureNode.compareTo(o.departureNode) : arrivalNode.compareTo(o.arrivalNode);

    }

}

这个类中实现了Writable中的readFields()和write()两个方法。之后的程序中使用Java中的DataInput和DataOutput类来实现类内容的序列化。该类还实现了Comparable接口中的compareTo()方法,其中返回值为-1,0和1分别代表了Edge对象是比所给的Edge对象小,相等或者大的关系。

Mapper

为了实现mapper的功能,一个类可以继承于MapReduceBase类并且实现Mapper接口。MapReduce类是作为mapper和reducer的基础类,该类中包括了两种重要的方法,这两个方法在类中分别等效为构造函数和析构函数的功能:

①void configure(JobConf job)——在这个函数中,你可以通过XML文件提取出相关参数,或者在程序中的开始,即数据开始处理之前调用这个函数提取出相关参数。

②void close()——作为在map程序结束之前的最后一个步骤,这个函数必须做好所有的结尾工作——数据库的连接,打开文件等等。

Mapper接口负责数据处理,其利用Mapper<K1,V1,K2,V2>的形式(其中键值类分别是实现了WritableComparable和Writable)。其唯一的方法就是处理一对键值。

void map(K1 key,V1 value,OutputCollector<K2,V2> output,Reporter reporter) throws IOException

这个函数产生根据给定的(K1,V1)键值输入对一系列的(K2,V2)键值对。OutputCollector接受map处理后的结果,Reporter提供了记录mapper处理的额外信息。

Hadoop提供了一些实用的mapper类拓展,你可以在下面的表中看到:

Reducer

就像前面的mapper一样,reducer必须首先继承MapReduce类和实现Reducer接口。而在Reducer接口中有下面的一个方法:

void reduce(K2 key,Iterator<V2> values,OutputCollector<K3,V3> output,Reporter reporter

) throws IOException

当reducer任务收到不同mapper的输出时,它会对到来的数据根据键来排列然后汇总具有相同键的所有值。在这之后reduce()函数就被调用,然后通过对值和对应的键进行迭代产生<K3,V3>对,OutputCollector接受reduce处理后的结果并把结果输出到一个文件中。Reporter同样提供记录reducer任务中的额外信息。

下面图表提供了一对Hadoop提供的reducer的实用类

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用PyMC进行时间序列分层建模

在统计建模领域&#xff0c;理解总体趋势的同时解释群体差异的一个强大方法是分层(或多层)建模。这种方法允许参数随组而变化&#xff0c;并捕获组内和组间的变化。在时间序列数据中&#xff0c;这些特定于组的参数可以表示不同组随时间的不同模式。 今天&#xff0c;我们将深…

ood的5C解题法(1)----管理类面试对象设计

管理类 概念 可以模拟/代替管理员日常工作的系统 下面用停车场系统做演示 答题流程 Clarify What&#xff1a;除题目中的名词外&#xff0c;从管理的名词考虑 parking lot是什么类型的&#xff1f;如果楼有多层&#xff0c;停车位也是多层&#xff0c;则parking lot->pa…

Windows Server 2019 OVF, updated Jun 2023 (sysin) - VMware 虚拟机模板

Windows Server 2019 OVF, updated Jun 2023 (sysin) - VMware 虚拟机模板 2023 年 6 月版本更新&#xff0c;现在自动运行 sysprep&#xff0c;支持 ESXi Host Client 部署 请访问原文链接&#xff1a;https://sysin.org/blog/windows-server-2019-ovf/&#xff0c;查看最新…

5、产品经理的工作职责OR主要工作技能和工具

1、产品经理的工作职责 我们通过一个案例来了解产品经理的工作职责。 老板让你给他点餐&#xff0c;你应该怎么做&#xff1f;你需要考虑哪一些方面的问题&#xff1f; 例如&#xff1a;你预算多少&#xff0c;预算是十块钱还是100块还是1000块。有没有忌口&#xff0c;口味…

【MYSQL篇】Update语句原理详解

文章目录 前言缓冲池Buffer PoolInnoDB 内存结构redo logundo logBinlog 总结 前言 前面的文章我们已经对MySQL的查询语句的执行流程进行了说明&#xff0c;感兴趣的可以去看看&#xff1a; 【MySQL篇】Select语句原理详解 本篇文章我们来聊聊 MySQL更新语句的执行原理。更新…

Win7系统提示Windows Defender无法扫描选定的文件解决方法

Win7 64位系统提示“Windows Defender无法扫描选定的文件”怎么办呢?使用Windows Defender扫描文件,结果弹出如下图窗口,该怎么解决呢,参考下文,一起来解决Win7系统提示“Windows Defender无法扫描选定的文件”的解决方法。 原因分析: 这是因为开启Defender扫描压…

java的序列化注解Serial、序列化版本号serialVersionUID

例如&#xff0c;jdk源码NTLMException类的定义&#xff0c;其中涉及到了序列化注解Serial和序列化版本号字段serialVersionUID&#xff1a; 序列化注解java.io.Serial&#xff1a; 序列化注解java.io.Serial是在javaSE-14版本引入的。通常注解实现了序列化类的序列化相关的函…

【JUC进阶】02. volatile关键字

目录 1、回顾JMM 1.1、可见性&#xff08;Visibility&#xff09; 1.2、原子性&#xff08;Atomicity&#xff09; 1.3、有序性&#xff08;Ordering&#xff09; 2、volatile 2.1、保证可见性 2.2、不保证原子性 2.3、防止指令重排 2.4、什么时候使用volatile 3、小…

微服务中「组件」集成

有品&#xff1a;There is no silver bullet&#xff1b; 一、简介 在微服务工程的技术选型中&#xff0c;会涉及到很多组件的集成&#xff0c;最常用包括&#xff1a;缓存、消息队列、搜索、定时任务、存储等几个方面&#xff1b; 如果工程是单服务&#xff0c;对于集成组件…

有趣的数学 关于自然常数e

一、e的值 自然常数&#xff08;也称欧拉数&#xff09;e是数学中最重要的数字之一。 2.7182818284590452353602874713527...... 二、从复利理解e 设想你在一家银行有一个银行账户&#xff0c;该银行付给你一个慷慨的利息年利率12%,一年计一次复利&#xff0e;你将一笔初始存款…

测试(二)

1.软件测试的生命周期 需求分析→测试计划→ 测试设计→ 测试开发→ 测试执行→ 测试评估 2.如何描述一个Bug 3.Bug的优先级 1、Blocker&#xff08;崩溃&#xff09;&#xff1a; 阻碍开发或测试工作的问题&#xff1b;造成系统崩溃、死机、死循环&#xff0c;导致数据库数…

Windows Server 2016 OVF, updated Jun 2023 (sysin) - VMware 虚拟机模板

2023 年 6 月版本更新&#xff0c;现在自动运行 sysprep&#xff0c;支持 ESXi Host Client 部署 请访问原文链接&#xff1a;https://sysin.org/blog/windows-server-2016-ovf/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org…

Kubernetes 纯理论 贼干篇

Kubernetes理论 docker 容器引擎 docker compose 单机编排工具 docker swarm Docker容器多机编排工具&#xff0c;实现Docker容器的集群管理调度的工具 k8s 容器多机编排工具&#xff0c;占据80%以上的市场份额 mesos marathon mesos:分布式资管管理框架&#xff0c;可以对…

2019年全国硕士研究生入学统一考试管理类专业学位联考写作试题

写作:第56&#xff5e;57小题&#xff0c;共65分。其中论证有效性分析30分&#xff0c;论说文35分。 56&#xff0e;论证有效性分析 分析下述论述中存在的缺陷和漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0c;对论证的有效性进行分析和评论。(论…

Linux终端与进程的关系 ( 1 ) -【Linux通信架构系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the…

案例:从定性原因分析上升到定量原因分析

在定量原因分析时&#xff0c;主要是有四种定量思考的方法&#xff1a; 1、数据的居中趋势与离散程度分析&#xff1a;均值、标准差 2、 80-20分析&#xff1a;在所有的构成成分中&#xff0c;哪个成分占比最大 3、数据的相关性分析&#xff1a;是否存在强相关 4、敏感性分…

[进阶]Java:文件字符输入流、文件字符输出流

问&#xff1a;字节流读取中文输出可能会存在什么问题&#xff1f; 会乱码。或者内存溢出。 读取中文输出&#xff0c;哪个流更合适&#xff0c;为什么&#xff1f; 字符流更合适&#xff0c;最小单位是按照单个字符读取的。 代码演示如下&#xff1a; public class FileR…

[C++]vs2019运行c++报错:错误 C1075 “{”: 未找到匹配令牌

源码是从git拉下来的&#xff0c;但是我并没有改任何东西&#xff0c;结果报错超过100个&#xff0c;这个很明显不是代码问题&#xff0c;最后发现需要把LF换成CRLF&#xff0c;修改方法很简单&#xff0c;就是VS2019打开源代码右下角切换即可。如图 错误原因就是github下载的源…

【MySQL】不就是MySQL——多表查询

前言 嗨&#xff01;小伙伴们大家好呀&#xff0c;忙碌的一周就要开始&#xff01;在此之前我们学习的MySQL数据库的各种操作都是在一张表之中&#xff0c;今天我们学习要对多张表进行相关操作&#xff0c;相比较于单一的表来说&#xff0c;多张表操作相对复杂一些&#xff0c;…

【数据库三】数据库的存储引擎

存储引擎 1.存储引擎1.1 概念介绍1.2 常用存储引擎 2.MyISAM2.1 特点介绍2.2 支持的存储格式2.3 适用的生产场景 3.InnoDB3.1 特点介绍3.2 适用生产场景分析4.企业选择存储引擎依据 5.MyISAM和InnoDB的区别命令操作 1.存储引擎 1.1 概念介绍 MySQL数据库中的组件&#xff0c;负…