mapreduce编程准备

学习mapreduce编程之前需要做一些概念性的了解,这是做的一些课程学习笔记,以便以后时不时的翻出来学习下,之前看过一篇文章大神们都是时不时的翻出基础知识复习下,我也做点笔记吧。

1.mapreduce定义

  • 源于Google的MapReduce论文(如果想更深入的学习,可以搜一下)

  √  发表于2004年12月

√  Hadoop Mapreduce是Google MapReduce克隆版。

  • MapReduce特点

√  易于编程

√  良好的扩展性

√  高容错性

√  适合PB级以上海量数据的离线处理

2.应用场景和不擅长之处

  • 常见mapreduce应用场景

简单的数据统计,比如网站的pv,uv统计
搜索引擎建索引
海量数据查找
复杂数据分析算法实现

聚类算法
分类算法
推荐算法
图算法

  • 不擅长的地方

    实时计算:
            像mysql一样,在毫秒级或者秒级返回结果。
    流式计算:
        MapReduce的输入数据集是静态的,不能动态变化。
        mapreduce自身的设计特点决定了数据源必须是静态的。
    DAG计算:
        多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。

3.mapreduce编程模型基本过程

实例还是用最常见的入门级WordCount:

整体过程:

  1. 先将数据切分成一个个小的分片,每个分片叫一个splitting 交个map去执行。
  2. 进行简单的拆分 统计相关词的个数 比如(Deer 1  Bear 1)。
  3. shuffling并sort 就是进行排序后将相同的k发送到同一个节点上,统计分析。
  4. reduce 就是进行最后的累加输出结果。

MapReduce编程模型:

  • input:一系列的key/value。

    这个是mapreduce框架解析的,是通过inputformat模块进行处理转换发送给map函数的,inputformat可以自己开发。

  • 用户提供两个函数实现:

    map(k,v) -> k1,v1
      就是将输入的k 和v进行计算输出为新的k1和v1 比如常见的wordcount实例,就是将输入的(k行号)和值(v单词) 统计分析后输出为k1(单词) ,v1(出现的次数)
    reduce(k1,list[v1])->k2,v2
      这个地方需要详细理解一下,因为在输入到reduce之前 mapreduce框架已经帮我们做了一些工作,就是上面提到的shuffling和sort已经将相同的值做了汇总 所以输入的k1和v1变成了k1(单词) v1(一组单词的数量[1,2,3,4]) 经过reduce计算后输出为k2(单词)和v2(单词总数)。

  • (k1,v1)是中间key/value结果对。
  • output:一系列(k2,v2)对。

示例图:

4.mapreduce编程模型

Mapreuce将作业的整个运行过程分为两个阶段:map阶段和reduce阶段

  • Map阶段由一定数量的map task组成

    √ 输入数据格式解析:inputFormat  :去负责取分片并解析成map的输入格式k,v
    √ 输入数据处理:Mapper :根据业务逻辑处理k和v
    √ 数据分组:Partitioner  :就是把相同的k分配给相同的reduce 一般用hash算法处理路由策略 (这个地方可以自己定义)需要学习。

  • Reduce阶段由一定数量的reduceTask组成

    √ 数据远程拷贝:  就是将map处理后的结果远程拷贝到相关的处理集群上。  ----需要理解下
    √ 数据按照key排序 :就是shuffling和sort阶段。
    √ 数据处理:reducer :根据业务逻辑处理k和v。
    √ 数据输出格式:outputFormat :结果输出可以输出到hbase 或者hdfs (这个也可以自定义)。

内部逻辑:

MapReduce编程模型-InputFormat

  • 文件分片(inputSplit)方法

    √ 处理跨行问题。

  • 将分片数据解析成key/value对

    √ 默认实现是TextInputFormat。

  • TextInputFormat

    √ key是行在文件中的偏移量,value是行内容。

    √ 若行被截断,则读取下一个block的前几个字符。

MapReduce编程模型-Split与block

  • Block

    √ HDFS中最小的数据存储单元。

    √ 默认是128MB。

  • spilt

    √ MapReduce中最小的计算单元。

    √ 默认与block一一对应

  • block与split

    √ split与block的对应关系是任意的,可以自己控制---需要注意的是不要看到默认一一对应就觉得是都是这样,有可能一个split对应好结果block。

MapReduce编程模型-combiner

  • combiner可以看成是一个local reducer

    √ 合并相同key对应的value值。
    √ 通常与reduce逻辑一样。

  • 好处:

    √ 可以减少map task输出的数据量(减小磁盘io)。
    √ 可以reduce-map网络传输的数据量(减小网络io)。

  • 如何正确使用:

    √ 结果叠加的可以使用。
    √ sum可以使用 但是求平局值的时候不能使用。

MapReduce编程模型-patitioner

  • patitioner决定了MapTask 输出的每条数据交给哪个Reduce Task处理  ----这个需要查询一下 不是自己远程拷贝么,怎么能制定了
  • 默认实现时hash(key) mod R

    √ R是reduce Task数目。

    √ 允许用户自定义。

  • 很多情况下需要自定义Partitioner

    √ 比如:hash(hostname(URL)) mod R 确保相同域名的网页交给同一个Reduce Task处理。

mapreduce编程--(准备篇)的更多相关文章

  1. hadoop2.2编程:使用MapReduce编程实例(转)

    原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 从网上搜到的一篇hadoop的编程实例,对于初学者真是帮助太大 ...

  2. [转]Hadoop集群_WordCount运行详解--MapReduce编程模型

    Hadoop集群_WordCount运行详解--MapReduce编程模型 下面这篇文章写得非常好,有利于初学mapreduce的入门 http://www.nosqldb.cn/1369099810 ...

  3. MapReduce编程模型及其在Hadoop上的实现

    转自:https://www.zybuluo.com/frank-shaw/note/206604 MapReduce基本过程 关于MapReduce中数据流的传输过程,下图是一个经典演示:  关于上 ...

  4. MapReduce编程实战之“调试”和"调优"

    本篇内容 在上一篇的"初识"环节,我们已经在本地和Hadoop集群中,成功的执行了几个MapReduce程序,对MapReduce编程,已经有了最初的理解. 在本篇文章中,我们对M ...

  5. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本3(九)

    不多说,直接上干货! 下面,是版本1. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本1(一) 下面是版本2. Hadoop MapReduce编程 API入门系列之挖掘气象数 ...

  6. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本2(十)

    下面,是版本1. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本1(一) 这篇博文,包括了,实际生产开发非常重要的,单元测试和调试代码.这里不多赘述,直接送上代码. MRUni ...

  7. 批处理引擎MapReduce编程模型

    批处理引擎MapReduce编程模型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MapReduce是一个经典的分布式批处理计算引擎,被广泛应用于搜索引擎索引构建,大规模数据处理 ...

  8. Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)

    不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...

  9. [Hadoop入门] - 1 Ubuntu系统 Hadoop介绍 MapReduce编程思想

    Ubuntu系统 (我用到版本号是140.4) ubuntu系统是一个以桌面应用为主的Linux操作系统,Ubuntu基于Debian发行版和GNOME桌面环境.Ubuntu的目标在于为一般用户提供一 ...

随机推荐

  1. 理解WCF中的Contracts

    WCF中的Contracts WCF通过Contract来说明服务和操作,一般包含五种类型的Contract:ServiceContract,OperationContract,FaultContra ...

  2. 安装ChemOffice 15.1就是这么简单

    化学绘图软件ChemDraw出了最新版ChemOffice 15.1了,其下有三个不同组件,其中ChemDraw15.1 Pro使用范围最广.当我们下载完软件后就需要对其进行安装,一般按照流程来就没有 ...

  3. 鼠标滑入滑出,输入框获得失去焦点后触发事件的N种方法之一二

    熟悉position的用法 <!doctype html><html lang="en"> <head> <meta charset=&q ...

  4. Linux shell 1-初步认识

    1.什么是linux linux是一种操作系统,它可划分为以下四部分 1.linux内核(Linux系统的核心,负责管理系统内存,硬件驱动,文件系统等) 2.GNU工具(一组软件工具,提供一些类UNI ...

  5. .net webapi项目跨域问题及解决方案

    问题: 1.项目完成,部署到不同的iis版本上,跨域访问有的通有的不通 解决办法: 1.将复杂请求改为简单请求 2.代码中去掉所有跨域设置,配置中添加或修改节点 <system.webServe ...

  6. IIS服务中五种身份验证的灵活运用

    微软IIS服务是一项经典的Web服务,可以为广大用户提供信息发布和资源共享功能.身份认证是保证IIS服务安全的基础机制,IIS支持以下5种 Web 身份认证方法: 一.匿名身份认证 如果启用了匿名访问 ...

  7. RecyclerView上拉隐藏Toolbar,下拉显示

    RecyclerView下拉隐藏Toolbar,上拉显示效果图 先说个事:最近我准备做个开源的博客园android客户端!符合Google最新的material design设计风格的!不知道有没有小 ...

  8. 深入java虚拟机(一) 虚拟机内存结构

    java虚拟机所管理的内存区域(运行时数据区)主要分为如下几个部分:堆(heap).方法区(method area).虚拟机栈(VM stack).本地方法栈(native method stack) ...

  9. 【BZOJ3813】奇数国 线段树+欧拉函数

    [BZOJ3813]奇数国 Description 给定一个序列,每次改变一个位置的数,或是询问一段区间的数的乘积的phi值.每个数都可以表示成前60个质数的若干次方的乘积. Sample Input ...

  10. 【BZOJ4627】[BeiJing2016]回转寿司 SBT

    [BZOJ4627][BeiJing2016]回转寿司 Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿司带给小Z的味觉感 ...