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写出数据流程相关推荐

  1. R语言使用knitr生成机器学习模型全流程步骤示例:knitr与自动化结果报告、knitr常用参数

    R语言使用knitr生成机器学习模型全流程步骤示例:knitr与自动化结果报告.knitr常用参数 目录

  2. android生成apk流程,Android Studio生成APK的基本流程

    Android Studio生成APK的基本流程 2020年08月14日 | 萬仟网移动技术 | 我要评论 Android Studio生成APK流程修改版本号和文件名安全加固(可选)生成签名apk修 ...

  3. OpenSSL RSA Key的生成和转换

    最近做一些芯片高级安全文件签名的反向验证工作,较多都是进行密钥转换.签名验证和加解密相关的操作,在这里顺带把其中的一些RSA格式转换操作总结一下. 1. RSA Key的生成 生成2048 bit的私 ...

  4. 在线生成ios证书的流程

    假如我们没有mac电脑,生成ios证书的流程比较麻烦,我们可以利用在线工具来生成ios开发证书. 现在APP开发工具来说,用的最多的应该就是香蕉云编.下面我来介绍香蕉云编这个工具,怎么生成IOS开发证 ...

  5. Activiti第二篇【管理流程定义、执行任务和流程实例、流程变量】

    tags: Activiti 上篇Activiti只是一个快速入门案例,这篇就讲定义.部署.查看任务等等的一些细节[涉及到的数据库表.对象等等]... 管理流程定义 管理流程定义主要涉及到以下的4张表 ...

  6. JAVAWEB开发之工作流详解(二)——Activiti核心API的使用(流程定义和流程实例的管理、流程变量、监听器...)以及与Spring的集成

    管理流程定义 设计流程定义文档 bpmn文件 设置方式可以直接使用插件图形化界面进行设置 为某任务节点指定任务执行者 保存后的BPMN文件可以使用XML编辑器打开 BPMN 2.0根节点是defini ...

  7. Flowable 流程定义(流程模板)的部署及设计的数据库表

    一.简介 我们使用了 Spring Boot 之后,默认情况下流程是会自动部署的,基本上不需要我们额外做什么事情,我们称之为默认部署. 有的时候,我们的流程可能并不是提前设计好的,而是项目启动之后,动 ...

  8. 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )

    文章目录 一.APK 文件结构 二.APK 打包流程 三.APK 安装流程 四.安卓虚拟机 一.APK 文件结构 Android 应用的安装包时 以 " .apk " 为后缀的 A ...

  9. (转)CentOS 7系统详细开机启动流程和关机流程

    CentOS 7系统详细开机启动流程和关机流程 原文:http://blog.csdn.net/yuesichiu/article/details/51350654 名称 bootup - 系统启动流 ...

最新文章

  1. 分析一个文本(英文文章)(300k—500k)中的词出现的频率,并且把频率最高的10个词打印出来。...
  2. Java课堂测试01及感想
  3. python flask源码解析_Flask知识全套及源码分析
  4. adb 提示:error: unknown host service解决方法
  5. 币安选择InfStones作为以太坊2.0 Staking基础设施服务商
  6. Python菜鸟入门:day05列表
  7. 外星人到底在哪?普利茅斯大学新建AI寻系外生命系统
  8. bus,device,driver三者关系
  9. 是真的!华为2019年应届博士年薪最高达201万
  10. 荒野行动为什么不能获取服务器信息,荒野行动获取服务器信息一直不动 服务器信息0解决方法...
  11. 向量叉乘在永磁同步电机电磁转矩计算中的应用
  12. FreePic2PDF制作书签
  13. java gc_Java GC的那些事(1)
  14. html效果浮窗效果,jQuery实现侧浮窗与中浮窗切换效果的方法
  15. 计算机 桌面上的文件怎么发送,文本文件如何发送到QQ邮箱里?
  16. kibana服务器性能要求,kibana 性能监控 apm
  17. 2012-07-29 入手第一款Apple产品:The New iPad
  18. whm修改tmp目录空间大小为4096M
  19. css文字超出省略号代替不起作用解决方法汇总大全
  20. 汽车电子行业常见工具方法汇总

热门文章

  1. 【keras】rnn中的LSTM
  2. Linux下的简单socket编程示例
  3. Linux: debian/ubuntu下安装和使用Java 11
  4. redis设置主从复制-slave Replication--解决报错:(error) READONLY You can't write against a read only slave.
  5. Dapps-是一个跨平台的应用服务商店
  6. c++学习笔记内联函数,函数重载,默认参数
  7. 多媒体课程设计android,基于Android的多媒体播放器(课程设计)报告.doc
  8. angular 定义对象_angular – 使用对象定义定义FomGroup
  9. flux服务器推消息,在Spring WebFlux响应式处理程序中发送JMS消息:它是否阻塞?
  10. pythonmysql查询转list_使用Python将Mysql的查询数据导出到文件的方法