Spark架构综述

来源:互联网 发布:淘宝怎么优化宝贝 编辑:程序博客网 时间:2024/05/16 23:51



用户程序从最开始的提交到最终的计算执行, 需要经历以下几个阶段:
1) 用户程序创建SparkContext时, 新创建的SparkContext实例会连接到Cluster ManagerCluster Manager会根据用户提交时设置的
CPU和内存等信息为本次提交分配计算资源, 启动Executor
2Driver会将用户程序划分为不同的执行阶段, 每个执行阶段由一组完全相同的Task组成, 这些Task分别作用于待处理数据的
不同分区。 在阶段划分完成和
Task创建后,Driver会向Executor发送Task
3Executor在接收到Task后, 会下载Task的运行时依赖, 在准备好Task的执行环境后, 会开始执行Task, 并且将Task的运行状
态汇报给
Driver
4Driver会根据收到的Task的运行状态来处理不同的状态更新。Task分为两种: 一种是Shuffle Map Task, 它实现数据的重新洗
牌, 洗牌的结果保存到
Executor所在节点的文件系统中; 另外一种是Result Task, 它负责生成结果数据。
5Driver会不断地调用Task, 将Task发送到Executor执行, 在所有的Task都正确执行或者超过执行次数的限制仍然没有执行成功
时停止。


框架:


Spark Streaming
Spark Streaming基于Spark Core实现了可扩展、 高吞吐和容错的实时数据流处理。 现在支持的数据源有KafkaFlumeTwitter
ZeroMQKinesisHDFSS3TCP socket。 处理后的结果可以存储到HDFSDatabase或者Dashboard ,Spark Streaming是将流式计算分解成一系列短小的批处理作业。 这里的批处理引擎是Spark, 也就是把Spark Streaming的输入数据
按照批处理尺寸( 如
1秒) 分成一段一段的数据(Stream) , 每一段数据都转换成Spark中的RDD, 然后将Spark Streaming中对
DStream的转换操作变为针对Spark中对RDD的转换操作, 将RDD经过操作变成中间结果保存在内存中。 整个流式计算可以根据
业务的需求对中间的结果进行叠加, 或者存储到外部设备

Spark Streaming提供了一套高效、 可容错的准实时大规模流式处理框架, 它能和批处理及即时查询放在同一个软件栈中, 降低
学习成本。 对于熟悉
Spark编程的用户, 可以用较低的成本学习Spark Streaming编程。
MLlib
MLlibSpark对常用的机器学习算法的实现库, 同时含有相关的测试和数据生成器, 包括分类、 回归、 聚类、 协同过滤、 降维
dimensionality reduction) 以及底层基本的优化元素。
Spark 1.2.0中, MLlib最大的改进是引入了称为spark.ml的机器学习工具包, 支持了流水线的学习模式, 即多个算法可以用不
同参数以流水线的形式运行。 在工业界的机器学习应用部署过程中, 流水线的工作模式是很常见的。 新的
ML工具包使用Spark
SchemaRDD来表示机器学习的数据集合, 提供了Spark SQL直接访问的接口。 此外, 在机器学习的算法方面, 增加了两种基
于树的方法, 即随机森林和梯度增强树。
现在,
MLlib实现了许多常用的算法, 与分类和回归相关的算法包括SVM、 逻辑回归、 线性回归、 朴素贝叶斯分类、 决策树
等; 协同过滤实现了交替最小二乘法(
Alternating Least SquareALS) ; 聚类实现了K-means、 高斯混合(Gaussian mixture) 、
Power Iteration ClusteringPIC) 、 Latent Dirichlet AllocationLDA) 和Streaming版本的K-means; 降维实现了Singular Value
Decomposition
SVD) 和Principal Component AnalysisPCA) ; 频繁模式挖掘( frequent pattern mining) 实现了FP-growth

Spark SQL
自从Spark 1.0版本的Spark SQL问世以来, 它最常见的用途之一就是作为一个从Spark平台获取数据的渠道。 早期用户比较喜爱
Spark SQL提供的从现有Apache Hive表以及流行的Parquet列式存储格式中读取数据的支持。 之后,Spark SQL还增加了对其他格
式的支持, 比如说
JSON。 到了Spark 1.2版本,Spark的原生资源与更多的输入源进行整合集成, 这些新的整合将随着纳入新的
Spark SQL数据源API而成为可能。 

数据源API通过Spark SQL提供了访问结构化数据的可插拔机制。 这使数据源有了简便的途径进行数据转换并加入到Spark平台
中。 由
API提供的密集优化器集合意味着过滤和列修剪在很多情况下都会被运用于数据源。 这些综合的优化极大地减少了需要
处理的数据量, 因此能够显著提高
Spark的工作效率。
数据源
API的另一个优点就是不管数据的来源如何, 用户都能够通过Spark支持的所有语言来操作这些数据。 例如, 那些用Scala
实现的数据源, pySpark用户不需要其他的库开发人员做任何额外的工作就可以直接使用。 此外,Spark SQL可以使用单一接口
访问不同数据源的数据。 总之,
Spark 1.2提供的这些功能进一步统一了大数据分析的解决方案。


0 0
原创粉丝点击