比来几年关于Apache Spark框架的声所以越来越多,并且慢慢地成为大年夜数据范畴的主流体系。比来几年Apache Spark和Apache Hadoop的Google趋势可以证实这一点:
上图已经明显展示出比来五年,Apache Spark越来越受开辟者们的迎接,大年夜家经由过程Google搜刮更多关于Spark的信息。然而很多人对Apache Spark的熟悉存在误会,在这篇文┞仿中,将介绍我们对Apache Spark的几个重要的误会,以便给那些想将Apache Spark应用到其体系中的人作为参考。这里重要包含以下几个方面:
- Spark是一种内存技巧;
- Spark要比Hadoop快 10x-100x;
- Spark在数据处理方面惹人了全新的技巧
误会一:Spark是一种内存技巧
大年夜家对Spark最大年夜的误会就是其是一种内存技巧(in-memory technology)。其实不是如许的!没有一个Spark开辟者正式解释这个,这是对Spark计算过程的误会。
我们大年夜头开端解释。什么样的技巧才能称得上是内存技巧?在我看来,就是许可你将数据持久化(persist)在RAM中并有效处理的技巧。然而Spark并不具备将数据数据存储在RAM的选项,固然我们都知道可以将数据存储在HDFS, Tachyon, HBase, Cassandra等体系中,然则不管是将数据存储在磁盘照样内存,都没有内置的持久化代码( native persistence code)。它所能做的事就是缓存(cache)数据,而这个并不是数据持久化(persist)。已经缓存的数据可以很轻易地被删除,并且在后期须要时从新计算。
然则即使有这些信息,仍然有些人照样会认为Spark就是一种基于内存的技巧,因为Spark是在内存中处理数据的。这当然是对的,因为我们无法应用其他方法来处理数据。操作体系中的API都只能让你把数据大年夜块设备加载到内存,然后计算完的结不雅再存储到块设备中。我们无法直接在HDD设备上计算;所以现代体系中的所有处理根本上都是在内存中进行的。
固然Spark许可我们应用内存缓存以及LRU调换规矩,然则你想想如今的RDBMS体系,比如Oracle 和 PostgreSQL,你认为它们是若何处理数据的?它们应用共享内存段(shared memory segment)作为table pages的存储藏,所有的数据攫取以及写入都是经由过程这个池的,这个存储藏同样支撑LRU调换规矩;所有现代的数据库同样可以经由过程LRU策略来知足大年夜多半需求。然则为什愦我们并没有把Oracle 和 PostgreSQL称作是基于内存的解决筹划呢?你再想想Linux IO,你知道吗?所有的IO操作也是会用到LRU缓存技巧的。
你如今还认为Spark在内存中处理所有的操作吗?你可能要掉望了。比如Spark的核心:shuffle,其就是将数据写入稻磁逄的。如不雅你再SparkSQL中应用到group by语句,或者你将RDD转换成PairRDD并且在其之长进行一些聚合操作,这时刻你强迫让Spark根据key的哈希值将数据分发到所有的分区中。shuffle的处理包含两个阶段:map 和 reduce。Map操作仅仅根据key寂?驿哈希值,并将数据存放到本地文件体系的不合文件中,文件的个数平日是reduce端分区的个数;Reduce端会大年夜 Map妒攀拉取数据,并将这些数据归并到新的分区中。所有如不雅你的RDD有M个分区,然后你将其转换成N个分区的PairRDD,那么在shuffle阶段将会创建 M*N 个文件!固然今朝有些优化策略可以削减创建文件的个数,但这仍然无法改变每次进行shuffle操作的时刻你须要将数据先写入稻磁逄的事实!
信赖大年夜家在Spark的官网肯定看到了如下所示的图片
所以结论是:Spark并不是基于内存的技巧!它其实是一种可以有效地应用内存LRU策略的技巧。
误会二:Spark要比Hadoop快 10x-100x
这个图片是分别应用 Spark 和 Hadoop 运行逻辑回归(Logistic Regression)机械进修算法的运行时光比较,大年夜上图可以看出Spark的运行速度明显比Hadoop快上百倍!然则实际上是如许的吗?大年夜多半机械进修算法的核心部分是什么?其实就是对同一份数据集进行雷同的迭代计算,而这个处所恰是Spark的LRU算法所骄傲的处所。当你多次扫描雷同的数据集时,你只须要在初次拜访时加载它到内存,后面的拜访直接大年夜内存中获取即可。这个功能异常的棒!然则很遗憾的是,官方在应用Hadoop运行逻辑回归的时刻很大年夜可能没有应用到HDFS的缓存功能,而是采取极端的情况。如不雅在Hadoop中运行逻辑回归的时刻采取到HDFS缓存功能,其表示很可能只会比Spark差3x-4x,而不是上图所展示的一样。
所有的┞封些原因才使得Spark比拟Hadoop拥有更好的机能表示;在比较短的功课确切能快上100倍,然则在真实的临盆情况下,一般只会快 2.5x – 3x!
根据经验,企业所做出的基准测试申报一般都是弗成信的!一般自力的第三方基准测试申报是比较可托的,比如:TPC-H。他们的基准测试申报一般会覆盖绝大年夜部分场景,以便真实地展示结不雅。
一般来说,Spark比MapReduce运行速度快的原因重要有以下几点:
- task启动时光比较快,Spark是fork出线程;而MR是启动一个新的过程;
- 更快的shuffles,Spark只有在shuffle的时刻才会将数据放在磁盘,而MR却不是。
- 更快的工作流:典范的MR工作流是由很多MR功课构成的,他们之间的数据交互须要把数据持久化稻磁逄才可以;而Spark支撑DAG以及pipelining,在没有碰到shuffle完全可以不把数据缓存稻磁逄。
- 缓存:固然今朝HDFS也支撑缓存,然则一般来说,Spark的缓存功能加倍高效,特别是在SparkSQL中,我们可以将数据以列式的情势储存在内存中。
误会三:Spark在数据处理方面惹人了全新的技巧
推荐阅读
1.基于汗青的MBR分析基于汗青(Memory-Based Reasoning)的MBR分析办法最重要的概念是用已知的案例(case)来猜测将来案例的一些属性(attribute),平日找寻最类似的案例来做比较。MBR中有两个>>>详细阅读 本文标题:Apache Spark常见的三大误解 地址:http://www.17bianji.com/lsqh/37769.html 1/2 1