Spark介绍
按照官方的定义,Spark 是一个通用,快速,适用于大规模数据的处理引擎。
- 通用性:我们可以使用Spark SQL来执行常规分析, Spark Streaming 来流数据处理, 以及用Mlib来执行机器学习等。Java,python,scala及R语言的支持也是其通用性的表现之一。
- 快速: 这个可能是Spark成功的最初原因之一,主要归功于其基于内存的运算方式。当需要处理的数据需要反复迭代时,Spark可以直接在内存中暂存数据,而无需像Map Reduce一样需要把数据写回磁盘。官方的数据表明:它可以比传统的Map Reduce快上100倍。
- 大规模:原生支持HDFS,并且其计算节点支持弹性扩展,利用大量廉价计算资源并发的特点来支持大规模数据处理。
我们能用它做什么
那我们能用Spark来做什么呢? 场景数不胜数。
最简单的可以只是统计一下某一个页面多少点击量,复杂的可以通过机器学习来预测。
个性化 是一个常见的案例,比如说,Yahoo的网站首页使用Spark来实现快速的用户兴趣分析。应该在首页显示什么新闻?原始的做法是让用户选择分类;聪明的做法就是在用户交互的过程中揣摩用户可能喜欢的文章。另一方面就是要在新闻进来时候进行分析并确定什么样的用户是可能的受众。新闻的时效性非常高,按照常规的MapReduce做法,对于Yahoo几亿用户及海量的文章,可能需要计算一天才能得出结果。Spark的高效运算可以在这里得到充分的运用,来保证新闻推荐在数十分钟或更短时间内完成。另外,如美国最大的有线电视商Comcast用它来做节目推荐,最近刚和滴滴联姻的uber用它实时订单分析,优酷则在Spark上实现了商业智能的升级版。
Spark生态系统
在我们开始谈MongoDB 和Spark 之前,我们首先来了解一下Spark的生态系统。 Spark 作为一个大型分布式计算框架,需要和其他组件一起协同工作。
在Hdaoop里面,HDFS是其核心,作为一个数据层。
Spark是Hadoop生态系统的一颗新星,原生就支持HDFS。大家知道HDFS是用来管理大规模非结构化数据的存储系统,具有高可用和巨大的横向扩展能力。
而作为一个横向扩展的分布式集群,资源管理是其核心必备的能力,Spark 可以通过YARN或者MESOS来负责资源(CPU)分配和任务调度。如果你不需要管理节点的高可用需求,你也可以直接使用Spark standalone。
在有了数据层和资源管理层后, 接下来就是我们真正的计算引擎。
Hadoop技术的两大基石之一的MapReduce就是用来实现集群大规模并行计算。而现在就多了一个选项:Spark。 Map Reduce的特点是,用4个字来概括,简单粗暴。采用divide & conquer战术,我们可以用Map Reduce来处理PB级的数据。 而Spark 作为打了鸡血的Map Reduce增强版,利用了内存价格大量下降的时代因素,充分把计算所用变量和中间结果放到内存里,并且提供了一整套机器学习的分析算法,在加上很多语言的支持,使之成为一个较之于Map Reduce更加优秀的选择。
由于MapReduce 是一个相对并不直观的程序接口,所以为了方便使用,一系列的高层接口如Hive或者Pig应运而生。 Hive可以让我们使用非常熟悉的SQL语句的方式来做一些常见的统计分析工作。同理,在Spark 引擎层也有类似的封装,如Spark SQL、RDD以及2.0版本新推出的Dataframe等。
所以一个完整的大数据解决方案,包含了存储,资源管理,计算引擎及接口层。 那么问题来了:我们画了这么大这么圆的大饼,MongoDB可以吃哪一块呢?
MongoDB是个什么?是个database。 所以自然而然