【博学谷学习记录】超强总结,用心分享 | MapReduce

发布时间 2023-06-01 10:15:52作者: 牛牛牛牛牛牛牛牛

【博学谷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包,然后在集群的任意一个节点上用命令启动

未完待续!!!