MapReduce过程询问

JJZHK 2014-03-20 11:52:45
Spill阶段会按照分区编号从小到大将每个分区中的数据写入任务工作目录下的临时文件output/SpillN.out中,N表示溢写次数。在写入之前,会调用用户设置的Combiner方法(如果设置了的话),对每个分区进行一次聚集操作。
有几个问题想请各位大牛来解答一下:
1.每个spill*.out文件内部,是否可以跨分区呢。比如里面有200条记录,我前100条发送到reducer 0处理,后100条发送到reducer 1处理?
2. spill0.out根spill1.out是否可以是一个分区的?比如我的数据量很大,一共200条记录,100条的时候,就打到了阀值的80%,我需要spill,这100条发送到reducer 0的。后100条完了也spill,也是发送到reducer 0的?
3.如果上述两个问题都是肯定的,那么我就想问一下,那combine的时候怎么做呢。因为可能3个spill是一个分区的,另外两个是另外一个分区的。那么他怎么combine呢?
...全文
273 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
JJZHK 2014-03-25
  • 打赏
  • 举报
回复
也就是说,每个Map任务结束后,会生成两个文件,一个是spill文件,一个是索引文件,reduce从每个Map的结果中,抓取需要自己处理的部分数据结果? 那么reduce处理完成以后,每个reduce会有一个处理结果,最后怎么合并成一个文件输出呢?
撸大湿 2014-03-25
  • 打赏
  • 举报
回复
Map送给 哪个Reduce是由partition控制的,spill是本地磁盘缓存
Agnostos 2014-03-23
  • 打赏
  • 举报
回复
没太看明白你的问题 reducer是通过key来聚合的 只要你保证mapper输出的kv的key按照需要的方式分布 自然可以导向指定的reducer
JJZHK 2014-03-20
  • 打赏
  • 举报
回复
另:每个Map任务最后得到的是一个大文件,那么这个大文件里面可能分区编号不一样,怎么交给不同的reducer去处理呢?
JJZHK 2014-03-20
  • 打赏
  • 举报
回复
另:每个spill文件应该包含了分区号的信息了吧?

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧