Hadoop四大组件之——MapReduce

一、概念

MapReduce 是一个分布式运算程序的编程框架/编程模型

MapReduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个 Hadoop 集群上。

大数据量计算
利用了hdfs做了存储,计算任务是不是要分散计算
(1)任务的分配
(2)监控
(3)容错
(4)中间结果的汇总

二、组件
1、分区组件Partitioner

自定义一个类,继承Partitioner接口,再根据自身条件进行分区,然后再主函数中进行调用。代码:

public class MyPartitioner extends Partitioner<Text, LongWritable> {
    @Override
    public int getPartition(Text text, LongWritable longWritable, int numPartitions) {
   //按长度分两区
        if (text.toString().length() >= 5){
            return 0;
        }else {
            return 1;
        }
   	 }
	}
2 排序组件与序列化

序列化 (Serialization) :结构化对象转化为字节流
反序列化 (Deserialization):把字节流转为结构化对象。

在进程间传递对象或持久化对象的时候,需要序列化对象成字节流, 反之当将接收到或从磁盘读取的字节流转换为对象,要进行反序列化

Java 的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额 外的信息(各种校验信息,header,继承体系等),不便于在网络中高效传输;
所以,hadoop 自己开发了一套序列化机制(Writable),更加精简高效。
Hadoop 中的序列化框架已经对基本类型和 null 提供了序列化的实现了。

Hadoop为了提高效率自定义了一套序列化框架,如果在Hadoop程序中进行序列化操作则需要使用相应的数据类型

JavaHadoop
byteByteWritable
shortShortWritable
intIntWritable
longLongWritable
floatFloatWritable
doubleDoubleWritable
StringText
nullNullWritable

另外 Writable 有一个子接口是 WritableComparable,WritableComparable 是既可实现序列化,也可以对key进行比较

思路
1、将 Mapper 端输出的<key,value>中的 key 和 value 组合成一个新的 key , value值不变,也就是新的key和value为:<(key,value),value>
2、在针对新的 key 排序的时候, 如果key相同, 就再对value进行排序

3 局部合并组件

1、
Combiner 是 MapReduce 程序中 Mapper 和 Reducer 之外的一种组件,它的作用是在 maptask 之后给 maptask 的结果进行局部汇总,以减轻 reducetask 的计算负载,减少网络传输

2、如何使用Combiner
说白了,就是再写一个Reducer,取名MyCombiner,然后在job中设置Combiner组件:job.setCombinerClass(MyCombiner.class)

4、分组

定义:分组是mapreduce中shuffle组件当中reduce端的一个功能组件,主要的作用是决定哪些数据作为一组。
和分区一样,新建个类制定规则,然后再主函数中进行调用
job.setGroupingComparatorClass(MyGroup.class);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值