版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Wee_Mita/article/details/70336530
1.Spark基本模块
- RDD (Resillient Distributed Dataset):弹性分布式数据集
- Task:具体执行的任务。Task(ShuffleMapTask & ReduceTask)
- Job:用户提交的作业。Job(one or more Task)
- Stage:Job分成的阶段。Job(one or more Stage)
- Partition:数据分区。RDD(one or more Partition)
- NarrowDependency:窄依赖,即子RDD依赖于父RDD中固定的Partition。NarrowDepenency(OneToOneDependency & RangeDependency)
- ShuffleDependency:宽依赖(shuffle依赖),即子RDD依赖于父RDD中所有Partition
- DAG(Directed Acycle Graph):有向无环图,用于反应各个RDD之间的依赖关系
2.Spark模块设计
2-1 Spark Core:
Spark的核心功能模块,包括:
SparkContext的初始化(Driver Application通过SparkContext提交)、部署模式、存储体系、任务提交与执行、计算引擎
2-2 Spark SQL:提供SQL处理能力
2-3 Spark Streaming:提供流式处理能力
支持:
Kafka、Flume、Twitter、MQTT、ZeroMQ、Kinesis和简单的TCP套接字等数据源,还提供窗口操作
Spark Streaming详细介绍http://blog.csdn.net/Wee_Mita/article/details/70882318
2-4 GraphX:提供图计算处理能力,支持分布式
Pregel提供的API可以解决图计算中的常见问题
2-5 MLlib:提供机器学习相关的算法,一致的API接口大大降低了用户学习的成本
提供:
基础统计、分类、回归、决策树、随机森林、朴素贝叶斯、保序回归、协同过滤、聚类、维数缩减、特征提取与转型、频繁模式挖掘、语言模型标记语言、管道等
3.Spark模型设计
Spark编程模型
1. 使用SparkContext提供的API(textFile、sequenceFile、runJob、stop)编写Driver Application程序【SQLContext、HiveContext、StreamingContext对SparkContext进行封装,并提供了SQL、Hive、流式计算相关的API】
PS:SparkContext隐藏了网络通信,分布式部署,消息通信,存储能力,计算能力,缓存,测量系统,文件服务,Web服务等
2. SparkContext提交的用户应用程序
2-1 使用BlockManager和BroadcastManager将任务的Hadoop配置进行广播
2-2 由DAGScheduler将任务转换为RDD并组织成DAG
2-3 DAG被划分为不同的Stage
2-4 TaskScheduler借助ActorSystem将任务提交给集群管理器(Cluster Manager)
3. Cluster Manager给任务分配资源(即将具体任务分配到Worker上)
3-1 Worker创建Executor来处理任务的运行
PS:Standalone、YARN、Mesos、EC2可以作为Spark的Cluster Manager
RDD计算模型
- RDD可以看成做是对各种数据计算模型的统一抽象,Spark的计算过程主要是RDD的迭代计算过程。
- RDD的迭代计算过程非常类似于管道,分区数量取决于partition数量的设定。
- 每个分区的数据只会在一个Task中计算,所以分区可以在多个机器节点的Executor上并行执行。
4.Spark基本架构图