Spark与Hadoop关系

Spark是一个计算框架算法

Hadoop是包含计算框架MapReducehe分布式文件系统HDFS。编程

 

Spark是MapReduce的替代方案,并且兼容HDFS、Hive等分布式存储系统,可融入Hadoop生态。缓存

 

Spark与Hadoop MapReduce优点以下框架

1 中间结果输出机器学习

   MapReduce的计算引擎将中间结果存储在磁盘上,进行存储和容错。分布式

   Spark将执行模型抽象为有向无环图执行计划(DAG),这能够将多个Stage的任务串联或者并行执行,而无须将Stage中间结果输出到HDFS中。oop

 

2 数据格式和内存布局布局

  MapReduce  Schema on Read处理方式会引发较大的处理开销。Spark抽象出分布式内存存储结构弹性分布式数据集RDD,进行数据的存储。RDD能支持粗粒度写操做,可是对于读取操做,RDD能够精确到每条记录,这使得RDD能够用来做分布式索引。Spark的特性是能控制数据节点上的分区,用户能够自定义分区策略,如Hash分区等。Shark 和Spark SQL在Spark的基础之上实现了列存储和列存储压缩。性能

 

3 执行策略学习

   MapReduce在数据Shuffle以前花费了大量的时间来排序,Spark则能够减轻上述问题带来的开销。由于Spark任务在Shuffle中不是全部情景都须要排序,因此支持基于Hash的分布式聚合,调度中采用更为通用的任务执行计划图(DAG),每一轮次的输出结果在内存缓存。

 

4 任务调度开销

    传统的MapReduce系统,如Hadoop,是为了运行长达数小时的批量做业而设计的,在某些极端状况下,提交一个任务的延迟很是高。

   Spark采用了事件驱动的类库AKKA来启动任务,经过线程池复用线程来避免进程或线程启动和切换开销。

 

一、 Spark VSHadoop有哪些异同点?

Hadoop:分布式批处理计算,强调批处理,经常使用于数据挖掘和数据分析。

Spark:是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速, Spark 是一种与 Hadoop 类似的开源集群计算环境,可是二者之间还存在一些不一样之处,这些有用的不一样之处使 Spark 在某些工做负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了可以提供交互式查询外,它还能够优化迭代工做负载。

Spark 是在 Scala 语言中实现的,它将 Scala 用做其应用程序框架。与 Hadoop 不一样,Spark 和 Scala 可以紧密集成,其中的 Scala 能够像操做本地集合对象同样轻松地操做分布式数据集。

尽管建立 Spark 是为了支持分布式数据集上的迭代做业,可是实际上它是对 Hadoop 的补充,能够在 Hadoop 文件系统中并行运行。经过名为Mesos的第三方集群框架能够支持此行为。

虽然 Spark 与 Hadoop 有类似之处,但它提供了具备有用差别的一个新的集群计算框架。首先,Spark 是为集群计算中的特定类型的工做负载而设计,即那些在并行操做之间重用工做数据集(好比机器学习算法)的工做负载。为了优化这些类型的工做负载,Spark 引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。

在大数据处理方面相信你们对hadoop已经耳熟能详,基于GoogleMap/Reduce来实现的Hadoop为开发者提供了map、reduce原语,使并行批处理程序变得很是地简单和优美。Spark提供的数据集操做类型有不少种,不像Hadoop只提供了Map和Reduce两种操做。好比map,filter, flatMap,sample, groupByKey, reduceByKey, union,join, cogroup,mapValues, sort,partionBy等多种操做类型,他们把这些操做称为Transformations。同时还提供Count,collect, reduce, lookup, save等多种actions。这些多种多样的数据集操做类型,给上层应用者提供了方便。各个处理节点之间的通讯模型再也不像Hadoop那样就是惟一的Data Shuffle一种模式。用户能够命名,物化,控制中间结果的分区等。能够说编程模型比Hadoop更灵活。

 

二、Spark对于数据处理能力和效率有哪些特点?

Spark提供了高的性能和大数据处理能力,使得用户能够快速获得反馈体验更好。另外一类应用是作数据挖掘,由于Spark充分利用内存进行缓存,利用DAG消除没必要要的步骤,因此比较合适作迭代式的运算。而有至关一部分机器学习算法是经过屡次迭代收敛的算法,因此适合用Spark来实现。

Spark配有一个流数据处理模型,与Twitter的 Storm框架相比,Spark采用了一种有趣并且独特的办法。Storm基本上是像是放入独立事务的管道,在其中事务会获得分布式的处理。相反,Spark采用一个模型收集事务,而后在短期内(咱们假设是5秒)以批处理的方式处理事件。所收集的数据成为他们本身的RDD,而后使用Spark应用程序中经常使用的一组进行处理。做者声称这种模式是在缓慢节点和故障状况下会更加稳健,并且5秒的时间间隔一般对于大多数应用已经足够快了。这种方法也很好地统一了流式处理与非流式处理部分。

相关文章
相关标签/搜索