什么是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. [T-ARA][Goodbye, OK]

    歌词来源:http://music.163.com/#/song?id=22704437 作曲 : 안영민 , 이유진 [作曲 : a-nyeong-min , i-yu-jin] 作词 : 안영민 ...

  2. ubuntu配置默认python版本并安装pip

    ubuntu 16.04本身是自带python的,他本身是自带2.X和3.X,两个版本,默认的是2.X.这里记录一下如果在版本间切换以及如何把python版本切换到3.X下的方法. 1.查看Ubunt ...

  3. 2754. [SCOI2012]喵星球上的点名【后缀数组】

    Description a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣.   假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串 ...

  4. P3694 邦邦的大合唱站队

    题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶像. 现在要求重新安排队列,使来自同一 ...

  5. Python之Flask框架使用

    Flask和Django.Bottle号称Python中的强大又简单的Web框架. Flask是一个使用Python编写的轻量级Web应用框架.基于Werkzeug WSGI工具箱和Jinja2 模板 ...

  6. empty与isset,null与undefined

    一. null VS undefined VS NaN 1. null 定义:null是特殊的object,是空对象,没有任何属性和方法. document.writeln(typeof null); ...

  7. c++getline()、get()等

    1.cin 接受一个字符串,遇“空格”.“TAB”.“回车”都结束 2.cin.get() cin.get(字符变量名)可以用来接收字符 只能接收一个字符 cin.get(字符数组名,接收字符数目)用 ...

  8. PAT乙级1032

    1032 挖掘机技术哪家强 (20 分)   为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 ...

  9. $2018/8/19 = Day5$学习笔记 + 杂题整理

    \(\mathcal{Morning}\) \(Task \ \ 1\) 容斥原理 大概这玩意儿就是来用交集大小求并集大小或者用并集大小求交集大小的\(2333\)? 那窝萌思考已知\(A_1,A_2 ...

  10. Angular动态表单生成(五)

    动态表单生成之布局 到上面的篇章为止,我们已经把表单比较完整的生成出来了,也实现了一些验证功能,可以说,我们截止这里,就已经可以满足我们的大部分表单生成需求了~ 但是: 目前来说,我们对于表单的布局只 ...