MapReduce简介

MapReduce
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)“和"Reduce(归约)”,是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

定义

MapReduce是面向大数据并行处理的计算模型、框架和平台,它隐含了以下三层含义:
1)MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure)。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。
2)MapReduce是一个并行计算与运行软件框架(Software Framework)。它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担。
3)MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。它借助于函数式程序设计语言Lisp的设计思想,提供了一种简便的并行程序设计方法,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理 [1] 。
执行步骤
执行步骤

用途

在Google,MapReduce用在非常广泛的应用程序中,包括“分布grep,分布排序,web连接图反转,每台机器的词矢量,web访问日志分析,反向索引构建,文档聚类,机器学习,基于统计的机器翻译…”值得注意的是,MapReduce实现以后,它被用来重新生成Google的整个索引,并取代老的ad hoc程序去更新索引。
MapReduce会生成大量的临时文件,为了提高效率,它利用Google文件系统来管理和访问这些文件。
在谷歌,超过一万个不同的项目已经采用MapReduce来实现,包括大规模的算法图形处理、文字处理、数据挖掘、机器学习、统计机器翻译以及众多其他领域。
其他实现
Nutch项目开发了一个实验性的MapReduce的实现,也即是后来大名鼎鼎的hadoop
Phoenix是斯坦福大学开发的基于多核/多处理器、共享内存的MapReduce实现。

wordcount示例

该示例程序所在位置:Hadoop的安装目录中的

cd /usr/apps/hadoop-2.7.7/share/hadoop/mapreduce

如下Jar包中:hadoop-mapreduce-examples-2.7.7.jar,如下图所示:
在这里插入图片描述
注:用Xftp软件将 hadoop-mapreduce-examples-2.7.7.jar 下载到本地桌面,如下图所示:
在这里插入图片描述
然后用反编译软件javaDecompiler打开该jar包,看一下该jar包中都包含那些类以及我们现在要运行的WordCount类,如下图所示:
在这里插入图片描述
我们需要在node1中执行下列命令来运行该jar包中的WordCount类:

cd /usr/apps/hadoop-2.7.7/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-2.7.7.jar WordCount demo.txt /result

4.1.1 运行该程序的准备工作
(1)启动Yarn框架(因为Yarn框架管理着MapReduce框架,启动了Yarn框架,也就是启动了MapReduce框架),如下图所示:

start-yarn.sh

在这里插入图片描述
(2)新建一个文本文件demo.txt
该文本文件用于保存被统计单词的个数,如下图所示:
在这里插入图片描述
(3)将文本文件demo.txt上传到HDFS,如下图所示:

hadoop fs -put /root/demo.txt /
hadoop fs -ls /

在这里插入图片描述

4.1.2 运行程序

cd /usr/apps/hadoop-2.7.7/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-2.7.7.jar WordCount /demo.txt /result

需要注意:
(1)这里的wordcount必须为全小写,并不是具体的真正要执行的类名,而是一个普通字符串。
该字符串所对应的类在该jar包的ExampleDriver类中已经定义好的映射关系,如下图所示:
在这里插入图片描述
如果wordcount命令关键字不是全小写,会报下面的错误提示,提示命令不识别WordCount关键字,如下图所示:
在这里插入图片描述
如果wordcount命令关键字是全小写,则会正常执行该命令,并产生统计结果,如下图所示:

hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /demo.txt /result

在这里插入图片描述
再次执行wordcount命令会报输出目录resutl已经存在的异常

hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /demo.txt /result

在这里插入图片描述
删除输出目录resutl中的两个文件,再次执行wordcount命令仍然会报输出目录resutl已经存在的异常,如下图所示:
在这里插入图片描述

 hadoop fs -rm /result/_*
hadoop fs -rm /result/par*

在这里插入图片描述

hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /demo.txt /result

在这里插入图片描述

综上,我们可以知道这个输出结果目录result必须是命令创建的,而不能是我们事先在HDFS中建好的,例如我们把输出目录改为resutl2,再次执行wordcount命令就能够正常的执行并输出统计结果了,如下图所示:

hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /demo.txt /result2

在这里插入图片描述
注:为了讲解下一小节的内容,我们在HDFS中只保留demo.txt文件和
jdk-8u121-linux-x64.tar.gz文件,如下图所示:

hadoop fs -rm -r /result*
hadoop fs -rm -r /tmp

(2)可以一次分析多个文件,如下图所示:

hadoop fs -cp /demo.txt /demo2.txt
hadoop fs -ls /
hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /demo.txt /demo2.txt /result

(3)可以分析一个目录中的所有文件,如下图所示:

hadoop fs -mkdir -p /beijing/huike
hadoop fs -mv /demo* /beijing/huike
hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /beijing/huike /output

4.1.3 运行的进程
RunJar:hadoop jar 命令进程
MRAppMaster:是整个应用程序的管理进程,即Job
YarnChild:即map进程与reduce进程

4.2 MapReduce工作原理
4.2.1 回顾Yarn工作原理
4.2.2 WordCount工作原理
4.2.3 Shuffle过程
将Map的输出结果复制到Reduce中作为输入数据的过程称为Shuffle过程。Shuffle过
程由Yarn框架完成。Shuffle过程中包含三个重要工作。
(1) 去重
(2) 合并
(3) 排序

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]: MapReduce是一种用于处理大规模数据集的编程模型和计算框架。它的主要目的是将大规模数据集分解成小的数据块,并在分布式计算环境中进行并行处理。MapReduce框架中的map阶段负责将输入数据分解成键值对,并进行初步的处理和转换。而reduce阶段则负责对map阶段输出的键值对进行排序、分组和聚合操作,最终生成最终的结果。\[1\] MapReduce的核心机制是shuffle,它负责将map阶段处理的数据传递给reduce阶段。在shuffle过程中,数据会根据key值进行分区和排序,并缓存起来以供reduce阶段使用。\[1\]因此,MapReduce主要用于处理大规模数据集的并行计算,可以帮助提高数据处理的效率和速度。 #### 引用[.reference_title] - *1* [MapReduce简介](https://blog.csdn.net/lyy_5201314/article/details/109435474)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [MapReduce是啥? 详解](https://blog.csdn.net/lljazxx/article/details/102922969)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值