大数据小白系列——MR(3)

上一期我们稍微深入了解一下MR流程,尤其是比较重要但相对较少被提及的Shuffling过程,本期我们来看看MR的指导思想和局限性。

01

MR中的两个思想

太阳底下没有新鲜事,整个MR框架相对简单,不过有两个思想我觉得可以介绍一下,这两个思想不玄妙,但很实用,确实能解决大数据领域的不少问题。

在这里我还是要推荐下我自己建的大数据学习交流qq裙: 957205962, 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份2018最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴
 

Divide And Conquer(分治)

所谓的分治思想,就是“分开目标、各个击破”,其流程是:将整个问题划分为多个子问题->求解各子问题->合并子问题的解以形成原始问题的解,正如MR中的Splitting、Mapping和Reducing。

Data Locality(数据本地性)

即所谓的将计算移近数据,而不是将数据移近计算,“Move computation to data, instead of moving data to computation”。

数据存储在HDFS中时,它被划分为块并存储在DataNode上。当进行MR作业时,各个Mappers将处理这些块。如果Mapper不能从它执行的节点磁盘上获取数据,而需要通过网络从其他DataNode获取。这将是非常糟糕的情况,因为网络的IO甚至比磁盘IO的代价还要大得多。因此,将代码分发到更接近数据的节点上进行运算是更廉价高效的方法。

02

MR的局限性

处理速度较慢

MR的执行速度慢。一个普通的作业一般在分钟级别完成,复杂的作业甚至花费一小时或者更多,所以它适合对时间不那么敏感的OLTP。

MR的慢主要是由于磁盘IO和网络IO,大量的中间结果需要写到磁盘上(mapping),并通过网络进行传输(shuffling),这耗去了大量的时间。

不适用于某些数据/算法

要对数据进行splitting并分别进行各自独立的处理,需要数据之间存在较低的相关性,对于一些复杂的、彼此之间存在各种依赖的数据,MR处理起来就比较困难。

或者,对于需要进行多次迭代的算法,后一步骤的输入为前一个的输出(例如常见的k-means)。在这种情况下如果使用MR,每个作业的输出结果都要进行磁盘IO,导致性能无法忍受。

有一定的使用门槛

虽然MR框架替我们隐藏了大部分的复杂性,我们仍然需要手工编写代码(即map方法和reduce方法),掌握编程语言(Java、Python等)成为了使用MR的门槛。

与之形成对比的是关系型数据库的SQL,由于其易用性,大数据领域也越来越多地出现兼容SQL语法的计算引擎,大有一统江湖之势。

好了,本期就先到这儿,MR部分就结束了,下一期开始讲讲YARN。Cheers!

在这里我还是要推荐下我自己建的大数据学习交流qq裙: 957205962, 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份2018最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴

猜你喜欢

转载自blog.csdn.net/cqacry2798/article/details/85449555