mapreduce计算框架的一点疑问

zycxnanwang
博客专家认证
2019-04-20 04:16:20
mapreduce计算框架中,有map任务和reducer任务。
map任务,主要是将原始数据转为 <key, value>形式
中间会有combine过程 将<key, value>转为 <key, list>
因为每个reducer都会收到相同的key值,我这里有两个问题,

1. 相同key值得数据会被切分,分发给不同的reducer吗?, 如果这样,最后的结果如何产生

2. 如果不切分,一个reduer能处理那么大得数据量吗? (相同key的数据可能是海量的)
...全文
263 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
奋斗的瘦胖子 2019-05-08
  • 打赏
  • 举报
回复
1.当前partition或者叫executor可以把当前的自己负责的区域内的数据中,相同key的数据,先reduce,然后,再一起,发送给对应的那个reducer,然后这个reducer进行合并输出结果 2.发送给reducer的过程,就是shuffe了吧
Keifei 2019-04-28
  • 打赏
  • 举报
回复
引用 5 楼 zycxnanwang 的回复:
[quote=引用 4 楼 have_power 的回复:][quote=引用 2 楼 张伯毅 的回复:] 问题 1. 相同的 key 中的 list 不会被切分. 你直接处理拿到的 list 集合就好, list 集合输出的结果就是针对这个 key 的最终输出. 问题 2. 针对 key 相同, 存在海量 ? 这个海量需要定义, 如果很大几十G的话, 这涉及到一个技术问题: [数据倾斜] 我建议先理解一下 mapreduce的 shuffle 过程, 然后就知道怎么处理了.
个人觉得这和shuffle基本没关系...[/quote]能讲一下你详细的看法吗?[/quote]
引用 5 楼 zycxnanwang 的回复:
[quote=引用 4 楼 have_power 的回复:][quote=引用 2 楼 张伯毅 的回复:] 问题 1. 相同的 key 中的 list 不会被切分. 你直接处理拿到的 list 集合就好, list 集合输出的结果就是针对这个 key 的最终输出. 问题 2. 针对 key 相同, 存在海量 ? 这个海量需要定义, 如果很大几十G的话, 这涉及到一个技术问题: [数据倾斜] 我建议先理解一下 mapreduce的 shuffle 过程, 然后就知道怎么处理了.
个人觉得这和shuffle基本没关系...[/quote]能讲一下你详细的看法吗?[/quote]可以说,任何用mapreduce计算框架的数据处理,都得考虑混洗,因为混洗的排序和聚合对效率影响是决定性的,但是楼主的问题是什么?<key,value>你在混洗过程可以改变吗?map函数执行完的结果你在混洗过程如何改变?你不想办法搞map,你想办法让他怎么进reduce?
Keifei 2019-04-26
  • 打赏
  • 举报
回复
引用 2 楼 张伯毅 的回复:
问题 1. 相同的 key 中的 list 不会被切分. 你直接处理拿到的 list 集合就好, list 集合输出的结果就是针对这个 key 的最终输出. 问题 2. 针对 key 相同, 存在海量 ? 这个海量需要定义, 如果很大几十G的话, 这涉及到一个技术问题: [数据倾斜] 我建议先理解一下 mapreduce的 shuffle 过程, 然后就知道怎么处理了.
个人觉得这和shuffle基本没关系...
zycxnanwang 2019-04-26
  • 打赏
  • 举报
回复
引用 4 楼 have_power 的回复:
[quote=引用 2 楼 张伯毅 的回复:] 问题 1. 相同的 key 中的 list 不会被切分. 你直接处理拿到的 list 集合就好, list 集合输出的结果就是针对这个 key 的最终输出. 问题 2. 针对 key 相同, 存在海量 ? 这个海量需要定义, 如果很大几十G的话, 这涉及到一个技术问题: [数据倾斜] 我建议先理解一下 mapreduce的 shuffle 过程, 然后就知道怎么处理了.
个人觉得这和shuffle基本没关系...[/quote]能讲一下你详细的看法吗?
zycxnanwang 2019-04-24
  • 打赏
  • 举报
回复
引用 2 楼 张伯毅 的回复:
问题 1. 相同的 key 中的 list 不会被切分. 你直接处理拿到的 list 集合就好, list 集合输出的结果就是针对这个 key 的最终输出. 问题 2. 针对 key 相同, 存在海量 ? 这个海量需要定义, 如果很大几十G的话, 这涉及到一个技术问题: [数据倾斜] 我建议先理解一下 mapreduce的 shuffle 过程, 然后就知道怎么处理了.
好像理解了, 如果数据是海量的,可以考虑在partition过程中对其进行分区,使reducer负载能均衡
张伯毅 2019-04-24
  • 打赏
  • 举报
回复
问题 1. 相同的 key 中的 list 不会被切分. 你直接处理拿到的 list 集合就好, list 集合输出的结果就是针对这个 key 的最终输出. 问题 2. 针对 key 相同, 存在海量 ? 这个海量需要定义, 如果很大几十G的话, 这涉及到一个技术问题: [数据倾斜] 我建议先理解一下 mapreduce的 shuffle 过程, 然后就知道怎么处理了.

20,808

社区成员

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

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