mapreduce在编程的时候,基本上一个固化的模式,没有太多可灵活改变的地方,除了以下几处:

1、输入数据接口:InputFormat ---> FileInputFormat(文件类型数据读取的通用抽象类) DBInputFormat (数据库数据读取的通用抽象类)

默认使用的实现类是: TextInputFormat job.setInputFormatClass(TextInputFormat.class)

TextInputFormat的功能逻辑是:一次读一行文本,然后将该行的起始偏移量作为key,行内容作为value返回

2、逻辑处理接口: Mapper

完全需要用户自己去实现其中 map() setup() clean()

3、map输出的结果在shuffle阶段会被partition以及sort,此处有两个接口可自定义:

Partitioner

有默认实现 HashPartitioner,逻辑是 根据key和numReduces来返回一个分区号; key.hashCode()&Integer.MAXVALUE % numReduces

通常情况下,用默认的这个HashPartitioner就可以,如果业务上有特别的需求,可以自定义

Comparable

当我们用自定义的对象作为key来输出时,就必须要实现WritableComparable接口,override其中的compareTo()方法

4、reduce端的数据分组比较接口 : Groupingcomparator

reduceTask拿到输入数据(一个partition的所有数据)后,首先需要对数据进行分组,其分组的默认原则是key相同,然后对每一组kv数据调用一次reduce()方法,并且将这一组kv中的第一个kv的key作为参数传给reduce的key,将这一组数据的value的迭代器传给reduce()的values参数

利用上述这个机制,我们可以实现一个高效的分组取最大值的逻辑:

自定义一个bean对象用来封装我们的数据,然后改写其compareTo方法产生倒序排序的效果

然后自定义一个Groupingcomparator,将bean对象的分组逻辑改成按照我们的业务分组id来分组(比如订单号)

这样,我们要取的最大值就是reduce()方法中传进来key

5、逻辑处理接口:Reducer

完全需要用户自己去实现其中 reduce() setup() clean()

6、输出数据接口: OutputFormat ---> 有一系列子类 FileOutputformat DBoutputFormat .....

默认实现类是TextOutputFormat,功能逻辑是: 将每一个KV对向目标文本文件中输出为一行

mapreduce程序开发的一些总结相关推荐

  1. Hadoop之MapReduce程序应用一读取专利引用数据集并对它进行倒排

    摘要:MapReduce程序处理专利数据集. 关键词:MapReduce程序   专利数据集 数据源:专利引用数据集cite75_99.txt.(该数据集可以从网址http://www.nber.or ...

  2. windows环境下Eclipse开发MapReduce程序遇到的四个问题及解决办法

    按此文章<Hadoop集群(第7期)_Eclipse开发环境设置>进行MapReduce开发环境搭建的过程中遇到一些问题,饶了一些弯路,解决办法记录在此: 文档目的: 记录windows环 ...

  3. MacOs Hadoop环境搭建 IDEA开发MapReduce程序及调试

    公司有个计算需求,由于不能通过连接公司的Hadoop集群进行本地编写MR程序进行调试 所以直接自己搭建一个本地Hadoop环境进行MR程序测试,然后再讲程序打包丢到公司Hadoop集群 别的不说,直接 ...

  4. YARN应用程序开发流程(类似于MapReduce On Yarn)本内容版权归(小象学院所有)...

    MapReduce On Yarn和MapReduce程序区别 MapReduce On Yarn(由专业人员开发)1 为MapReduce作业运行在YARN上提供一个通用的运行时环境2 需要与Yar ...

  5. 开发MapReduce程序

    配置Configuration 一条configuration的名称可以是任意字符串,值可以是任意数据类型. conf.set("name", "orisun" ...

  6. 我的第一个MapReduce程序(WordCount)

    万事开头难!长途从第一步开始!MapReduce编程也一样! 下面是本人编写的第一个MapReduce程序以及个人的一些理解! 准备条件: 1.安装hadoop 2.工具:eclipse(已经安装了h ...

  7. hive 提交不到yarn_在Linux将MapReduce程序提交给YARN执行

    什么是YARN,有什么作用 YARN(分布式运算资源调度系统) 我们知道我们的分布式文件存储系统HDFS,是将文件进行切块(默认128M).备份(3份)分布式的存储在集群的各个机器上的: 海量的数据需 ...

  8. mapreduce编程实例python-使用Python语言写Hadoop MapReduce程序

    原标题:使用Python语言写Hadoop MapReduce程序 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 在本教程中,我将描述如何使用Pytho ...

  9. MapReduce程序的运行全貌

    为了更详细地探讨mapper和reducer之间的关系,并揭示Hadoop的一些内部工作机理,现在我们将全景呈现WordCount是如 何执行的,序号并非完全按照上图. 1 . 启动 调用驱动中的Jo ...

最新文章

  1. 傅里叶变换的应用之调制解调初步、采样
  2. android studio开关按钮,Android studio实现滑动开关
  3. 弹出窗口里面的子页面控制父页面的解决办法
  4. 2018-07-10 为Chrome和火狐浏览器编写扩展
  5. 优化 .NET Core logging 中的泛型 logger
  6. dubbo知识点总结 持续更新
  7. 一级域名 二级域名,三级域名概念 -- linux内核
  8. Windows高效文件搜索工具/Everything/Listary/uTools
  9. 末学者笔记--Python函数三玄
  10. 爬取boss直聘岗位数据进行数据分析
  11. OpenHarmony短信验证码及倒计时实现
  12. 什么是RF、IF信号
  13. Vue开发版本与生产版本的区别
  14. web和httpd协议
  15. 开源电商Sylius如何执行自动化测试
  16. J - Virus UVA - 12511——最长上升递增子序列
  17. Matlab画图彩色变黑白
  18. 计算机英语名词简释(转载)
  19. conda安装 tensorflow-gpu出现错误
  20. Chrom扩展程序的导入与导出

热门文章

  1. 数据分析专题报告范文6篇_小学生看图写话范文:小熊玩跷跷板?(6篇),让孩子参考练习...
  2. 导出远程mysql数据库中的表_shell脚本实现导出远程mysql数据库表数据至本地
  3. class触发后让另一个class加样式_Bootstrap的按钮组样式
  4. VMware Workstation虚拟机窗口小,无法显示内部系统全部桌面
  5. (十)Linux之等待队列
  6. android wifi设备连接通信,通过wifi与设备进行通信(Android)
  7. antd 左右滑动_如何使用reactjs创建可滑动的侧边栏
  8. com/android/dx/command/main,com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0
  9. 完成数独的算法 python_python实现数独算法实例
  10. matlab 子图title的位置_matlab 画图基本介绍