mapreduce分区疑问
map任务产生个数是按照文件大小块进行切割的,那具体分区的个数是和产生map任务的个数一样么?还有个问题,如果储存的文件不在对应的datanode节点上 是否会将数据移动到对应map执行的任务节点上执行?如果是的话,这样不是违背了移动数据转变成移动计算的理念么?
23
收起
正在回答
1回答
map任务产生个数是按照文件大小块进行切割的,那具体分区的个数是和产生map任务的个数一样么?
答:map任务的个数严格来说是和inputsplit的个数有关,inputsplit默认是和文件的block大小相等
所以可以认为map任务的个数在正常情况下等于hdfs数据的block块数量
还有个问题,如果储存的文件不在对应的datanode节点上 是否会将数据移动到对应map执行的任务节点上执行?如果是的话,这样不是违背了移动数据转变成移动计算的理念么?
答:map任务在执行时优先选择在存储HDFS数据的服务器上执行,其次在同机架的服务器上执行,最次在其他机架服务器上执行。task任务会尽可能的分配到数据所在的节点上面,如果那个节点上资源已经被用完了,只能退而求其次再往同机架上的服务器上分配任务,依次类推。所以说并不违背移动数据转变成移动计算的理念。reduce任务执行不具备就近原则,因为这里会涉及shuffer阶段,会通过网络将map执行结果传输之reduce处理的服务器中,再进行计算。
大数据工程师 2024 版
- 参与学习 1151 人
- 提交作业 5960 份
- 解答问题 1144 个
不用Java初级内容充数!不用与大数据岗位无关内容占课时!我们做的就是“精华版”大数据课程
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星