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分为以下几个主要的子模块:

  • deploydeply模块包括MasterWorkClient,参见architecture图的最上 部分。deploy主要负责启动和调度用户实现的Spark application并且分配资源给用户 application,类似于Hadoop YARN框架。
  • schedulerscheduler主要负责调度用户application内的tasks,根据部署方式的不 同Spark实现了多种不同的scheduler,包括LocalSchedulerClusterScheduler等 。
  • rddrdd类似于一个分布式的数据集,用户可以根据rdd所提供的api进行数据集的 操作,rdd模块是用户交互的主要模块。
  • storagestorage模块主要负责数据集,也就是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/

posted on 2015-08-21 15:11  一天不进步,就是退步  阅读(420)  评论(0编辑  收藏  举报