Spark是什么?
Apache Spark 是一个运算快速、通用性高的集群计算平台。
快速:
Spark扩展了流行的MapReduce数据处理模式以支持更多的数据处理类型,如:即席查询、流处理。当处理大数据时速度是很重要的,这关系到是及时能看到结果还是让人等上几分钟或者几小时。Spark提供了一种基于内存的处理方式,这种方式在处理复杂的应用方面比MapReduce要快的多。
通用性:
Spark从设计之初就考虑到要支持大多数的数据处理场景,如:分布式计算、批处理、迭代计算、即席查询、流处理。Spark集多种处理方式与一身,从而可以容易的把不同的处理方式放在一个集群中去运行,这样也节约了硬件成本和维护成本。
Spark提供了Python、Java、Scala及SQL操作接口及丰富的内置库和良好的集成其它大数据处理工具的能力(Spark可以运行在Hadoop集群上并且可以访问任何Hadoop数据源如Cassandra
一个统一的技术栈
Spark包含多个紧密集成的组件。这些组件的核心是一个计算引擎它主要负责在多个Worker间(计算集群内)调度、分发、监控任务。在Spark的快速和通用特性之上又提供了一些高级的组件以满足特定的业务场景,如:SQL、机器学习。这些组件可以紧密结合易于集成,你可以像在项目中使用类库一样使用它们。
这样的紧密结合有以下好处:
1.所有类库和高层组件都能从底层组件发展中获益。例如:如果优化了Spark核心引擎那么构建于其上的 SQL和机器学习组件的性能也会随着提供。
2.降低运行的成本,以前需要单独运行5~10系统,现在只需要运行一个。这就降低了部署、维护、测试的成本。另外当一个新的组件加入Spark栈中,其它组件都可以尝试与其交互。
3.这种紧密的结合最大的好处应该是提供了无缝集成各种数据处理模式的能力。例如:在Spark中你可以用机器学习组件写一个实时对Streaming组件数据进行分类的应用,同时数据分析师可以实时用SQL组件查询分类结果。多个数据工程师和数据科学家可以Python脚本访问同一份数据,其他人通过一个独立的批处理应用获取数据。但整个团队只需要维护一个系统。
接下来我们分别介绍下Spark栈中的组件:
Spark Core:
Spark Core为Spark提供基础功能如:任务调度、内存管理、失败重试、与存储系统交互等。RDD(Resilient Distributed Datasets 弹性分布式数据集)也是在Spark Core中定义的。RDD是Spark编程中的主要数据抽象,它提供一个可以并行操作的分布在多个计算节点上的数据集合。
Spark SQL:
Spark1.0开始加入Spark SQL以取代Shark。Spark Sql主要用于处理结构化数据,就像Hive一样支持SQL查询数据,并且支持多种数据类型如:Hive Table、Parquet、JSON。还可以结合Spark编程的方式对RDDs进行操作。
Spark Streaming:
Spark Streaming 用于实时处理数据,如实时分析web服务器日志、web服务消息,其处理数据的API与Spark Core的RDD API非常相似,这样可以降低开发人员的学习成本。除了API与Spark Core相似外,Sprk Streaming还与Spark Core一样具有负载均衡、高吞吐量、易扩展特性
MLlib:
MLlib(Machine learning library)是Spark提供的用于机器学习的组件。MLlib支持多种机器学习算法如:分类算法、回归算法、聚类算法、协同过滤算法。 并且还支持模型分析及数据导入。MLlib还提供了一些低级别的功能,如优化的梯度优先算法。所有这些方法都可以很好的利用集群环境运行。
GraphX:
GraphX是Spark提供的用于图形(如社交网络图)并行计算的组件。GraphX像Streaming、SQL一样扩展了RDD API以支持图形操作,如:我们可以任意指定顶点和边创建有向图。GraphX支持处理多种图像(如:子图、地图坐标),并且提供了常用图形算法(如页面Rank值计算)支持。
集群管理:
Spark被设计为支持数以千计的计算节点。Spark 支持多种集群管理,如:Hadoop YARN、Apache Mesos 和 Spark 自己提供的 Spark Standalone。如果你把Spark安装在一些空机器上,你可以选择Spark Standalong,这样比较简单、快速开始体验Spark。
Spark适合什么人做什么用?
数据科学分析:
数据处理应用:
Spark简史:
Spark 2009年诞生与伯克利大学RAD实验室也就是后来的AMPL实验室。创建之初是为了弥补Hadoop在迭代计算和交互式查询方面的不足...
Spark版本发布:
Spark创建之初就有一个很活跃的开源项目,没次版本更新都有很多的代码提交者。2014年发布Spark1.0。本教程例子基于1.1.0编写,大部分例子也可以在早期版本中运行。