码迷,mamicode.com
首页 > 其他好文 > 详细

MapReduce(八)Hadoop中的数据本地化

时间:2021-06-18 19:09:26      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:split   pow   eve   拉取   计算   解决   本地化   级别   mapper   

原文链接:
https://data-flair.training/blogs/data-locality-in-hadoop-mapreduce/

1、什么是数据本地化

数据本地化(Data locality)是指将计算移动到数据所在的节点,而不是移动数据移动到计算所在的节点。在Hadoop中,一份数据会被切割成多个块,这些块分布在集群的多个节点。如果计算逻辑固定在某个节点,那么计算过程中会跨节点拉取大量的数据,造成网络拥塞,系统吞吐量不高等问题。

2、数据本地化的一些前提

我们的系统架构需要满足以下条件,才能充分利用数据本地化的好处。

  • 首先集群需要有一个正确的拓扑结构。Hadoop代码必须有能力读到本地(code所在节点)的数据。

  • 其次,hadoop必须知晓运行MR任务的节点的拓扑逻辑。然后Hadoop必须要知道数据存在哪里(物理位置)。

3、数据本地化的级别

3.1、本地级别的数据本地化

当数据和mapper处于同一个节点时,称为本地级别的数据本地化。这种情况下,数据和计算是非常接近的的,这也是最好的场景。

3.2、机架内的数据本地化

我们如果要求Mapper总是和数据处于同一个节点,因为资源限制的原因,这其实是不可能的,也即是说数据搬移是不可避免的。在需要数据搬移的场景中,最好的情况是数据和计算处于同一个机架。

3.3、跨机架的数据本地化

因为资源的限制,系统会面临着跨机架搬移数据,这是3种情况种最差的一种。

4、数据本地化的优化

尽管本地化级别的数据本地化让mapper可能运行在它需要的数据所在的节点上。但是实际情况里并不是总能如此,一些原因,比如speculative execution,异构集群,数据的分布、布局以及Input Splitter都会让一些mapper任务不能运行在数据所在的节点上。

在大的集群里数据本地化挑战变得更加常见,因为大的集群里数据节点很多,数据也很多。数据本地化的会被弱化。

在大的集群里,一些节点是新节点然后它们会比其他节点要快,这让数据计算比率变得失衡,以此,大的集群倾向于并非由同构节点组成。In speculative execution even though the data might not be local, but it uses the computing power. The root cause also lies in the data layout/placement and the used Input Splitter. 处理非本地数据会面临网络资源的约束然后引发可扩展性的问题。

我们可以通过检测哪些job有数据本地化问题或者随时间降级来提高数据本地化。解决方案是更加复杂包括改变数据的物理位置已经数据的布局,为一个job使用一个别的scheduler或者简单地修改mapper和reducer slot。然后我们必须要检验数据计算比率是否有得到提升。

MapReduce(八)Hadoop中的数据本地化

标签:split   pow   eve   拉取   计算   解决   本地化   级别   mapper   

原文地址:https://www.cnblogs.com/ralgo/p/14894769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!