mapreduce程序开发的一些总结
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程序开发的一些总结相关推荐
- Hadoop之MapReduce程序应用一读取专利引用数据集并对它进行倒排
摘要:MapReduce程序处理专利数据集. 关键词:MapReduce程序 专利数据集 数据源:专利引用数据集cite75_99.txt.(该数据集可以从网址http://www.nber.or ...
- windows环境下Eclipse开发MapReduce程序遇到的四个问题及解决办法
按此文章<Hadoop集群(第7期)_Eclipse开发环境设置>进行MapReduce开发环境搭建的过程中遇到一些问题,饶了一些弯路,解决办法记录在此: 文档目的: 记录windows环 ...
- MacOs Hadoop环境搭建 IDEA开发MapReduce程序及调试
公司有个计算需求,由于不能通过连接公司的Hadoop集群进行本地编写MR程序进行调试 所以直接自己搭建一个本地Hadoop环境进行MR程序测试,然后再讲程序打包丢到公司Hadoop集群 别的不说,直接 ...
- YARN应用程序开发流程(类似于MapReduce On Yarn)本内容版权归(小象学院所有)...
MapReduce On Yarn和MapReduce程序区别 MapReduce On Yarn(由专业人员开发)1 为MapReduce作业运行在YARN上提供一个通用的运行时环境2 需要与Yar ...
- 开发MapReduce程序
配置Configuration 一条configuration的名称可以是任意字符串,值可以是任意数据类型. conf.set("name", "orisun" ...
- 我的第一个MapReduce程序(WordCount)
万事开头难!长途从第一步开始!MapReduce编程也一样! 下面是本人编写的第一个MapReduce程序以及个人的一些理解! 准备条件: 1.安装hadoop 2.工具:eclipse(已经安装了h ...
- hive 提交不到yarn_在Linux将MapReduce程序提交给YARN执行
什么是YARN,有什么作用 YARN(分布式运算资源调度系统) 我们知道我们的分布式文件存储系统HDFS,是将文件进行切块(默认128M).备份(3份)分布式的存储在集群的各个机器上的: 海量的数据需 ...
- mapreduce编程实例python-使用Python语言写Hadoop MapReduce程序
原标题:使用Python语言写Hadoop MapReduce程序 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 在本教程中,我将描述如何使用Pytho ...
- MapReduce程序的运行全貌
为了更详细地探讨mapper和reducer之间的关系,并揭示Hadoop的一些内部工作机理,现在我们将全景呈现WordCount是如 何执行的,序号并非完全按照上图. 1 . 启动 调用驱动中的Jo ...
最新文章
- 傅里叶变换的应用之调制解调初步、采样
- android studio开关按钮,Android studio实现滑动开关
- 弹出窗口里面的子页面控制父页面的解决办法
- 2018-07-10 为Chrome和火狐浏览器编写扩展
- 优化 .NET Core logging 中的泛型 logger
- dubbo知识点总结 持续更新
- 一级域名 二级域名,三级域名概念 -- linux内核
- Windows高效文件搜索工具/Everything/Listary/uTools
- 末学者笔记--Python函数三玄
- 爬取boss直聘岗位数据进行数据分析
- OpenHarmony短信验证码及倒计时实现
- 什么是RF、IF信号
- Vue开发版本与生产版本的区别
- web和httpd协议
- 开源电商Sylius如何执行自动化测试
- J - Virus UVA - 12511——最长上升递增子序列
- Matlab画图彩色变黑白
- 计算机英语名词简释(转载)
- conda安装 tensorflow-gpu出现错误
- Chrom扩展程序的导入与导出
热门文章
- 数据分析专题报告范文6篇_小学生看图写话范文:小熊玩跷跷板?(6篇),让孩子参考练习...
- 导出远程mysql数据库中的表_shell脚本实现导出远程mysql数据库表数据至本地
- class触发后让另一个class加样式_Bootstrap的按钮组样式
- VMware Workstation虚拟机窗口小,无法显示内部系统全部桌面
- (十)Linux之等待队列
- android wifi设备连接通信,通过wifi与设备进行通信(Android)
- antd 左右滑动_如何使用reactjs创建可滑动的侧边栏
- com/android/dx/command/main,com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0
- 完成数独的算法 python_python实现数独算法实例
- matlab 子图title的位置_matlab 画图基本介绍