【博学谷学习记录】超强总结,用心分享 | MapReduce
【博学谷IT技术支持】
一、介绍
MapReduce是一种编程模型,用于大规模数据集的并行运算。是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(规约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
特点与局限性
mapReduce特点: 易于编程、良好的扩展性、高容错性、适合海量数据的离线处理
- 易于编程: 提供了用于二次开发的接口,简单的实现一些接口就可以完成一个分布式程序
- 良好的扩展性: 当计算机资源不足时,可通过增加机器来扩展它的计算能力。
- 高容错性:任何单一机器节点宕机,它可以把上边的计算任务转移到其他节点上运行,不影响整个作业的完成,过程由Hadoop内部完成。
- 适合海量数据的离线处理: 可以处理GB、TB和PB级别的数据量
mapReduce局限性:实时计算性、不能进行流式计算
- mapReduce主要用于离线作业,无法做到秒级或者亚秒级的数据响应;流式计算特点是源源不断得计算,并且数据是动态的,mapReduce作为一个离线计算框架,主要针对静态数据集,数据是不能动态变化的
工作流程
MapReduce将一个大的计算任务拆分成一个个小任务,小任务在不同的计算机中处理,最后将这些小任务的结果整体汇总起来。MapReduce分为两个阶段,Map阶段负责任务拆分,reduce阶段负责任务汇总。
mapReduce工作流程分为五个阶段:
- input阶段获取数据进行分片作为map的输入
- map阶段对某种输入格式的一条记录解析成一条或者多条记录
- shffle阶段对中间数据的控制,作为reduce的输入
- reduce阶段对相同key的数据进行合并
- output阶段按照格式输出到指定目录
二、MR编程
MapReduce体系
MapReduce与hdfs一样使用master/slave结构。
master/slave结构:一个基于分而治之思想设计模式,将一个任务(原始任务)分解为若干个语义等同的子任务,
并由专门的工作者线程来并行执行这些任务,原始任务的结果是通过整合各个子任务的处理结果形成的。
- MapReducec程序在分布式运行时有三类实例进程
- MRAppMaster: 复制整个程辉的过程调度机状态协调
- MapTask:复制Map阶段的整个数据处理流程
- ReduceTask: 负责reduce阶段的整个数据处理流程
用户编写程序分为:Mapper,Reducer,Driver(提交运行mr程序的客户端驱动);整个MapReduce程序中,数据都是以kv键值对的形式流转的,kv的类型数据确定及其重要
工作执行流程
整个MapReduce工作流程可以分为3个阶段:map、shuffle、reduce。
三、序列化机制
序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
java的序列化机制
java对象序列化的二级制,把对象表示成一个二进制的字节数组,包含对象的数据,对象的类型信息,对象内部的数据的类型信息等等。
Hadoop的序列化机制
Hadoop通过Writable接口实现序列化机制和java中的Comparable接口合并,提供了一个WritableComparable的接口
import org.apache.hadoop.io.WritableComparable;
public class Covidbean implements WritableComparable<Covidbean> {
...
@Override
public void write(DataOutput dataOutput) throws IOException {
dataOutput.writeUTF(state);
}
@Override
public void readFields(DataInput dataInput) throws IOException {
this.state = dataInput.readUTF();
}
}
Hadoop序列化特点:高效、紧凑、扩展性强。
hadoop的数据类型
**Hadoop 数据类型** | **Java数据类型****** | **备注******
| --------------- | ---------------- | -----------------------------
| BooleanWritable | boolean | 标准布尔型数值
| ByteWritable | byte | 单字节数值
| IntWritable | int | 整型数
| FloatWritable | float | 浮点数
| LongWritable | long | 长整型数
| DoubleWritable | double | 双字节数值
| Text | String | 使用UTF8格式存储的文本
| MapWritable | map | 映射
| ArrayWritable | array | 数组
| NullWritable | null | 当<key,value>中的key或value为空时使用
四、MapReduce运行
MR有两种模式:
- 集群模式:
mapreduce.framework.name=yarn
- 本地模式:
mapreduce.framework.name=local
默认是本地模式,在mapred-default.xml中有定义
集群运行模式:将程序打成jar包,然后在集群的任意一个节点上用命令启动
未完待续!!!