我是菜鸟: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<—FileInputFormatInputFormat<—–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对写入特定的文件中。相关文章推荐
- 线型表的C++实现
- EXCEL:数字转换成为英文大写代码
- JAVA 希尔排序
- PHP编译过程中常见错误信息的解决方法
- Java类型与变量问题
- java.lang.OutOfMemoryError: GC overhead limit exceeded ECLIPSE解决方法
- [Golang] 从零开始写Socket Server(1): Socket-Client框架
- C++ Builder 将数据库数据导出到Excel中总结
- zend 集成svn
- Visual Basic 14 的 14 大新特性
- Eclipse 打开文件所在位置
- python中ConfigParse模块的用法
- MyEclipse内存溢出问题
- 使用XFire+Spring构建Web Service(一)——helloWorld篇
- mac下安装eclipse+CDT
- Python 简单爬虫抓取糗事百科
- java源代码加密+使用proguard混淆java web项目代码+自定义Classloader
- C++ Builder 基础知识总结中
- Spring中org.springframework.beans.factory.UnsatisfiedDependencyException异常
- ZH奶酪:LAMP环境中如何重新部署一个Yii2.0 web项目