MapReduce的核心函数——手写WordCount代码

本文是个人对Hadoop权威指南,第二章MapReduce重点总结

一、 相关概念

作业(Job):客户端执行的一个工作单元,包括输入数据、MapReduce程序和配置信息
任务(Task):Hadoop把作业(Job)分为若干个任务来执行,包括Map任务和Reduce任务两类任务,这些任务运行在集群的节点上,并通过Yarn调度,如果一个任务失败,他将在另一个不同的节点上自动重新调度运行。

二、 主要工作流程

(1) 分片
有几个分片就有几个Map任务
注:分片的大小一般为hdfs的一个快的大小128MB,这是因为Hadoop在存储有输入数据的节点上运行(数据本地化),对于任何一个HDFS节点,基本上都不可能同时存储2个数据块,因此分片中的部分数据要通过网络传输到Map任务运行的节点。与使用本地数据运行整个map任务相比,这种方法效率更低。
(2) 执行map任务
Map任务根据用户自定义的映射规则,输出一系列<key,value>作为中间结果
(3) shuffle(洗牌)
对第(2)步骤的中间结果进行一定的分区(partition)、排序(sort)、合并(Merge)操作,得到<key,valuelist形式的中间结果>
(4) 执行reduce任务
第(3)步骤的中间结果作为输入由用户自定义的reduce函数处理,生成最终结果
注:reduce任务的数量并非由输入数据的大小决定,是独立指定。Reduce输出结果的第一个复本存储在本地节点上,其他复本出于安全考虑存储在其他机架的节点中。
在这里插入图片描述

三、wordcount程序

(1)Map函数
package com.lari.demo;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.io.Text;

public class MyMapper extends Mapper<IntWritable, Text, Text, IntWritable>{
   
	//Map是个泛型类,有四个形参,分别指定map函数输入键,输入值,输出键、输出值
	
	//输入键是一个长整型数偏移量,输入值是一行文本
	//输出键是一行文本,输出值是一个数
	
	private static final IntWritable one = new IntWritable(1);
	//Hadoop本身提供了一套可优化网络序列化的基本类型,不直接使用java内嵌的类型 

	@Override
	protected void map(IntWritable key, Text value, Mapper
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值