开发者社区> 问答> 正文

MapReduce能否对key做全局排序?

MapReduce能否对key做全局排序?

展开
收起
芯在这 2021-12-06 22:25:34 687 0
1 条回答
写回答
取消 提交回答
  • 可以。

    方案一 MapReduce只能保证一个分区内的数据是key有序的,一个分区对应一个reduce,因此只有一个reduce就保证了数据全局有序

    缺点: 不能用到集群的优势。

    方案二 多个reduce情况下,可以按照key进行分区,通过MapReduce的默认分区函数HashPartition将不同范围的key发送到不同的reduce处理。 例如一个文件中有key值从1到10000的数据,我们使用两个分区,将1到5000的key发送到partition1,然后由reduce1处理,5001到10000的key发动到partition2然后由reduce2处理,reduce1中的key是按照1到5000的升序排序,reduce2中的key是按照5001到10000的升序排序,这样就保证了整个MapReduce程序的全局排序。

    缺点: 1.当数据量大时会出现OOM(内存溢出) 2.会出现数据倾斜

    方案三 Hadoop提供了TotalOrderPartitionner类用于实现全局排序的功能,并且解决了OOM和数据倾斜的问题。 TotalOrderPartitioner类提供了数据采样器,对key值进行部分采样,然后按照采样结果寻找key值的最佳分割点,将key值均匀的分配到不同的分区中。

    2021-12-06 22:25:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Phoenix 全局索引原理与实践 立即下载
HBase2.0重新定义小对象实时存取 立即下载
Apache Flink 流式应用中状态的数据结构定义升级 立即下载