关于reduce和hive的一些疑问

reduce:相同的key为一组,调用一个reduce。我们知道,map端输出的数据为kvp,其中p是根据用户自己定义的办法指定该组kv使用哪个reuduce的,比如天气的例子,有三个reduce,那么用户用key中的年份来除以p得到的余数来确定使用哪个reduce来处理该组数据。P的值分别为0,1,2。

如何判断哪些key为一组呢?使用用户自定义的分组比较器。同一个组一定在一个reduce上来执行,不同的组也可能在同一个reduce上执行。

map有多个,每个map输出的数据都是内部有序的,但是可能包含多个组。shuffle取数据的时候,面对的是内部有序外部无序的多个文件,所以首先要做一个归并。

问题来了:

对于天气问题来说,假设两个map输出的数据分别是这样的:

map1:   2008-5-1 38   2008-5-3   37   2008-5-2   36    2008-4-1 41 2008-4-1 39 2008-3-1 16

map2:   2008-5-2 39   2008-5-2   37.5   2008-5-2   36    2008-4-1 41 2008-4-1 39 2008-3-1 16

假设shuffle真的不排序,只做归并,就是只把相同的key归为一组的话,那么,5月份这个组得到的数据就是: 2008-5-1 38   2008-5-3   37   2008-5-2   36  2008-5-2 39   2008-5-2   37.5   2008-5-2   36 这样就会出错,因此可以断定shuffle一定是经历了排序的。最终的数据必须是这样的: 2008-5-2 39 2008-5-1 38   2008-5-2   37.5  2008-5-3   37  2008-5-2   36 2008-5-2   36

猜你喜欢

转载自www.cnblogs.com/junning/p/10842886.html