Spark是UC Berkeley AMP lab的一个开源项目,代表未来数据处理的新方向--实时处理(流式数据处理),而且更大的优势是它与当前流行的开源云计算框架Hadoop完美结合,它不仅具有MapReduce的优点而且在迭代算法和交互式的数据挖掘中具有很大的优势。现在是Apache的主推项目。

   Spark其实是对MapReduce的一个补充,因为当前流行的一些大数据处理框架一般都是基于MapReduce的批量处理,其实时性不高,对一些需要实时的处理存在缺陷。Spark的出现主要是针对迭代计算和交互的数据挖掘。

Spark的特点:

Spark引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。也有利于迭代的机器学习算法,这样将需要迭代的中间结果(Spark中的概念为工作集)存放在内存中,这样每次使用不用像MapReduce那样从硬盘读取和写入了,节省了大量的IO操作,提升了算法的效率。

        Spark还引进了名为弹性分布式数据集 (RDDs) 的概念,RDDs是对分布式内存的一种抽象。RDDs是分布在一组节点中的只读对象集合。这些集合是弹性的(何为弹性,我的理解是它具有自动容错性,可以根据“血统”来重建失去的分区),如果数据集一部分丢失,则可以对它们进行重建。重建部分数据集的过程依赖于容错机制,该机制可以维护 “血统”(即充许基于数据衍生过程重建部分数据集的信息)。RDD 被表示为一个 Scala 对象,并且可以从文件中创建它;一个并行化的切片(遍布于节点之间);另一个 RDD 的转换形式;并且最终会彻底改变现有 RDD 的持久性,比如请求缓存在内存中。

不适合使用Spark的应用

   RDD不太适合那些异步更新共享状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型,当然不适合把大量数据拿到内存中了。增量改动完了,也就不用了,不需要迭代了。

我对Spark的疑问

   Spark的弹性分布式数据集中弹性的概念到底是怎么个意思还是不太理解。还有就是它把数据装入内存中,在大数据处理中,需要迭代的数据量也应该不小,这是不是就要求集群的性能比Hadoop要求的要高呀。这些疑问在随后的学习中慢慢解决吧,该动手装个环境,动手试试了,或许会有更深的理解。