MapReduce分布式编程(实验三)

一.MapReduce的介绍

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

2.主要功能
MapReduce提供了以下的主要功能:
1)数据划分和计算任务调度:
2)数据/代码互定位:
3)系统优化:
4)出错检测和恢复:

实验内容:
1.编程调试WordCount程序
2.生成jar包,在虚拟机上运行
实验步骤
1.首先在Eclipse中新建java项目

在这里插入图片描述
2.项目建成后,能够看到项目结构如下所示,src文件夹此时是空的

在这里插入图片描述

3.接下来右键单击src新建包和类,然后就进入Wordcount程序的代码编写阶段

在这里插入图片描述

因为运行的是Wordcount程序,只需要如下三个jar包:

$HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.0.jar

$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar

$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar

导入后不再报错,下一步就是生成jar文件。右键单击包,选择Export–>Java–>JAR file–>next,输入jar文件的文件名和生成路径

在这里插入图片描述

连点两次next后,进入如下界面,选择程序主类,然后点击finish结束。
将生成的jar文件上传到namenode节点,我上传的路径是$HADOOP_HOME/share/hadoop/mapreduce,然后在此路径下执行如下命令 hadoop jar wordcount_test.jar /input/text.txt /output4。
注意!!!这里jar文件后面直接是输入和输出参数,并没有像直接运行自带的hadoop-mapreduce-examples-2.8.0.jar文件时那样还要在jar文件后面输入主类名
至此成功完成本地开发MapReduce程序后,生成jar包发送给集群运行的测试过程。

从集群上看MapReduce
1.
将HDFS上的文件分块,如需要输入的文件为100MB和200MB时,因为块大小为128MB,所以共分为三块,块一:100MB;块二:128MB;块三:72MB
每个块对应一个Map,需要三个Map进程来处理
2.
为集群上空闲的机器分配Map任务,被分配了Map作业的机器,开始读取对应分片的输入数据
3.
与单文件过程类似
4.
Map产生的中间键值对分为N个区保存在本地中,每个区对应一个Reduce任务,将这N个区的位置报告给集群中负责调度的机器,让其将位置信息转发给已分配好Reduce任务的机器。

有Reduce任务的机器从刚获取的地址处,读取中间键值对,然后与单文件类似
6.
所有执行完毕后,MapReduce输出放在了N个分区的输出文件中(分别对应一个Reduce作业)。用户通常并不需要合并这N个文件,而是将其作为输入交给另一个MapReduce程序处理。整个过程中,输入数据是来自底层分布式文件系统(GFS)的,中间数据是放在本地文件系统的,最终输出数据是写入底层分布式文件系统(GFS)的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值