Hadoop学习记录---MapReduce并行计算模型之介绍
2018-01-10 23:04
405 查看
目录:
1、简单说明2、任务角色
3、任务流程
4、优化
简单说明
MapReduce分为Map和Reduce阶段,一个任务会先将输入的数据切分成独立的小块,被Map任务在DataNode中处理,实现分布处理,然后将Map任务的结果汇总到Reduce任务中做进一步汇总处理,最后输出。因为Hadoop是将计算放在数据节点上,而不是数据放在数据节点,所以计算和存储结点相同。
任务角色
MapReduce任务有两个角色,一个是JobTracker,一个是TaskTracker。JobTracker用于管理和调度工作的,TaskTracker用于执行工作,一个Hadoop集群只有一个JobTracker,JobTracker调度任务给TaskTracker执行,TaskTracker执行返回进度报告,JobTracker记录任务的进行状况,若失败,则交由其他TaskTracke执行。
3、任务流程
每个MapReduce任务被初始化为一个Job,每个Job又分为两个阶段,Map和Reduce,所有的输入和输出都是
<key,value>,先将数据经由InputFormat进行split处理,然后到Map,Map阶段接收一个
<key,value>的输入,然后产生同样
<key,value>形式的中间段输出,这个输出在本地存储,将具有相同key值的数据集合在一起,
<key,{value1,value2...value}>,传给Reduce阶段,然后处理输出结果,这个结果存到HDFS。
Job的初始过程。调用Job进行初始化,使用setJobName来命名Job,setJarByClass(),设置输入输出路径setInputPath()和setOutputPath(),使用setMapperClass()、setReducerClass()设置两个阶段的函数,使用setOutputKeyClass()、setOutputValueClass来设置输出的键值对的类型。
TextInputFormat是默认的输入格式,每个文件会被单独作为Map的输入,每行数据会生成一条记录。
默认的输出格式是TextOutputFormat,会将每条记录以一行的形式存入文本文件。
Map类继承Mapper接口,接口有四个参数,输入的key和value,输出的key和value,然后实现map方法。
Reduce类继承Reduce接口,也有四个参数。
4、Partition分区处理
分区处理在Mapper之后,Reduce之前,主要是把Mapper的中间输出结果分给Reduce。
HashPartitoner使用hash函数来对Mapper的输出进行分区。
int getPartition(K key,V value,int numReduceTasks){ return (key.hashCode() & 4000 ; Integer.MAX_VALUE)% numReduceTasks; }
使用key的哈希码和Reduce的数量来产生分区号。
BinaryPartitioner二进制分区
这个处理的key是BinaryComparable字节可比较类型的,使用BinaryComparable的key的getBytes()方法可以返回对应数组的的一部分求出对应的分区号(Return representative byte array for this instance)。
5、MapReduce计算模型的优化
1、任务调度
把任务分给空闲的机器,分享系统资源,减少I/O消耗。
2、数据预处理与InputSplit的大小
处理前对数据进行预处理,合并数据,设置Map的输入数据大小调节运行时间。因为一个Block会作为一个InputSplit,所以要控制Block的大小。
3、Map和Reduce任务的数量
任务槽是集群能同时运行MapReduce的最大任务数量,Map数量就看Map运行时间来设置,Reduce数量就基于不同考虑设置,设置0.95或者1.75倍。
4、combine
使用Combine函数来合并本地数据,减少网络传输I/O的数据量以减少消耗,可以使用setCombineClass(xxx.class)来指定combine类。
5、压缩
相关文章推荐
- Hadoop 学习笔记二 --- 计算模型MapReduce
- Hadoop学习笔记—4.初识MapReduce 一、神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算。对于大数据
- Hadoop2.6.0学习笔记(一)MapReduce介绍
- Hadoop计算模型MapReduce及其体系结构
- Hadoop学习全程记录——在Eclipse中运行第一个MapReduce程序(转)
- Hadoop学习笔记(7)-简述MapReduce计算框架原理
- 云计算学习笔记---Hadoop简介,hadoop实现原理,NoSQL介绍...与传统关系型数据库对应关系,云计算面临的挑战
- Hadoop学习记录---MapReduce的输入
- (4) Hadoop-MapReduce计算模型
- 云计算学习笔记003---Hadoop简介,hadoop实现原理,NoSQL介绍...与传统关系型数据库对应关系,云计算面临的挑战
- Hadoop学习全程记录——在Eclipse中运行第一个MapReduce程序
- 大数据学习记录(day4)-Hadoop之MapReduce的执行方式
- Hadoop学习全程记录——在Eclipse中运行第一个MapReduce程序
- Hadoop学习全程记录——在Eclipse中运行第一个MapReduce程序
- Hadoop MapReduce编程模型之InputFormat接口学习
- 云计算学习笔记---Hadoop简介,hadoop实现原理,NoSQL介绍...与传统关系型数据库对应关系,云计算面临的挑战
- 大数据学习记录(day3)-Hadoop之MapReduce原理
- Hadoop学习全程记录——在Eclipse中运行第一个MapReduce程序
- hadoop入门学习系列之二hadoop的mapreduce的wordcount流程介绍
- MapReduce并行计算框架介绍