17、MapReduce的分区Partition介绍
  TEZNKK3IfmPf 2023年11月12日 14 0

本文介绍MR的分区Partition。
本文分为2个部分,即介绍与示例。
前提依赖:hadoop环境可正常使用。

1、数据分区

当MapReduce中有多个reduce task执行的时候,此时map task的输出就会面临一个问题:究竟将自己的输出数据交给哪一个reducetask来处理?这就是数据分区(partition)

17、MapReduce的分区Partition介绍

  • 默认情况下,MapReduce是只有一个reducetask来进行数据的处理。这就使得不管输入的数据量多大,最终的结果都是输出到一个文件中
  • 当改变reducetask个数的时候,作为maptask就会涉及到分区的问题,即:MapTask输出的结果如何分配给各个ReduceTask来处理
  • Map的数量由数据文件大小决定,即map的数量=数据文件大小(M)/128M。

2、Partition默认规则

  • MapReduce默认分区规则是HashPartitioner。分区的结果和map输出的key有关[(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks]。
  • reducetask个数的改变导致了数据分区的产生,而不是有数据分区导致了reduce task个数改变。
  • 数据分区的核心是分区规则。即如何分配数据给各个reducetask。默认的规则可以保证只要map阶段输出的key一样,数据就一定可以分区到同一个reducetask,但是不能保证数据平均分区。
  • reducetask个数的改变还会导致输出结果文件不再是一个整体,而是输出到多个文件中

3、分区使用

  •  
  • 改变ReduceTask个数
    在MapReduce中,通过Job提供的方法,可以修改reducetask的个数。默认情况下不设置,reducetask个数为1。
  • 17、MapReduce的分区Partition介绍

  •  
job.setNumReduceTasks(6)

设置完后,输出的文件个数

17、MapReduce的分区Partition介绍

  • 当数据分区数量>reduceTask 时,会出现异常错误
  • 当数据分区数量=reduceTask 时,程序正常运行
  • 当数据分区数量<reduceTask 时,程序正常运行,会出现输出文件大小为0的文件,为0的即是多出的reduceTask,即没有数据需要汇聚
  • 通过修改不同reducetask个数值,得出输出结果文件的个数和reduce task个数是一种对等关系

二、示例

具体事例参考mapreduce的基本使用示例中的分区

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月14日   12   0   0 大数据
  TEZNKK3IfmPf   2023年11月15日   38   0   0 apachehadoopjava
  TEZNKK3IfmPf   2023年11月14日   13   0   0 System大数据
  TEZNKK3IfmPf   2023年11月15日   17   0   0 apachehadoop
  TEZNKK3IfmPf   25天前   26   0   0 hadoopHive
  TEZNKK3IfmPf   2023年11月15日   15   0   0 System大数据
TEZNKK3IfmPf