什么是MapReduce?
  • mapreduce 是一种软件框架
  • mapreduce job将任务分解为独立的块儿到不同的map task,进行并行处理;
  • map任务输出会做相应的排序处理,并作为reduce 任务输入;
  • 框架能很好的处理定时任务,进行监控并能够重新执行失败的任务。
计算和存储:mapreduce 和 haddoop:
 
通常来讲,计算节点和存储节点是同一个,即mapreduce框架和hadoop分布式文件系统运行在相同的节点集群,使得任务调度更加高效,网络带宽更聚合。
 
mapreduce框架包括一个单一的ResourceManager,每个集群节点一个NodeManager,每个应用一个MRAppMaster节点。
 
基本使用:
 
客户应用设置输入和输出位置=》提供实现map和reduce方法=》haddoop 任务客户端提交任务,同时向ResourceManager提交配置。
 
ResourceManager负责将提交的任务配置项从节点分发,调度任务,监控任务,向客户端提供任务状态及诊断信息。
 
数据形式:
 
mapreduce 框架以 k-v 形式操作数据,输入输出处理;
 
  • key 和 value 需要被序列化,通过实现 Writable 接口,以支持序列化;
  • key 对象还需要实现 WritableComparable 接口,以支持排序需求。
  • 基本处理流程:(input) <k1, v1> -> map -> <k2, v2> -> combine -> <k2, v2> -> reduce -> <k3, v3> (output)
 
Mapper:
 
将输入的k-v 键值对映射转换到中间 k-v 键值对,转换为单独的任务,中间类型和输入类型可以不同,一个输入键值对可能映射转换为0个或多个输出键值对。
 
map结果并不直接存储磁盘,会利用缓存做一些与排序处理,调用combiner,压缩,按key分区,排序等,尽量减少结果的大小。map完成后通知task,reduce进行处理。
  • 每个map拥有一个循环内缓冲区(默认100m),容量达到80%,则后台线程开始将内容写入磁盘文件,不妨碍map继续写入缓冲,缓冲区满,则等待。
  • 写文件使用round-robin方式,写入文件前,将数据按照reduce分区,对于每个分区,根据key排序,可能的话,执行combiner操作。
  • 每次到达缓冲区阈值,都会创建一个文件,map结束前,会执行文件合并(数量不超过3个)和排序。或者压缩(减少数据大小)。
  • 如果从未达到阈值,则不创建文件,直接使用内存。这样最高效。配置可能合适大小的缓冲区(io.file.buffer.size,默认4kb)。
  • map完成,通知任务管理器,reduce可以开始复制结果数据进行使用。
 
Reducer:结果写入到hdfs中,归并处理为小批量结果
 
  • shuffle:从mapper获取相关的结果,排序输出到reduce,http。分配尽可能多的内存
  • sort:将reduce的输入分组
  • reduce:执行reduce方法,处理输入;reduce的数量应为0.95~1.75*节点数。0.95使得所有的reduce可以被全部启动执行;1.75使得执行最快的节点开始执行第二轮,第三轮...;数值越大,负载越大,增加了负载均衡需求,降低了失败成本;reducetask设置为0,则直接跳过reduce阶段,map结果直接输出到FileSystem中
 
哈希分区是默认的分区类型:HashPartitioner is the default Partitioner.
 
Job is typically used to specify the Mapper, combiner (if any), Partitioner, Reducer, InputFormat, OutputFormat implementations. FileInputFormat indicates the set of input files (FileInputFormat.setInputPaths(Job, Path…)FileInputFormat.addInputPath(Job, Path)) and (FileInputFormat.setInputPaths(Job, String…)FileInputFormat.addInputPaths(Job, String)) and where the output files should be written (FileOutputFormat.setOutputPath(Path)).
 
 
job:提交任务,跟踪处理,访问任务报告,日志获取mapreduce集群状态。
 
job提交过程:
 
  • 检查输入输出
  • 计算InputSplit values
  • 为 DistributedCache 设置必要的计算信息
  • 复制jar及配置到mapreduce系统文件夹
  • 提交任务到ResourceManager,监控状态
 
InputSplit:
 
public interface InputSplit extends Writable {
    long getLength() throws IOException;//split 大小,支持根据size排序
 
    String[] getLocations() throws IOException;//获取存储该分片的数据所在节点位置信息
}
 
  • 代表一个逻辑分片,并没有真正的存储数据,提供了如何将数据分片的方法。
  • 内部有Location信息,利于数据局部化。
  • 一个InputSplit给一个单独的map处理
  • mapper处理的键值对象,默认为FileSplit。
  • byte-oriented view;由RecordReader处理成record-oriented view。
 
 
通常一个split对应一个block,使得map可以在存储由当前数据的节点上运行当本地任务,不需要通过网络跨节点调度任务。
 
大小配置: mapred.min.split.size, mapred.max.split.size, block.size
 
获取文件在hdfs上的路径及block信息,根据splitsize对文件进行切分,默认splitsize = blocksize = 64m
 
 
RecordReader:
 
将InputSplit 拆分为k-v 键值对。
 
 
CombineFileInputFormat:将若干个InputSplit打包,避免过多的map任务(split数目决定了map任务数),
 
 
OutputFormat:验证输出配置;写输出文件。
 
DistributedCache 是mapreduce提供的一项机制,用于缓存应用需要的文件(文本,压缩包,jar等)
 
应用通过url(hdfs://url)配置需要缓存的文件;DistributedCache嘉定需要缓存的文件都已经在FileSystem中。
 
在从节点执行任务之前,mapreduce会将需要的文件拷贝到相应节点,
 
DistributedCache会跟踪相应文件的更改时间戳,缓存的文件在任务运行期间不可以被应用或者外部更改。
 
DistributedCache可以被用作文件分发。运行jar,配置等
 
 mapreduce.job.cache.file=file1,file2
 
mapreduce.job.cache.archive=
 
private:本地私有文件;针对相应的job使用;public:公共全局文件夹,被所有任务共享使用。
 
 
 

MapReduce 基础学习的更多相关文章

  1. 零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce(转)

    零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce:http://www.aboutyun.com/thread-7567-1-1.html mapreduce学习目录总结 ...

  2. 零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce

      此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结.五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解:hadoop分为h ...

  3. Hadoop 综合揭秘——MapReduce 基础编程(介绍 Combine、Partitioner、WritableComparable、WritableComparator 使用方式)

    前言 本文主要介绍 MapReduce 的原理及开发,讲解如何利用 Combine.Partitioner.WritableComparator等组件对数据进行排序筛选聚合分组的功能.由于文章是针对开 ...

  4. 零基础学习hadoop到上手工作线路指导(编程篇)

    问题导读: 1.hadoop编程需要哪些基础? 2.hadoop编程需要注意哪些问题? 3.如何创建mapreduce程序及其包含几部分? 4.如何远程连接eclipse,可能会遇到什么问题? 5.如 ...

  5. 零基础学习hadoop到上手工作线路指导(中级篇)

    此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结. 五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解: hadoop分为h ...

  6. Spark基础学习精髓——第一篇

    Spark基础学习精髓 1 Spark与大数据 1.1 大数据基础 1.1.1 大数据特点 存储空间大 数据量大 计算量大 1.1.2 大数据开发通用步骤及其对应的技术 大数据采集->大数据预处 ...

  7. [Hadoop in Action] 第4章 编写MapReduce基础程序

    基于hadoop的专利数据处理示例 MapReduce程序框架 用于计数统计的MapReduce基础程序 支持用脚本语言编写MapReduce程序的hadoop流式API 用于提升性能的Combine ...

  8. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  9. 如何从零基础学习VR

    转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...

随机推荐

  1. python第十课——循环结构收尾

    2.4.time模块的初体验 sleep(sec)函数:程序一旦执行到sleep()函数,会立即休眠sec秒,等到时间到了,自动醒过来,然后继续往下执行... 思路步骤: 第一步:导入time模块 i ...

  2. AOP:选择正确的时机进行编织

    在本文中,我们将采用三种重要的实现的例子,来实践本文提出的概念.这三种 AOP 实现是 AspectJ,Spring 和 JBoss.通过比较他们在 Weave 时机方面的不同,来获得对于如何选择 W ...

  3. [SCOI2012]奇怪的游戏

    题目 话说有没有跟我一样直接猜了一个最大值不会改变这样一个二乎乎的结论之后交上去保龄的呀 首先看到棋盘,选择相邻的格子,非常经典的黑白染色 显然那个二乎乎的结论是错的,随便就能\(hack\)了 于是 ...

  4. DB2创建表、操作表等常用命令

    转载:http://hi.baidu.com/ufobject/item/7fd03aeebf7be1266dabb881 一.创建库表 1.创建库 1).创建数据语句 CREATE DATABASE ...

  5. 关于Android

    1:Handle与多线程 Handle是什么?官方说明:handle是Android给我们提供用来更新UI的一套机制,也是一套消息处理的机制.可以看出handle主要就是两个功能,一个是更新UI,另一 ...

  6. 【 腾讯敏捷转型No.4 】为什么敏捷团队不要超过15人

    早期,腾讯公司的架构是比较简单的.从上至下分别是:公司——商业单元(BU)——部门——组——员工,每个部门基本上就是负责一个大的产品,每个组都是按照专业进行分工和管理,例如:产品组.终端组.后台组.设 ...

  7. 实现点击到底部、顶部、指定div功能

    顶部: $(".back_top").click(function () { scrollTo(0, 0); }); function goTop() { $('html, bod ...

  8. Vue+axios 实现http拦截及vue-router拦截

    现如今,每个前端对于Vue都不会陌生,Vue框架是如今最流行的前端框架之一,其势头直追react.最近我用vue做了一个项目,下面便是我从中取得的一点收获. 基于现在用vue+webpack搭建项目的 ...

  9. Bugku Writeup —文件上传2(湖湘杯)

    我们先来看下题目,题目说明是文件上传 我们可以尝试通过构造payload来进行测试 php://filter/read=convert.base64-encode/resource=flag 获取到f ...

  10. spring boot 资料

    http://412887952-qq-com.iteye.com/blog/2344171 http://study.163.com/course/courseMain.htm?courseId=1 ...