mapreduce编程_MapReduce编程框架

MapReduce思想

MapReduce任务过程分为两个处理阶段:

Map阶段:Map阶段的主要作用是"分",即把复杂的任务分解为若干个"简单的任务"来并行处理。Map阶段的这些任务可以并行计算,彼此间没有依赖关系。

Reduce阶段:Reduce阶段的主要作用是"合",即对map阶段的结果进行全局汇总。

590da52b8e61b266a1b88090b6bed715.png

MapReduce编程规范及示例编写

MapReduce的编程结构

Mapper类

  1. 用户自定义一个Mapper类,该类要继承Hadoop的Mapper类;
  2. Mapper的输入数据是键值对的形式(类型可以自定义);
  3. Map阶段的业务逻辑定义在map()方法中;
  4. Mapper的输出数据是键值对的形式(类型可以自定义)。

注意:map()方法是接收到一行文本就调用一次

Reducer类

  1. 用户自定义Reducer类,该类要继承Hadoop的Reducer类;
  2. Reducer的输入数据类型要与Mapper类的输出数据类型相同;
  3. Reducer的业务逻辑写在reduce()方法中;
  4. Reduce()方法是当接收相同key的一组键值对就执行一次。

Driver阶段

创建提交YARN集群运行的Job对象,其中封装了MapReduce程序运行所需的相关参数的输入数据路径,输出数据路径等。也相当于是一个YARN集群的客户端,主要作用就是提交我们MapReduce程序运行。


WordCount代码实现

需求

在给定的文本文件中统计输出每个单词出现的次数

输入数据:wc.txt

330e4b13553db2e740efc4b98cc9b01f.png

输出:

c03963c96f950fa2395abb746ca7bc49.png

具体步骤

按照MapReduce编程规范,分别编写Mapper,Reducer,Driver

新建maven工程

导入相关依赖

f26cbf01a839cd1f91e5d9461d647b07.png

添加log4j.properties配置文件

8eb9cdbdd3b2e1e35180bd5be9d14fbc.png

整体思路梳理

Map阶段:

  1. map()方法中把传入的数据转为String类型;
  2. 根据空格切分出单词;
  3. 输出<单词,1>

Reduce阶段:

  1. 汇总各个单词的个数,遍历value数据进行累加;
  2. 输出key的总数

Driver阶段:

  1. 获取配置文件对象,获取job对象;
  2. 指定程序jar的本地路径;
  3. 指定Mapper/Reducer类;
  4. 指定Mapper输出的KV数据类型;
  5. 指定最终输出的KV数据类型;
  6. 指定job处理的原始数据路径;
  7. 指定job输出结果路径;
  8. 提交作业。

编写Mapper类

0071d476b88417da646dcd7c1140b64e.png

编写Reducer类

1cec3075549f2c6c9c911d95ff5b39d0.png

编写Driver驱动类

bed485c95137d2856c7d50034eafcb8e.png

Yarn集群运行任务

把程序达成jar包,改名为wc.jar,上传到Hadoop集群

选择正确的jar包

69746d754d7bde90ddcc4ce77a2a8013.png

准备原始数据文件,上传到HDFS,不是本地Linux系统中,因为跨节点运行无法获得其他节点上的数据,但是HDFS数据是各个节点共享的。

60a8283f903e8142803b8e0c0f75a73b.png

启动Hadoop集群

使用Hadoop命令提交任务运行

d1b5a59a9ad030ce1dc9d41c71a4d2cb.png

/wcinput是原始数据文件所在的路径;
/wcoutput是运行结果存放的路径。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值