Spark

来源:互联网 发布:中医方剂大全软件 编辑:程序博客网 时间:2024/05/17 01:17

Spark特点

1.Spark是为集群计算中的特定类型的工作负载而设计,即在并行操作之间重用工作数据集的工作负载。为了优化这些类型的工作负载,Spark引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。

2.Spark提供的数据集操作类型有很多种。

3.Spark充分利用内存进行缓存,比较合适做迭代式的运算,有相当一部分机器学习算法是通过多次迭代收敛的算法,适合用Spark来实现。


Spark适用于两种类型的应用

迭代算法类(机器学习、图计算)

交互式数据挖掘


Spark系统结构

RDD  弹性分布式数据集,作用于RDD的各种操作分为transformation和action。

Job   包含多个RDD及作用于相应RDD上的各种操作。

一个job分为多个stage,一个RDD中的数据可以分成多个partition。

DAG,有向无环图,反应RDD之间的依赖关系。

窄依赖,子RDD依赖于父RDD固定的data partition。

宽依赖,子RDD对父RDD中所有data partition都有依赖。


编程模型

RDD是只读的数据分区集合。

RDD经过Transformation处理之后,数据集中的内容会发生改变,经过Action处理之后,数据集中的内容会被归约为一个具体的数值。

只有当RDD上有action时,该RDD及其父RDD上的所有操作才会被提交执行。

缓存机制

RDD的中间计算结果可以被缓存起来,缓存先选Memory,如果memory不够,将会被写入到磁盘中。根据LRU算法决定哪些内容保存在内存,哪些保存在磁盘。


部署

当有Action作用于某RDD时,该action会作为一个job被提交。在提交的过程中,DAGScheduler模块介入运算,计算RDD之间的依赖关系。RDD之间的依赖关系就形成了DAG。


Spark启动

$SPARK_HOME为SPARK根目录。

local模式启动:

MASTER=local  bin/spark-shell


local cluster启动:

local cluster模式是一种伪cluster模式。启动顺序为:

1.启动master。$SPARK_HOME/sbin/start-master.sh,master在8080端口启动监听。

2.启动worker

bin/spark-class    org.apache.spark.deploy.worker.Worker   spark://localhost:7077 -i  127.0.0.1  -c 1 -m 512M


3.启动spark-shell

日志默认保存在$SPARK_HOME/logs目录。

MASTER=spark://localhost:7077  [executor number ,core number , 内存大小]       bin/spark-shell



修改配置

配置文件在$SPARK_HOME/conf目录。

spark-env.sh文件添加内容:

export   SPARK_MASTER_IP=

export   SPARK_LOCAL_IP=

运行

scala>


Spark架构

Spark cluster components

Cluster Manager :相当于master。

Worker Node:相当于slave node。

Job的每个stage可以运行一到多个task,通过多个task实现并行运行功能。

在集群方式下,Cluster Manager运行在一个jvm进程之中,worker运行在另一个jvm进程中。在local cluster中,这些jvm进程都在同一台机器中。


DAGScheduler: 实现将Spark作业分解成一到多个stage,每个stage根据RDD的Partition个数决定Task的个数,然后生成相应的Task set放到TaskScheduler中。

TaskScheduler:实现Task分配到Executor上执行。


提交作业的两种方式

1.Driver运行在Worker上。
通过org.apache.spark.deploy.Client类执行作业。作业运行命令:
./bin/spark-class  org.apache.spark.deploy.Client   launch  spark://host:port  file:///jar_url  org.apache.spark.examples.SparkPi
\
客户端提交作业给Master。Master让一个Worker启动Driver,即SchedulerBackend。另外Master还会让其余Worker启动Exeuctor,即ExecutorBackend。ExecutorBackend启动后会向Driver的SchedulerBackend注册。SchedulerBackend进程中包含DAGScheduler,它会根据用户程序,生成执行计划,并调度执行。对于每个stage的task,都会被存放到TaskScheduler中,ExecutorBackend向SchedulerBackend汇报的时候把TaskScheduler中的task调度到ExecutorBackend执行。所有stage都完成后作业结束。


2.Driver运行在客户端。

./bin/run-example   org.apache.spark.examples.SparkPI  spark://host:port

\


客户端启动后直接运行用户程序,启动Driver相关工作:DAGScheduler和BlockManagerMaster等。客户端的Driver向Master注册,Master让Worker启动Exeuctor。ExecutorBackend启动后会向Driver的SchedulerBackend注册。随后过程同上。


基于Yarn的Spark架构与作业执行流程


这里的Spark  AppMaster相当于Standalone模式下的SchedulerBackend。Spark AppMaster中包括DAGScheduler和YarnClusterScheduler。




JOB的生成和运行

1.由应用程序创建SparkContext实例。

2.利用SparkContext的实例来创建生成RDD。

3.经过多个transformation操作,原始RDD转换成其他类型的RDD。

4.当action作用于转换之后的RDD时,调用SparkContext的runJob方法。

5.sc.runJob->DAGScheduler.runJob->submitJob

6.将job划分为stage,生成finalStage并提交运行。在submitStage中计算stage之间的依赖关系,依赖关系分为宽依赖和窄依赖。如果计算中发现当前的stage没有任何依赖或者所有的依赖都已经准备完毕,则提交task。

7.task真正运行在哪个worker上面是由TaskScheduler来管理,也决定了每个stage可以运行几个task,每个Worker包含一个executor,executor中可以运行多个task。TaskScheduler:submitTasks来提交task。


Task运行

1.首先根据初始化参数生成SparkConf,再根据SparkConf来创建SparkEnv,SparkEnv主要包含几个关键组件:

BlockManager 、MapOutputTracker、ShuffleFetcher、ConnectionManager。


RDD转换过程

textFile   先生成hadoopRDD,然后通过map操作生成MappedRDD。

flatMap  将输入RDD转换成FlatMappedRDD。

map       将输入RDD转换成MappedRDD。


数据集操作分类

操作之后,数据集size不变。     map

操作之后,数据集size扩大。     flatmap

操作之后,数据集size缩小。     subtract

多个数据集合并。                         combine、join

一个数据集分裂成多个数据集。    groupBy

 

Spark:Transformation和Action

transformation:得到一个新的RDD。

action: 得到一个结果。

              

0 0
原创粉丝点击