MapReduce API 基本概念

在正式分析新旧 API 之前,先要介绍几个基本概念。这些概念贯穿于所有 API 之中,因此,有必要单独讲解。

1、 序列化

序列化是指将结构化对象转为字节流以便于通过网络进行传输或写入持久存储的过程。

反序列化指的是将字节流转为结构化对象的过程。在 Hadoop MapReduce 中,序列化的主要作用有两个:永久存储和进程间通信。

为了能够读取或者存储 Java 对象,MapReduce 编程模型要求用户输入和输出数据 中 的 key 和 value 必 须 是 可 序 列 化 的。 在 Hadoop MapReduce 中, 使 一 个 Java 对 象可序列化的方法是让其对应的类实现 Writable 接口。但对于 key 而言,由于它是数据排序的关键字,因此还需要提供比较两个 key 对象的方法。为此,key 对应类需实现WritableComparable 接口,它的类如图 3-3 所示 。

2、Reporter 参数

Reporter 是 MapReduce 提 供 给 应 用 程 序 的 工 具。 如 图 3-4 所 示, 应 用 程 序 可 使 用Reporter 中的方法报告完成进度(progress)、设定状态消息(setStatus)以及更新计数器(incrCounter)。

Reporter 是一个基础参数。MapReduce 对外提供的大部分组件,包括 InputFormat、Mapper 和 Reducer 等,均在其主要方法中添加了该参数。

3、回调机制

回调机制是一种常见的设计模式。它将工作流内的某个功能按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。

Hadoop MapReduce 对外提供的 5 个组件(InputFormat、Mapper、Partitioner、Reducer 和

OutputFormat)实际上全部属于回调接口。当用户按照约定实现这几个接口后,MapReduce运行时环境会自动调用它们。如图 3-5 所示,MapReduce 给用户暴露了接口 Mapper,当用户按照自己的应用程序逻辑实现自己的 MyMapper 后,Hadoop MapReduce 运行时环境会将输入数据解析成 key/value 对,并调用 map() 函数迭代处理。

原文发布于微信公众号 - 加米谷大数据(DtinoneBD)

原文发表时间:2018-03-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员的SOD蜜

消息服务框架使用案例之--大文件上传(断点续传)功能

消息服务框架使用案例之--大文件上传(断点续传)功能 一、分块上传和断点续传原理 在我们的一个产品应用中,客户需要上传大量的文件到服务器,其中不乏很大的视频文件...

91150
来自专栏拂晓风起

“class”类型重定义 || 防止头文件重复加载 || 两个类之间互相引用

17940
来自专栏java学习

Hibernate学习笔记2

定义hbm.xml映射文件和pojo类时都需要定义主键,Hibernate中定义的主键类型包括:自然主键和代理主键:

11340
来自专栏信安之路

PHP使用了PDO还可能存在sql注入的情况

“用 PDO 来防止 SQL 注入。”大概学过 PHP 的都听说过这句话。代码中出现了 PDO 就行了吗?答案肯定是否定的。接下来给大家介绍几种使用了 PDO ...

42400
来自专栏me的随笔

使用CodeFirst创建并更新数据库

在使用Entity Framwork的三种方式(ModelFist、DBFirst、CodeFirst)中,CodeFirst方式书写的代码最为干净。

35340
来自专栏Linux驱动

C-fopen,fwrite,fread,fseek笔记

FILE * fopen(const char * path,const char * mode);

24820
来自专栏Hadoop实操

如何使用Java连接Kerberos的Kafka

Kafka从0.8版本以后出了新的API接口,用于异步方式发送消息,性能优于旧的API,本篇文章主要使用新的API接口进行测试。继上一篇文章如何通过Cloude...

87240
来自专栏V站

SQL注入基础-基于Sqli-lab平台实战

有关SQL注入的各种定义阐述已经很多,大家可自行使用搜索引擎搜索即可,小东不再赘述。

29850
来自专栏我的博客

TP入门第三天

1、系统常量 TP2.1版本:(蓝色是3.0中去掉) __ROOT__  : 网站根目录地址  __APP__  : 当前项目(入口文件)地址  __GROUP...

28450
来自专栏AILearning

Apache Zeppelin 中 Spark 解释器

概述 Apache Spark是一种快速和通用的集群计算系统。它提供Java,Scala,Python和R中的高级API,以及支持一般执行图的优化引擎。Ze...

476100

扫码关注云+社区

领取腾讯云代金券