赞
踩
目录
maptask并发实例,完全并行运行,互不相干
reducetask并发实例互不相干,依赖与上一个阶段所有的maptask并发实例
1. mapreduce是hadoop的三大重要模块之一
2. mapreduce是一个并发的计算和分析框架,用于计算和分析分布式文件系统上的大数据集。
3. 将计算划分为两个阶段:一个map(映射)阶段,一个reduce(归约)阶段
4. 该框架的开发灵感来源于google的《mapreduce》论文
5. 方便开发人员在不会分布式计算的情况下,开发和运行相关计算程序。
1. 优点
- 适合离线数据处理
- mapreduce编程简单
- 扩展性良好
- 高容错性
2. 缺点
- 不适合实时计算(实时计算:毫秒级别/秒级别,离线计算:秒级别以上)
- 不适合流式计算(mapreduce处理的数据是静态的,不是流式的数据)
- 不适合DAG(有向图)计算
MapReduce在进行作业提交时,会预先对将要分析的原始数据进行划分处理,形成一个个等长的逻辑数据对象,称之为输入分片(inputSplit),简称“分片”。MapReduce为每一个分片构建一个单独的MapTask,并由该任务来运行用户自定义的map方法,从而处理分片中的每一条记录。
a文件 1025MB --- 9块,最后一块是1MB
分析:分片就是记录MapTask要处理的是哪一个块,通过属性记录,因此称之为逻辑数据。
#1. 分片数量越多,优势如下:
-- 处理分片对应的原始数据所花的时间更少,也就是小于一个分片处理整个文件的时间。
-- 每一个分片对应一个MapTask,MapTask是并行运行的,效率高
-- 分片越多,负载均衡就越好。
-- 计算机硬件越好,处理速度越快,就可以腾出时间,计算其他任务。
#2. 分片太小的缺点:
如果分片太小,管理分片的总时间和构建map任务的总时间将决定作业的整个执行时间
#3. 分片太大的缺点:
如果分片跨越两个数据块,那么分片的部分数据需要通过网络传输到map任务运行的节点,占用网络带宽,效率更低
#4 得出结论:
因此最佳分片大小应该和HDFS上的块大小一致。hadoop2.x默认128M.
1. 分片是逻辑数据,记录的是要处理的物理块的信息而已
path,start,length,hosts
2. 块是物理的,是真实存储在文件系统上的原始数据文件。
本质: 逻辑数据
物理数据
出现的时机:
mapreduce程序进行计算时,才会遇到分片概念
hdfs的存储才会涉及到分块的概念
1. maptask调用FileInputFormat的createRecordReader通过分片数据来读取原始数据
2. 会调用nextKeyValue方法获取每行数据,然后返回一个(K,V)对,K是offset,V是一行数据
3. 将k-v对交给Map函数进行处理
4. 每对k-v调用一次map(K,V,context)方法,经过处理,使用context.write(k,v)
5. 写出的数据交给收集器OutputCollector.collect()处理
6. 将数据写入环形缓冲区,并记录写入的起始偏移量,终止偏移量,环形缓冲区默认大小100M
7. 默认写到80%的时候要溢写到磁盘,溢写磁盘的过程中数据继续写入剩余20%
8. 溢写磁盘之前要先进行分区然后分区内进行排序
9. 默认的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。