一、spark是什么
简单来讲,spark是一种计算引擎,对标hardoop中的mapreduce,应用于大规模数据处理
二、spark的原理
spark的计算规则就是RDD,搞清楚RDD是什么,就搞清楚spark的计算原理。
RDD就是源数据的抽象,或者叫映射,或者就代表。也就是说,数据要被spark进行处理,在处理之前的首要任务就是要将数据映射成RDD,对于spark来说,RDD才是我们处理数据的规则,我只认RDD,只有RDD,通过我spark的计算引擎,才能发挥巨大的威力!
(1)分布式数据集
RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集。
RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让RDD中的数据可以被并行操作。
(2)弹性
RDD的数据默认情况下存放在内存中的,但是在内存资源不足时,Spark会自动将RDD数据写入磁盘。
(3)迭代式处理
对节点1、2、3、4上的数据进行处理完成之后,可能会移动到其他的节点内存中继续处理!Spark 与Mr最大的不同在与迭代式计算模型:Mr分为两个阶段,map和reduce,两个阶段处理完了就结束了,所以我们在一个job中能做的处理很有限,只能在map和reduce中处理;而spark计算过程可以分为n个阶段,因为他是内存迭代式的,我们在处理完一个阶段之后,可以继续往下处理很多阶段,而不是两个阶段。所以Spark相较于MR,计算模型可以提供更强大的功能。
(4)容错性
RDD最重要的特性就是,提供了容错性,可以自动从节点失败中恢复过来。即如果某个节点上的RDD partition,因为节点故障,导致数据丢了,那么RDD会自动通过自己的数据来源重新计算该partition。这一切对使用者是透明的。
三、spark的特点
1.速度快:spark支持内存计算,并且调度以DAG方式,每个任务task执行以线程方式(而mapreduce基于磁盘计算,并且是进程方式执行)
2.易于使用:支持各种语言,java、scala、python、r和sql等,面向各种语种开发人员。
3.通用性:spark有一个较为完整的生态圈,适用于批处理、交互式查询(SparkSQL)、实时流处理(SparkStreaming)、机器学习(SparkMLlib)和图计算(GraphX)(这样一对比,hive就略显单调了)
4.兼容性:Spark可以运行在Hadoop模式、Mesos模式、Standalone独立模式或Cloud中,并且还可以访问各种数据源,包括本地文件系统、HDFS、Cassandra、HBase和Hive等。(暂时还不太了解)