MapReduce原理

    技术2022-07-11  77

    MapReduce原理及编程

    MapReduce介绍MapReduce的设计思想MapReduce特点MapReduce实现WordCountMapReduce执行过程Hadoop V1 MR引擎Hadoop V2 YARNHadoop及YARN架构Hadoop2 MR在Yarn上运行流程InputSplit(输入分片)Shuffle阶段Key&Value类型MapReduce编程模型InputFormat接口

    MapReduce介绍

    1.MapReduce是一个分布式计算框架

    它将大型数据操作作业分解为可以跨服务器集群并行执行的单个任务。起源于Google

    2.适用于大规模数据处理场景

    每个节点处理存储在该节点的数据

    3.每个job包含Map和Reduce两部分

    MapReduce的设计思想

    1.分而治之

    简化并行计算的编程模型

    2.构建抽象模型:Map和Reduce

    开发人员专注于实现Mapper和Reducer函数

    3.隐藏系统层细节

    开发人员专注于业务逻辑实现

    MapReduce特点

    优点

    易于编程可扩展性高容错性高吞吐量

    不适用领域

    难以实时计算不适合流式计算

    MapReduce实现WordCount

    编程链接:

    MapReduce执行过程

    数据定义格式

    map: (K1,V1) → list (K2,V2)reduce: (K2,list(V2)) → list (K3,V3)

    MapReduce执行过程

    MapperCombinerPartitionerShuffle and SortReducer Map一定要有,combiner可有可无,paritioner一定要有,reducer在某种情况下可以没有; mapper数目无法操作有inputsplit决定的(可以改块大小达到mapper数目),但是Reducer可以操作

    Hadoop V1 MR引擎

    Job Tracker

    运行在Namenode接受客户端Job请求提交给Task Tracker

    Task Tracker

    从Job Tracker接受任务请求执行map、reduce等操作返回心跳给Job Tracker

    Hadoop V2 YARN

    重要图: yarn的时候回香江

    MapeReduce的局限性

    yarn的变化 yarn环境下的资源管理器 jt resource 任务放在ResourceManager job

    Hadoop及YARN架构

    Hadoop2 MR在Yarn上运行流程

    InputSplit(输入分片)

    在map之前,根据输入文件创建inputSplit

    每个InputSplit对应一个Mapper任务输入分片存储的是分片长度和记录数据位置的数组记录边界划分的(*)

    block和split的区别

    block是数据的物理表示split是块中数据的逻辑表示split划分是在记录的边界处split的数量应不大于block的数量(一般相等)

    Shuffle阶段

    Key&Value类型

    必须可序列化(serializable)

    作用:网络传输以及持久化存储IntWritable、LongWriteable、FloatWritable、Text、DoubleWritable, BooleanWritable、NullWritable等

    都继承了Writable接口

    并实现write()和readFields()方法

    Keys必须实现WritableComparable接口

    Reduce阶段需要sortkeys需要可比较

    MapReduce编程模型

    有2方法:getinputsplit:又来计算有多少个inputsplit,他就知道启动几个mapper createReconReader<k,v>:

    InputFormat接口

    Processed: 0.024, SQL: 9