spark特性:
提供了java scala python 和R的api支持。
在生产环境上扩展超过8000个节点。
可以在内存中缓存交互中间数据的能力:提炼一个工作集合,缓存它,反复查询。
低级别的水平伸缩的数据检索可以通过scala或者python 命令行进行交互。
高级别的流处理库spark streaming可以处理流数据。
通过spark sql支持结构化的关系查询处理(sql)。
机器学习和图形处理的高级别库。
spark工程构成:
1. spark核心及RRDs(Resilient Distributed Datasets)
spark核心是整个工程的基础,它提供了分布式任务的分发、调度和基本的IO功能。最基本的抽象就是RRDs,一个跨机器的分区数据的逻辑集合。RDDs可以由引用的外部存储系统创建,或者在已存在的RDDs上应用粗粒度变换(如map,filter,reduce,join等)。
RDDs抽象接口由特定语言java、python、scala 的api接口暴露,如在本地数据集合一样。这简化了编程的复杂性,因为应用操作RDDs的方式和操作本地数据集合类似。
2. spark sql
spark sql组件位于spark核心之上,它引入了名称为SchemaRDD的新的数据抽象。SchemaRDD支持结构化和半结构化数据。spark sql 提供了基于特定语言scala,java,python操作schemaRDDs。它也提供了通过命令行和odbc/jdbc服务器来操作sql语句的支持。从Spark 1.3开始,SchemaRDD命名为DataFrame。
3. spark streaming
spark streaming利用spark核心的快速调度能力来执行流分析。它小批量采集数据并且对这些小批量数据执行RDD转换。这种设计使在一台引擎中,批量分析的应用程序代码也可以用在流分析的批量分析中。
4. MLLIb机器学习库
MLLib是一个位于spark之上的分布式系统学习框架,因其基于分布式内存的spark架构,它的速度达到相同版本的基于磁盘的apache Mahout的9倍,扩展性甚至优于Vowpal Wabbit。它实现了很多通用机器学习和分析算法来简化大规模机器学习管道,包括:
summary statistics, correlations, stratified sampling, hypothesis testing, random data generation; classification and regression: SVMs, logistic regression, linear regression, decision trees, naive Bayes; collaborative filtering: alternating least squares (ALS); clustering: k-means, Latent Dirichlet Allocation (LDA); dimensionality reduction: singular value decomposition (SVD), principal component analysis (PCA); feature extraction and transformation; optimization primitives: stochastic gradient descent, limited-memory BFGS (L-BFGS);
5. GraphX
GraphX是一个位于spark之上的分布式图形处理框架。
spark源码结构
整体上Spark分为以下几个主要的子模块:
deploy
:deply
模块包括Master
,Work
和Client
,参见architecture图的最上 部分。deploy
主要负责启动和调度用户实现的Spark application并且分配资源给用户 application,类似于Hadoop YARN框架。scheduler
:scheduler
主要负责调度用户application内的tasks,根据部署方式的不 同Spark实现了多种不同的scheduler
,包括LocalScheduler
,ClusterScheduler
等 。rdd
:rdd
类似于一个分布式的数据集,用户可以根据rdd
所提供的api进行数据集的 操作,rdd
模块是用户交互的主要模块。storage
:storage
模块主要负责数据集,也就是rdd
的存取。根据设定的不同,数 据可以保存在内存、磁盘或是两者。Spark与Hadoop MapReduce最大的不同在于MapReduce 将数据保存在HDFS上,而Spark则由自己的存储系统。
参考文献
【1】https://en.wikipedia.org/wiki/Apache_Spark
【2】http://jerryshao.me/architecture/2013/03/29/spark-overview/
微信公众号: 架构师日常笔记 欢迎关注!