以下是搜索内容: 关闭

  • 首页
  • 日志
  • 友情链接
  • 关于我

KoiNL.

愿世间美好 温柔以待

“锦鲤握运,未离我韵”

“愿好运常在”

18 分类
0 标签
16 归档
  • 小站首页
  • 个人日志
  • 友情链接
  • 关于自己
  • 我的工具
站点信息

文章数目: 84 篇

最近动态: 2天前

上线时间: 531天

当前版本: v3.0.0

第三章 MapReduce基础

分类: Hadoop
标签:

创建日期:2022-09-07 12:21:59

本章首先介绍了 MapReduce 的基础知识和工作流程,然后通过单词统计和二次排序两个案例介绍了如何利用 MapReduce 进行编程。
Hadoop 支持多种语言但对 Java 支持最好,在编写 MapReduce 函数时,需要新建 3 个类:Mapper 类、Reducer 类、main 类。另外,前两个类也可以作为内部类放到 main 类中。
Mapper 类需要集成 MapRecude API 所提供的Mapper 类并重写 map() 方法,Reduce() 类同理。

一、MapReduce 概述

MapReduce 是 Hadoop 系统中最重要的计算引擎,它不仅直接支持交互式应用,基于程序的应该,还是 Hive 组件的基础。

1. 分布式并行计算

1) 分布式计算

一个任务,拆分成无数个小任务,将这些小任务派发给多台计算机进行计算,最后将结构进行汇总以得到最终的结果。

分解后的任务直接相互独立,计算结果几乎互不影响,对实时性要求不高。

2) 并行计算

允许让多条指令以平行方式同时进行计算的模式,包括时间与空间并行两种方式。

时间并行:多条流水线同时作业
空间并行:使用多种计算资源(如多个处理器)执行并发计算。

2. MapReduce 的含义

针对大规模集群种的分布式文件即下并行处理的计算模型。

MapReduce 主要将数据处理任务拆分为 M(映射)和 Reduce(规约)两个任务。
例如,要统计一个班的数学成绩,数学老师让数学课代表统计它所在班的数学成绩。数学课代表就让每一组的组长统计它们组的数学成绩,相当于 Map 任务,而数学课代表统计处理每个组所报上来的数学成绩,就是 Reduce 任务。由此可以看出,MapReduce 充分体现了 “分而治之”的思想:把一个复杂的任务拆分成小的任务并行处理,从而提高任务的处理速度。

3. MapReduce 的特点

开发简单易于实现;良好的可扩展性:动态增加节点的方式;高容错性:如果集群中某计算节点出现故障,使得作业执行失败,MapReduce 可自动将作业分配到可用的计算节点上重新执行。

计算局限(不适合数据事务处理或单一请求处理)
性能局限
应用局限

二、MapReduce 的工作流程

输入分片和数据格式化,Map过程,Shuffle 过程,Reduce 过程,结果输出

1. 输入分片和数据格式化

首先,MapReduce 将存储在 HDFS 中的大规模数据集切分成独立的输入分片,每一个输入分片对应一个 Map 任务。
输入分片是一个逻辑概念,因此对输入数据集的切分也是一种逻辑切分。

此外,由于 Map 任务的输入要i去是键值对的形式,所以需要对输入分片进行格式化,即对输入处理成 <key, balue> 形式的数据,然后再传递给 Map 任务。

2. Map 过程

利用 Map() 函数来处理数据

3. Shuffle 过程

通常,Map() 后的输出需要进行一系列处理才交给 Reduce() 任务,这一系列处理过程被称作洗牌(Shuffle)过程。

这一系列包括有“分区”、“排序”、“合并”、“滥写”、“归并”等。

4. Reduce 过程

Reduce() 任务接收归并排序后的数据流,并对已有序的相同 key 的键值对调用一次 Reduce() 函数。
另外,Reduce() 任务的输出结果经过输出格式化后再输出到文件系统中,并且输出结果文件名默认为“part-r-00000”开始,逐渐递增。

三、案例解析——单词统计编程

1. 案例描述

假设在 hdfs://hadoop0:9000/jqe/wc/data 中存在两个文本文件(文件中仅有字符串和空格),分别是 words1.txt 和 words2.txt。
其中,word1.txt内容如下:

1
2
this is a good dog
this is a good cat

word2.txt内容如下:

1
2
this is a bad dog
this is a bad cat

要求 计算这两个文件的单词频数,输出结果 按照单词的字母顺序进行排序,并输出到 两个文件中(以字母 g 分隔开来)。另外,还要对输出数据进行格式化:单词和词频之间以~~~~~隔开。

2. 设计思路

根据分析,单词统计程序可分为 7 个模块,分别是输入、输入分片及其格式化、设计 map() 函数、分区、设计 reduce() 函数、输出格式化、输出。

  1. 指定输入文件位置;
  2. 将两个文件切分成两个输入分片,对输入分片进行格式化,如文件按行分解,从而形成以 key 为偏移量、value 为行内容的键值对;
  3. 设计 map() 函数,将键值对的 value 按空格分解成一个个单词,生成 <word, l>形式的键值对。
  4. 设计分区函数,将 key 的首字母小于 g 的键值对划分为 1 个分区,其余的划分在另一个分区。
  5. 设计 reduce() 函数,将输入的 <word, list(value)> 形式(如 <”ls”,{1, 1}>)的数据进行汇总,生成以 key 为单词、value 为单词频数的键值对。
  6. 系统默认的输出格式为“单词+空格+单词频数”的形式,若要输出特定样式的数据,需要对输出结果进行格式化,使得单词与但磁盘技能书之间以“~~~~~”间隔。
  7. 指定单词统计程序的输出结果文件位置。

3. 编程实现

4. 运行程序

四、案例解析——二次排序编程

浏览量

评论区

欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~

目录

  1. 1. 一、MapReduce 概述
    1. 1.1. 1. 分布式并行计算
      1. 1.1.1. 1) 分布式计算
      2. 1.1.2. 2) 并行计算
    2. 1.2. 2. MapReduce 的含义
    3. 1.3. 3. MapReduce 的特点
  2. 2. 二、MapReduce 的工作流程
    1. 2.1. 1. 输入分片和数据格式化
    2. 2.2. 2. Map 过程
    3. 2.3. 3. Shuffle 过程
    4. 2.4. 4. Reduce 过程
  3. 3. 三、案例解析——单词统计编程
    1. 3.1. 1. 案例描述
    2. 3.2. 2. 设计思路
    3. 3.3. 3. 编程实现
    4. 3.4. 4. 运行程序
  4. 4. 四、案例解析——二次排序编程

上一篇: 第 4 章 抽样推断

下一篇 第二章 磁盘I/O操作

公告栏

《 

 》

Hello~近期剽窃本站内容频发,本站唯一指定网站:https://koinl.github.io。请认准。点击点击此处选择进入。
回到顶部
查看评论

Power By Hexo.

Theme:koinl.

信息来源于锦鲤未离