您的位置:首页 > 编程语言

我是菜鸟:MapReduce编程模型

2015-08-06 18:11 399 查看

编程方法

迭代。 遍历输入数据,并将之解析为key/value;

映射。 将输入key/value映射为另外的key/value;

分组。根据key对中间数据进行分组;

规约。 以组为单位对数据进行规约;

迭代。 将最终的key/value对保存在输出文件中。

编程接口体系结构

可以分为2层:

1. 编程接口层 InputFormat, Mapper, Partitioner, Reducer和outputFormat.

2. 工具层: JobControl, ChainMapper/ChainReducer, Hadoop Streaming 和 Hadoop pipes.

一些细节

参数要求: 用户输入的key/value必须是可以序列化的,且key必须是可以排序的。

Reporter 接口。 提供完成进度,设置状态消息和更新计数器。

编程接口层中的5个组件都属于 回调接口, 以实现回调机制。 当用户按照预定实现这几个接口后,运行时环境会自动调用。

java API 解析

作业配置与提交

Hadoop 配置文件

Hadoop中 Common, HDFS 和MapReduce 都配置文件均为xml, 分为系统默认配置文件(core-default.xml, hdfs-defalult.xml, mapred-default.xml)和管理员自定义配置文件(core-site.xml….)。

每个配置文件包括三个配置属性:name,value 和 description. 另外这些参数有2个特性:final 和变量扩展。

final参数 可以防止用户在程序中修改这些属性。

变量扩展:就是将参数中对部分的值通过引用其他已近定义好的,有点如使用JAVA_HOME定义PATH。其格式为:${hadoop.tmp.dir}/mapred/temp

InputFormat 接口的实现

InputFormat<—FileInputFormat

InputFormat<—–DBInputFormat

针对FileInputForma而言,基类FileInputFormat 提供getSplits实现,派生类提供getRecordReader的实现。

getSplits中的算法:文件切分算法和host选择算法。

文件切分算法:

splitSize = max{minSize, min{goalSize, blockSize}}

host 选择算法

按照rack包含的数据量对rack排序,然后在rack内部按照每个node包含的数据量对node进行排序,最后取前N个node的host作为InputSplit的host列表,这里的N为副本数量。

当使用基于fileInputFormat实现InputFormat时候,为了提高Map Task的数据本地性,应当使用InputSize大小与block大小相同。

getRecordReader, 将InputSplit 解析为一个个key/value对。

需要考虑以下内容:

1. 定位记录边界: 用来识别完整的记录。如添加换行付。

2. 解析key/value: TextInputFormat每一行的内容作为value,而将改行在整个文件中的偏移量作为key。

OutputFormat 接口的设计

描述输出数据的格式,将用户提供的key/value对写入特定的文件中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: