码迷,mamicode.com
首页 > 其他好文 > 详细

MapReduce学习小节v1.1

时间:2016-08-03 15:40:23      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:hadoop.mapreduce   shuffling   

1.  MapReduce的几个特点:

易编程,良好的扩展性,高容错性

适合海量数据的离线处理

2.  应用场景:

简单的数据统计、搜索引擎建索引、海量数据查找、复杂数据分析算法实现

3. MapReduce的主要几个过程

Input->splitting->mapping->shuffling->reducing->output

4.  map阶段:由一定数量的Map Task组成,而 Map Task通常包括input,splitting,mapping及shuffling的一部分

spliting阶段:

从HDFS的中输入数据,将各block对应成map task可读取的split(mapreduce中最小的计算单元,默认与block一一对应,可修改)。

mapping阶段:

对输入的split进行格式解析(InputFormat),解析成key/value对(key是行在文件中的偏移量,value是行内容)。

通过MapReduce提供的Partitioner接口,决定map task输出的每条数据交给哪个reduce task处理,默认通过hash(key) mod R实现,用户可以根据需求自定义

map task将生成的key/value对以及partition写入内存缓冲区,通常我们在配置文件中设置缓冲区大小buffer size,同时设置一个溢写spill percent,当缓冲区的数据超过buffer size*spill percent时,启动一个spill线程这一部分数据写入磁盘中,溢写前先按key对其排序。并且可以同步地向buffer写入数据(剩余buffer size*(1-spill percent))

如果设置了combiner(本机reducer),在spill到磁盘之前,运行combiner函数去合并相同的key对应的value,可以减少map task输出数据量(磁盘IO)及减少map->reduce网络传输数据量(网络IO)。hadoop文档中说明即使设置了combiner,也有可能不被执行

每次溢写只能生成一个buffer size*spill percent的文件,map的结果通常由多个spill文件组成。系统使用merge函数对多个spill文件按key合并成一个文件,key/value变成key/group。

reduce阶段:由一定数量的Reduce Task组成,每个reduce task包括一部分shuffling,reducing,output组成

每个reduce task启动溢写数据copy线程(Fetcher)远程拷贝各个map task的最终溢出文件(保存在硬盘上)对应的数据。

采用同map task中merge同样的过程,数据来源于不同的map task,不断对copy过来的数据进行merge,最终形成一个文件(可能保存在内存中,也可能保存在磁盘中)

reducing:对merger后的最终文件进行数据处理reduce,执行编写的reduce函数,将结果写入HDFS中

5. mapreduce 2.XX配置文件/etc/hadoop/mapred-site.xml的几个主要参数

mapreduce.framework.name  #yarn

mapreduce.jobtracker.http.address  #master:50030

mapreduce.jobtracker.address  #master:9001

mapreduce.jobhistory.address  #JobHistory Server地址 master:10020

mapreduce.jobhistory.webapp.address  #JobHistory Server Web界面地址 master:19888

mapreduce.map.sort.spill.percent   #内存缓冲区溢出阀值 0.8

mapreduce.task.io.sort.mb  #内存缓冲区大小  100

6.  数据本地性:任务运行在它将处理的数据所在的节点,则该任务具有“数据本地性”

7.  推测执行机制:

作业完成时间取决于最慢的任务完成时间,任务处理速度慢的任务,启动一个备用任务同时任务,谁先运行完,则采用谁的结果

任务间存在严重的负载倾斜,不能启用

特殊任务,比如向数据中心写数据,不能启动

8. mapreduce三种编程方式:

java:最原始的方式

hadoop streaming :支持多语言(shell、python等)

hadoop pipes:支持c/c++


本文出自 “大废” 博客,请务必保留此出处http://bigtrash.blog.51cto.com/8966424/1833842

MapReduce学习小节v1.1

标签:hadoop.mapreduce   shuffling   

原文地址:http://bigtrash.blog.51cto.com/8966424/1833842

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!