1.map端的聚合是利用AppendOnlyMap实现,AppendOnlyMap是spark自己实现的Map,只能添加数据,不能remove。该map是使用开放定址法中的二次探测法,不用自带的hashmap,节省空间,提高性能。数组中a[i]=key,a[i+1]=value,即用两个位置来存储kv对。growThreshold=LOAD_FACTOR*capacity,当添加的元素超过该值时,数组会进行grow,capacity翻倍,同时所有的kv都会进行rehash重新分配位置。
首先,根据key的hash(具体是murmur3_32)找到位置,如果目标的key与要查找的key不一样,则使用二次探测法继续查找,直到找到为止。
2.map端计算结果缓存处理?结合shuffle进行理解:
a.对计算结果在缓存中执行聚合和排序
b.map不使用缓存也不执行聚合和排序,直接写入存储文件
c.对计算结果简单缓存
网友评论