InputFormat到key-value生成流程,reduce写出数据流程
2019独角兽企业重金招聘Python工程师标准>>>
inputformat读取数据流程
public abstract class InputFormat<K, V> {public abstractList<InputSplit> getSplits(JobContext context) throws IOException, InterruptedException;public abstractRecordReader<K,V> createRecordReader(InputSplit split,TaskAttemptContext context) throws IOException,InterruptedException;}public abstract class FileInputFormat<K, V> extends InputFormat<K, V> {public class TextInputFormat extends FileInputFormat<LongWritable, Text> {getSplits方法,获得对输入文件的切分数量,每一个split对应一个map。
创建RecordReader,该RecordReader接收切分好的split,实现nextKeyValue、getCurrentKey、getCurrentValue。如下所示,每个map类都会继承Mapper类,在Mapper类中,run方法会调用InputFormat中的RecordReader来获得key、valuepublic class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {/*** Expert users can override this method for more complete control over the* execution of the Mapper.* @param context* @throws IOException*/public void run(Context context) throws IOException, InterruptedException {setup(context);try {while (context.nextKeyValue()) {map(context.getCurrentKey(), context.getCurrentValue(), context);}} finally {cleanup(context);}}
}
reduce写出数据流程:
reduce读取map输出的中间结果
org.apache.hadoop.mapreduce.Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
public void run(Context context) throws IOException, InterruptedException {setup(context);try {while (context.nextKey()) {//调用reduce方法,该方法一般由自定义的业务reducer重写reduce(context.getCurrentKey(), context.getValues(), context);Iterator<VALUEIN> iter = context.getValues().iterator();if(iter instanceof ReduceContext.ValueIterator) {((ReduceContext.ValueIterator<VALUEIN>)iter).resetBackupStore(); }}} finally {cleanup(context);}
}/*** 自定义reducer,重写父类reduce方法*/
public class IssueDataRecordDistinctReducer extends Reducer<Text, LongWritable, NullWritable,Text> {private NullWritable nullKey = NullWritable.get();protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {context.write(nullKey, new Text("hello"));
}}context.write(nullKey, new Text("hello"));
reduce中,每一次context.write操作都会调用自定义OutputFormat中的RecordWrite类中的write方法
转载于:https://my.oschina.net/sniperLi/blog/500341
InputFormat到key-value生成流程,reduce写出数据流程相关推荐
- R语言使用knitr生成机器学习模型全流程步骤示例:knitr与自动化结果报告、knitr常用参数
R语言使用knitr生成机器学习模型全流程步骤示例:knitr与自动化结果报告.knitr常用参数 目录
- android生成apk流程,Android Studio生成APK的基本流程
Android Studio生成APK的基本流程 2020年08月14日 | 萬仟网移动技术 | 我要评论 Android Studio生成APK流程修改版本号和文件名安全加固(可选)生成签名apk修 ...
- OpenSSL RSA Key的生成和转换
最近做一些芯片高级安全文件签名的反向验证工作,较多都是进行密钥转换.签名验证和加解密相关的操作,在这里顺带把其中的一些RSA格式转换操作总结一下. 1. RSA Key的生成 生成2048 bit的私 ...
- 在线生成ios证书的流程
假如我们没有mac电脑,生成ios证书的流程比较麻烦,我们可以利用在线工具来生成ios开发证书. 现在APP开发工具来说,用的最多的应该就是香蕉云编.下面我来介绍香蕉云编这个工具,怎么生成IOS开发证 ...
- Activiti第二篇【管理流程定义、执行任务和流程实例、流程变量】
tags: Activiti 上篇Activiti只是一个快速入门案例,这篇就讲定义.部署.查看任务等等的一些细节[涉及到的数据库表.对象等等]... 管理流程定义 管理流程定义主要涉及到以下的4张表 ...
- JAVAWEB开发之工作流详解(二)——Activiti核心API的使用(流程定义和流程实例的管理、流程变量、监听器...)以及与Spring的集成
管理流程定义 设计流程定义文档 bpmn文件 设置方式可以直接使用插件图形化界面进行设置 为某任务节点指定任务执行者 保存后的BPMN文件可以使用XML编辑器打开 BPMN 2.0根节点是defini ...
- Flowable 流程定义(流程模板)的部署及设计的数据库表
一.简介 我们使用了 Spring Boot 之后,默认情况下流程是会自动部署的,基本上不需要我们额外做什么事情,我们称之为默认部署. 有的时候,我们的流程可能并不是提前设计好的,而是项目启动之后,动 ...
- 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )
文章目录 一.APK 文件结构 二.APK 打包流程 三.APK 安装流程 四.安卓虚拟机 一.APK 文件结构 Android 应用的安装包时 以 " .apk " 为后缀的 A ...
- (转)CentOS 7系统详细开机启动流程和关机流程
CentOS 7系统详细开机启动流程和关机流程 原文:http://blog.csdn.net/yuesichiu/article/details/51350654 名称 bootup - 系统启动流 ...
最新文章
- 分析一个文本(英文文章)(300k—500k)中的词出现的频率,并且把频率最高的10个词打印出来。...
- Java课堂测试01及感想
- python flask源码解析_Flask知识全套及源码分析
- adb 提示:error: unknown host service解决方法
- 币安选择InfStones作为以太坊2.0 Staking基础设施服务商
- Python菜鸟入门:day05列表
- 外星人到底在哪?普利茅斯大学新建AI寻系外生命系统
- bus,device,driver三者关系
- 是真的!华为2019年应届博士年薪最高达201万
- 荒野行动为什么不能获取服务器信息,荒野行动获取服务器信息一直不动 服务器信息0解决方法...
- 向量叉乘在永磁同步电机电磁转矩计算中的应用
- FreePic2PDF制作书签
- java gc_Java GC的那些事(1)
- html效果浮窗效果,jQuery实现侧浮窗与中浮窗切换效果的方法
- 计算机 桌面上的文件怎么发送,文本文件如何发送到QQ邮箱里?
- kibana服务器性能要求,kibana 性能监控 apm
- 2012-07-29 入手第一款Apple产品:The New iPad
- whm修改tmp目录空间大小为4096M
- css文字超出省略号代替不起作用解决方法汇总大全
- 汽车电子行业常见工具方法汇总
热门文章
- 【keras】rnn中的LSTM
- Linux下的简单socket编程示例
- Linux: debian/ubuntu下安装和使用Java 11
- redis设置主从复制-slave Replication--解决报错:(error) READONLY You can't write against a read only slave.
- Dapps-是一个跨平台的应用服务商店
- c++学习笔记内联函数,函数重载,默认参数
- 多媒体课程设计android,基于Android的多媒体播放器(课程设计)报告.doc
- angular 定义对象_angular – 使用对象定义定义FomGroup
- flux服务器推消息,在Spring WebFlux响应式处理程序中发送JMS消息:它是否阻塞?
- pythonmysql查询转list_使用Python将Mysql的查询数据导出到文件的方法