好程序员分享ApacheSpark常见的三大误解

  • 时间:
  • 浏览:0

  这个 人对Spark最大的误解什么都有其是一种生活生活内存技术(in-memorytechnology)。人太好 都有什么都有的!这么一八个 Spark开发者正式说明这个 ,这是对Spark计算过程的误解。

  根据经验,企业所做出的基准测试报告一般都有不可信的!一般独立的第三方基准测试报告是比较可信的,比如:TPC-H。这个 人的基准测试报告一般会覆盖绝大偏离 场景,以便真实地展示结果。

  误解三:Spark在数据外理方面引入了全新的技术

  这个 图片是分别使用Spark和Hadoop运行逻辑回归(LogisticRegression)机器学习算法的运行时间比较,从上图可不还可以看出Spark的运行数率明显比Hadoop快上百倍!为社 让实际上是什么都有的吗?大多数机器学习算法的核心偏离 是那此?人太好 什么都有对同一份数据集进行相同的迭代计算,而这个 地方正是Spark的LRU算法所骄傲的地方。当你多次扫描相同的数据集时,你只都要在首次访问时加载它到内存,后面 的访问直接从内存中获取即可。这个 功能非常的棒!为社 让很遗憾的是,官方在使用Hadoop运行逻辑回归的之后很大不可能 这么使用到HDFS的缓存功能,什么都有采用极端的情况报告。不可能 在Hadoop中运行逻辑回归的之后采用到HDFS缓存功能,其表现很不可能 只会比Spark差3x-4x,而都有上图所展示的一样。

  所有的那此愿因 才使得Spark相比Hadoop拥有更好的性能表现;在比较短的作业人太好 能快上80倍,为社 让在真实的生产环境下,一般只会快2.5x~3x!

  task启动时间比较快,Spark是fork出多多线程 运行;而MR是启动一八个 新的多多线程 运行运行;

  为社 让即使有那此信息,仍然这个 人还是会认为Spark什么都一种生活生活生活基于内存的技术,不可能 Spark是在内存中外理数据的。这当然是对的,不可能 这个 人无法使用这个 法律最好的措施来外理数据。操作系统中的API都可不还可以了让他把数据从块设备加载到内存,为社 让计算完的结果再存储到块设备中。这个 人无法直接在HDD设备上计算;什么都有现代系统中的所有外理基本上都有在内存中进行的。

  放慢的shuffles,Spark可不还可以了在shuffle的之后才会将数据倒入磁盘,而MR却都有。

  好多多线程 运行员分享ApacheSpark常见的三大误解

误解一:Spark是一种生活生活内存技术

  事实上,Spark并这么引入任何革命性的新技术!其擅长的LRU缓存策略和数据的pipelining外理其人太好 MPP数据库中早就指在!Spark做出重要的一步是使用开源的法律最好的措施来实现它!为社 让企业可不还可以免费地使用它。大偏离 企业势必会选着开源的Spark技术,而都有付费的MPP技术

  这个 人从头结速英文英文英文说明。那此样的技术不能称得上是内存技术?在我看来,什么都有允许你将数据持久化(persist)在RAM中并有效外理的技术。然而Spark无须具备将数据数据存储在RAM的选项,人太好 这个 人都知道可不还可以将数据存储在HDFS,Tachyon,HBase,Cassandra等系统中,为社 让不管是将数据存储在磁盘还是内存,都这么内置的持久化代码(nativepersistencecode)。它所能做的事什么都有缓存(cache)数据,而这个 并都有数据持久化(persist)。不可能 缓存的数据可不还可以很容易地被删除,为社 让在后期都要时重新计算。

  一般来说,Spark比MapReduce运行数率快的愿因 主要有以下几点:

  误解二:Spark要比Hadoop快10x-80x

  人太好 Spark允许这个 人使用内存缓存以及LRU替换规则,但那个她 想想现在的RDBMS系统,比如Oracle和PostgreSQL,你认为它们是怎么才能 才能 外理数据的?它们使用共享内存段(sharedmemorysegment)作为tablepages的存储池,所有的数据读取以及写入都有通过这个 池的,这个 存储池同样支持LRU替换规则;所有现代的数据库同样可不还可以通过LRU策略来满足大多数需求。为社 让为那此这个 人并这么把Oracle和PostgreSQL称作是基于内存的外理方案呢?你再想想LinuxIO,你知道吗?所有的IO操作也是会用到LRU缓存技术的。

  缓存:人太好 目前HDFS也支持缓存,为社 让一般来说,Spark的缓存功能更加高效,有点硬是在SparkSQL中,这个 人可不还可以将数据以列式的形式储指在内存中。

  放慢的工作流:典型的MR工作流是由什么都有MR作业组成的,这个 人之间的数据交互都要把数据持久化到磁盘不可不还可以;而Spark支持DAG以及pipelining,在这么遇到shuffle删剪可不还可以不把数据缓存到磁盘。

  什么都有结论是:Spark并都有基于内存的技术!它人太好 是一种生活生活可不还可以有效地使用内存LRU策略的技术。

  你现在还认为Spark在内存中外理所有的操作吗?你不可能 要失望了。比如Spark的核心:shuffle,其什么都有将数据写入到磁盘的。不可能 你再SparkSQL中使用到groupby一句话,不可能 你将RDD转打上去PairRDD为社 让在其之上进行这个 聚合操作,这之后你强制让Spark根据key的哈希值将数据派发到所有的分区中。shuffle的外理包括一八个 阶段:map和reduce。Map操作仅仅根据key计算其哈希值,并将数据存倒入本地文件系统的不同文件中,文件的个数通常是reduce端分区的个数;Reduce端会从Map端拉取数据,并将那此数据合并到新的分区中。所有不可能 你的RDD有M个分区,为社 让你将其转打上去N个分区的PairRDD,这么在shuffle阶段不可能 创建M*N个文件!人太好 目前这个 优化策略可不还可以减少创建文件的个数,但这仍然无法改变每次进行shuffle操作的之后你都要将数据先写入到磁盘的事实!