赞
踩
Spark核心概念
##读<<Python大数据处理库PySpark实战>>总结
1,Spark最重要的特点是基于内存进行计算,用Scala语言编写
2,MR处理数据慢的原因:MR从HDFS中读取数据,将中间结果写入HDFS,然后再重新从HDFS读取数据进MR操作,再回写HDFS中,这个过程涉及多次磁盘IO操作
3,Spark与Hadoop实现原理对比
Spark中,用户提交的任务称为Application,一个 Application对应一个SparkContext,一个Application中存在多个Job,
每触发一次Action操作就会产生一个Job,这些Job可以并行或串行执行,
每一个Job中有多个Stage,每一个Stage里面有多个Task,
由TaskScheduler分发到各个Executor中执行,Executor的生命周期和Application一样,
即使没有Job运行也是存在的,所以Task可以快速启动读取内存进行计算
另外,在Spark中每一个Job可以包含多个RDD转换算子,在调度时可以生成多个Stage,
借助Spark框架中提供的转换算子和RDD操作算子,可以实现很多复杂的数据计算操作,
在Hadoop中,一个作业称为一个Job, Job里面分为Map Task 和Reduce Task,每个Task都在自己的进程中运行,当Task结束时,进程也会随之结束
4,Spark核心概念
Spark Core: Spark Core包含Spark的基本功能,包含任务调度,内存管理和容错机制等,内部定义了RDD(弹性分布式数据集),提供了很多API来创建和操作这些RDD,
为其他组件提供底层的服务
Spark SQL: Spark SQL可以处理结构化数据的查询分析,对于HDFS、HBase等多种数据源中的数据,可以用Spark SQL来进行数据分析。
Spark Streaming: Spark Streaming是实时数据流处理组件,类似Storm,Spark Streaming提供了API来操作实时流数据,一般需要配合消息队列Kafka,
来接收数据做实时统计分析
Spark Mllib: MLlib是一个包含通用机器学习功能的包,是Machine Learning Lib的缩写,主要包括分类、聚类和回归等算法,还包括模型评估和数据导入,
MLlib提供的机器学习算法库,支持集群上的横向扩展
Spark GraphX: GraphX是专门处理图的库,如社交网络图的计算,与Spark Streaming和Spark SQL一样,也提供了RDDAPI,它提供了各种图的操作和常用的图算法
5,Spark运行架构
##$1####
Application:提交一个作业就是一个Application,一个Application只有一个SparkContext由群集上的驱动程序和执行程序组成
##$2####
Driver程序:一个Spark作业运行时会启动一个Driver进程,也是作业的主进程,负责作业的解析,生成Stage和调度Task到Executor上执行,
Driver程序运行应用程序的main函数,并创建SparkContext进程
##$3####
Cluster Manager: Cluster Manager是用于获取群集资源的外部服务(如Standalone、YARN或Mesos)在Standalone模式中即为Master(主节点),
Master是集群的领导者,负责管理集群的资源,接收Client提交上来的作业,以及向Worker节点发送命令,在YARN模式中为资源管理器
##$4####
Worker: Worker节点是集群中的Worker,执行Master发送来的命令来具体分配资源,并在这些资源上执行任务Task,在YARN模式中为NodeManager,负责计算节点的控制
##$5####
Executor: Executor是真正执行作业Task的地方,Executor分布在集群的Worker节点上,每个Executor接收Driver命令来加载和运行Task,
一个Executor可以执行一个到多个Task,多个Task之间可以互相通信
##$6####
SparkContext: SparkContext是程序运行调度的核心,由调度器DAGScheduler划分程序的各个阶段,调度器TaskScheduler划分每个阶段的具体任务,
SchedulerBankend管理整个集群中为正在运行的程序分配计算资源的Executor,SparkContext是Spark程序入口
##$7####
DAGScheduler:负责高层调度,划分Stage,并生成程序运行的有向无环图
##$8####
TaskScheduler:负责具体Stage内部的底层调度,具体Task的调度和容错等
##$9####
Job: Job是工作单元,每个Action算子都会触发一次Job,一个Job可能包含一个或多个Stage
##$10####
Stage:Stage用来计算中间结果的Tasksets,Tasksets中的Task逻辑对于同一RDD内的不同Partition都一样,Stage在Shuffle的时候产生,
如果下一个Stage要用到上一个Stage的全部数据,则要等上一个Stage全部执行完才能开始,Stage有两种:ShuffleMapStage和ResultStage,
除了最后一个Stage是ResultStage外,其他的Stage都是ShuffleMapStage,ShuffleMapStage会产生中间结果,以文件的方式保存在集群里,
Stage经常被不同的Job共享,前提是这些Job重用了同一个RDD
##$11####
Task: Task是任务执行的工作单位,每个Task会被发送到一个Worker节点上,每个Task对应RDD的一个Partition
##$12####
Taskset:划分的Stage会转换成一组相关联的任务集
##$13####
RDD: RDD指弹性分布数据集,它是不可变的,Lazy级别的,粗粒度的数据集合,包含一个或多个数据分片,即Partition
##$14####
DAG: DAG(Directed Acyclic Graph)指有向无环图 Spark实现了DAG计算模型,DAG计算模型是指将一个计算任务按照计算规则分解为若干子任务,子任务之间根据逻辑关系构建成有向无环图
算子:Spark中两种算子Transformation 和 Action
Transformation算子会由DAGScheduler划分到pipeline中,是Lazy级别的,它不会触发任务的执行,而Action算子会触发Job来执行pipeline中的运算
##$15####
窄依赖:窄依赖(Narrow Dependency)指父RDD的分区只对应一个子RDD的分区,如果子RDD只有部分分区数据损坏或者丢失,只需要从对应的父RDD重新计算即可恢复
宽依赖:宽依赖(Shuffle Dependency)指子RDD分区依赖父RDD的所有分区,如果子RDD部分分区甚至全部分区数据损坏或丢失,则需要从所有父RDD上重新进行计算
相对窄依赖而言,数据处理的成本更高,所以应尽量避免宽依赖的使用
##$16####
Lineage:每个RDD都会记录自己依赖的父RDD信息,一旦出现数据损坏或者丢失,将从父RDD迅速重新恢复
6,Spark部署模式 Local模式 Spark on YARN模式(yarn-client/yarn-cluster) Standalone模式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。