Hadoop中数据读取疑问

[复制链接]
查看11 | 回复4 | 2021-1-27 05:42:42 | 显示全部楼层 |阅读模式
在Hadoop中,进行Map任务调度时,每个Map根据就近原则获得需处理的数据分片,但是,各个Map并行运行,这样获取数据不就是随机的了吗?并没有按顺序读取文件?望各位解惑!
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:42:42 | 显示全部楼层
map之间是相互独立的运行,运行的程序是一样的,输出的结果格式是一样的,不需要按顺序读取文件。map端获取数据分片后执行maptask,maptask工作结束,生成结果文件存放在某个本地目录内。reduce端不断地获取maptask是否完成的信息,如果reduce端得到通知,获知maptask执行完成,就会去map端获取数据文件,reduce端获取所有map端结果文件后做Merge操作,然后执行reducetask。可以仔细看看mapreduceshuffle过程。
回复

使用道具 举报

千问 | 2021-1-27 05:42:42 | 显示全部楼层
Hadoop的各个Map任务是独立执行的,之间不存在联系,而Map的输入是一开始就定义好的,但是由于Hadoop的数据存储是分布式且备份冗余的,即一块数据会在多个节点上存放,当确认某个Map任务在哪个节点执行时Hadoop会考虑该Map任务的输入数据所在节点,最优考虑本地执行方式——输入文件同Map执行节点在一起,其次是同机架,然后就是跨机架了。
至于Hadoop的Map之间是并行执行就是必然的,所以输入数据被处理的时间顺序也是随机的,所以Hadoop不适合处理输入数据内部存在依赖的任务,因为Map任务之间是无法互相访问的。
回复

使用道具 举报

千问 | 2021-1-27 05:42:42 | 显示全部楼层
并行运行肯定不会按照顺序读取文件,否则还怎么做并行分布式处理呢。分配给每个map的所有文件加起来就是原文件
回复

使用道具 举报

千问 | 2021-1-27 05:42:42 | 显示全部楼层
并行运行肯定不会按照顺序读取文件,否则还怎么做并行分布式处理呢。分配给每个map的所有文件加起来就是原文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行