大数据

reducer主要有三个阶段

1.Shuffle(一部分):

Reducer通过网络使用HTTP从每个mapper复制排序的输出(K2V2)。

2.Sort:

框架合并按键对reducer输入进行排序(因为不同的mapper可能输出相同的键)。

shuffle和sort阶段是同时发生的,也就是说,在提取输出时,它们是合并的。

SecondarySort :

要对值迭代器返回的值进行二级排序,应用程序应该使用二级键扩展键并定义一个分组比较器。

键将使用整个键进行排序,但将使用分组比较器进行分组,以决定在同一个调用中发送哪些键和值以进行缩减。

分组比较器是通过Job.setGroupingComparatorClass(Class)指定的。

排序顺序由Job.setSortComparatorClass(Class)控制。

例如,假设您希望找到重复的web页面,并将它们都标记为“最知名”示例的url。你会这样做:

地图输入键:url

地图输入值:文档

地图输出键:文档校验和,url pagerank

地图输出值:url

瓜分者:通过校验和

OutputKeyComparator:通过校验和然后减少pagerank

OutputValueGroupingComparator:通过校验和

3、Reduce

在这个阶段中,对于排序输入中的每个<key(值的集合)>

调用reduce(对象、Iterable、org.apache.hadoop.mapreduce. reduce. context)方法。

reduce任务的输出通常通过上下文写入记录写入器。写(对象,对象)。

 

总结:

reducer个数由job.setNumReduceTasks(tasks)控制。

程序有多少个输出结果reducer个数,如果没有reducer那么由mapper个数

mapper个数由inputsplit控制,inputsplit数由块数控制

注意: 如果一个文件大小 小于块大小*1.1 大于块大小 有2个块 有1个inputsplit

 

 

 

10.26

InputFormat:

InputFormat描述了Map-Reduce作业的输入规范。

Map-Reduce框架依赖于作业的InputFormat:

1.验证job的输入规范。

2.将输入文件分解为逻辑inputsplit,每个inputsplit都被分配给一个单独的mapper。

3.提供RecordReader实现,用于从逻辑InputSplit中收集输入记录,以便mapper进行处理。

基于文件的inputformat(通常是FileInputFormat的子类)的默认行为是根据输入文件的总大小(以字节为单位)

将输入拆分为逻辑inputsplit。但是,输入文件的文件系统块大小被视为输入分割的上限。

可以通过mapreduce.input.fileinputformat.split.minsize设置分割大小的下界。

 

FileInputFormat:

isSplitable(FileSystem fs, Path filename)

是否切分

getSplits(JobConf job, int numSplits)

获取逻辑切分

TextInputFormat:

FileInputFormat默认使用这个

isSplitable是否可切分

判断是否压缩,如果没有压缩返回true

判断是否属于可以切分的压缩模式,若属于返回true

压缩

文件压缩的两大好处:减少存储文件所需要的磁盘空间,并加速数据网络和磁盘上的传输

详见权威指南99页

 

 

 

LineRecordReader:

将键视为文件中的偏移量,将值视为行。

next()

给下一个KV赋值

 

对aa.txt文件可能被分成两个块进行分析分别求奇数偶数行和

如何判断奇偶行???

重写TextInputFormat

isSplitable

getRecordReader

重写LineRecordReader

构造方法

next

编写mapper

编写reducer

编写驱动

注意版本选择老版本的



posted @ 2021-09-21 09:12  大风吹爱护  阅读(70)  评论(0编辑  收藏  举报