8.1 Mapreduce输入输出类型

1.1  Mapreduce输入输出类型

(1)mapreduce输入输出类型一致性

Map输入输出类型可以不用,但是map的输出和reduce的输入类型要一致,reduce的输入输出也可不一样。

Map(K1,V1)àlist(K2,V2)

Reduce (K2,list(V2))->list(K3,V3)

如果包含combine函数,如果combine函数和reduce函数一致,则K2和K3一样,V3和V2相同。

Map(K1,V1)àlist(K2,V2)

Combine (K2,list(V2))->list(K2,V2)

Reduce (K2,list(V2))->list(K3,V3)

Partition函数是对键值对进行分区处理的,所有的键值会被分成若干个区,分区存储。Partition函数返回的是分区的索引值。分区完全由K2决定。分区数等于作业的reduce任务个数。键的哈希码被转换成一个非负整数,它由哈希值和最大的整型值做一次按位与操作,然后用分区数进行取模操作,来决定该记录属于哪个分区索引。

Partition(K2,V2)àinteger

(2)Mapreduce类型显示设置

由于java的泛型机制,存在类型擦除,导致运行过程中类型信息并非一直可见,所以hadoop不得不进行明确设定。如果中间结果的类型与输出类型不一致,需要调用setMapOutputKeyClass()等方法显示设置,如果没有显示设置,默认为输出类型。所以可以用少量数据测试下类型是否兼容。可显示设置的类型

新mapreduceAPI中设置的类型

 

旧mapreduceAPI中设置的类型

 

自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:

https://www.cnblogs.com/bclshuai/p/11380657.html

原文地址:https://www.cnblogs.com/bclshuai/p/12242165.html