一、概念
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程序中进行序列化操作则需要使用相应的数据类型
Java | Hadoop |
---|
byte | ByteWritable | short | ShortWritable | int | IntWritable | long | LongWritable | float | FloatWritable | double | DoubleWritable | String | Text | null | NullWritable |
另外 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);
|