00:00
既然Spark和海都是计算框架,那么我们在实际使用时该如何选择呢?首先同学们,我们要明确一件事情,由于海doop框架它出现的时间节点比较早,这个咱们在之前对比过,对吧?所以其设计的初衷主要是用于一次性数据计算,那这个何所谓一次性数据计算呢?我们这里来给大家写一下。咱们呢叫做一次性啊,来一次性我们叫做数据计算。那么所谓的一次性数据计算呢,其实呀,它主要指的是什么呢?就是说我们框架在我们处理数据中,在处理数据的时候。它会从我们的存储。存储设备中,它读取数据。然后进行逻辑操作。进行逻辑操作。然后将。我们处理的结果,哎,重新。
01:04
咱们叫做存储。重新存储到我们的介质中啊,介质中那这种处理方式,那我们就称之为叫一次性数据计算,那么我们来给大家画个图,咱们一块看一看。呃,首先我们这里呢,比方说我们从文件啊,从存储设备是吧,一个磁盘当中我们写一个文件。好,那我这里呢,给它画上一个颜色啊,咱比方说数据源吧,咱们叫做一个黄色,然后呢,我们通过map的方式啊,把数据读取过来,然后打散数据,对吧?来拷贝,拷贝以后,那这里呢,我们叫map,嗯,打散数据,这里呢,我们用一个红色啊,然后呢,我的数据呢,诶给它打散了啊,都给它打散了,所以复制,咱们复制一下,嗯,这里呢,我们放到这儿吧,然后再复制一下,放到下面,放到下面以后,这个呢,我写上叫date啊,咱们叫数据了,那这个呢,我们也叫date啊,然后呢,我们这边都叫date行,颜色呢,我们稍微的变一变,变成咱们的蓝色,好,那我的箭头呢,表述的是数据的流转方向,比方说我们读取我们的file啊,然后通过map来打散数据,那通过map来打散数据之后,那你肯定是后面要聚合数据对吗?这个咱们一会儿再说,先把箭头给它画好。
02:19
然后在这里呢,把它的这个箭头呢,给它画好了,好还有我们的这边,嗯,行了,那画好了之后,那接下来下一个阶段就是聚合数据,我们称之为叫reducer。啊,咱们这里称之为叫做reducer啊好,那这里这个颜色呢,我们来画一个绿色,表示的是一个要计算出结果的一个阶段,那好,这里呢,我们的date给它放过来。好放到这里,然后接下来我们的数据呢,都给它画过来啊。放到这边,嗯,行好,我们这边呢也过来可以了,那你这个结果处理完成以后,你该怎么办呢?诶我们就是要给他落盘了,所以我们这时候又要跟磁盘交互,所以放到这边,然后箭头往下走,往这边挪,挪过来,所以这样的话呢,我们的作业啊就处理完了,所以呢,它其实是一个比较完整的一个作业流程,那我们这里呢,给它写上一个啊,咱们叫做job,诶一个我们的作业给它置于底层,然后颜色呢,给它稍微的画一个我们的灰色吧,嗯,好,这里呢,我们写上一个叫做job,那就是它咱们叫做作业啊,一个比较完整的,这就是我们的一次性数据计算,但是这种数据的一次性计算呢,在处理复杂逻辑的时候啊,性能是非常低的,为什么这么说呢?是因为我们海杜op中map就是计算引擎中的计算模型比较简单,它里面只有我们的map和reducer,那么这样的话,对于我们的上层应用来讲的话,就不得不想方设法去拆分我们的。
03:50
串法,甚至于不得不在上层应用实现多个job的串联,比方说这是一个job对不对?那如果我想做一个多个job的串联的话,拷贝拷贝以后大家可以看到它,就得把这个file当成数据源了,所以复制,复制以后大家可以看到它在这个地方,诶,准备做下一次的计算,所以把这个拿过来,把这个拷贝。
04:13
啊,这种感觉啊,就跟迭代式计算一样,为什么呢?上一次的计算结果要给下一次来使用,可是你会发现他们的作业之间的关联靠的是磁盘交互,所以这种我们的磁盘IO会非常的影响性能,大家这个图应该是能够看到的,对吗?所以啊,我们的map它在最初期的时候,它并不是为了满足循环迭代式数据的处理。因此啊,在一些我们并行运行的数据处理场景当中,比方说机器学习呀,图形挖掘呀,交互式数据挖掘呀,在这种我们的计算当中,它的效率是非常低的啊,是这样。而我们反观Spark Spark,它里面提供了更加丰富的数据处理模型,而且它可以基于内存来做数据集的多次迭代,那么这样的话,它就会更好的支持数据挖掘算法和图形计算。那我们把这个图我们再来画一画,比方说咱们还是以这个为例,咱们以这个为例的话,大家可以看到这就是我们的一个比较复杂的一个流程,拷贝,拷贝以后,那么我们的SPA在其中就优化了它的计算过程,而且改善了它的计算方式,它把这个file就变成了什么呢?我们的memory memory就是内存嘛,所以这里呢,来我们写上叫memory,就是它,嗯,好了,那么我们先不考虑它的一个业务复杂度的问题,我们只考虑它数据处理的。
05:40
过程你会发现我们的Spark,它把作业的计算结果放到了内存当中,为下一次计算提供了更加便利的处理的方式,那么这种方式效率就非常的高。所以啊,我们选择Spark而非mapce的原因就是因为速度,在内存计算策略和先进的调度机制的帮助下,Spark可以更加快速的处理相同的数据集。可是由此带来的问题就是我们Spark如果部署在共享的集群当中,它可能会遇到资源不足的问题啊,那么它所占用的资源会更大一些,而且它会同时对其他的任务呢,诶,给他产生影响。所以从本质上来看呢,10SPARK其实并不适合和海度的堆战的一些其他组件一起共同使用啊,这是一个问题。好吧,回过头来我们再来看我们的课件,课件当中啊,也基本上用文字的方式描述了。刚才我说。
06:40
的过程啊,啊,我们的map它不适合我们的迭代式数据开发,是这样的啊,然后呢,我们这里的机器学习啊,它的一些算法呀,它其实也是不擅长的,而我们的Spark呢,它其实相对来说比较擅长,这里用红色的字体给大家描述了他们的区别,Spark和海豆的根本差异是多个作业之间的数据通信问题,Spark的多个作业之间数据的通信是基于内存的,而我们海豆呢,是基于磁盘,那么明显磁盘的IO会影响我们的性能,对吗?诶,其他咱们暂时不看了。那么经过上面的比较,我们可以看出,在绝大多数的数据计算场景当中,Spark确实会比map produce更有优势,但是Spark是基于内存的,所以在实际的生产环境中,由于内存的限制,可能会由于内存资源的不足导致job执行失败,因此在这个时候,Map reducece其实是一个更好的选择。
07:40
和,所以你不能说,哎,我们Spark速度快,我们就代替map吧,还不行,它是有我们的应用场景的,好吧,同学们。
我来说两句