Spark | 架构
架构
spark生态
Spark
的中间数据放到内存中,对于迭代运算效率更高
Shark
基本上就是在Spark
的框架基础上提供和Hive
一样的HiveQL
命令接口
Spark Steaming
是构建在Spark
上处理Stream
数据的框架,其基本原理是将Stream
数据分成小的时间片断,以类似batch
批量处理的方式来处理这小部分数据
Spark On Mesos模式
两种调度模式:粗粒度和细粒度
粗粒度模式(Coarse-grained Mode
)
每个应用程序的运行环境由一个Dirver
和若干个Executor
组成
每个Executor
占用若干资源,内部可运行多个Task
应用程序运行之前,申请好全部资源,运行结束后,回收这些资源
细粒度模式(Fine-grained Mode
)
思想是按需分配
启动executor
,但每个executor
占用资源仅仅是自己运行所需的资源
mesos
会为每个executor
动态分配资源
单个Task
运行完之后可以马上释放对应的资源
每个Task会汇报状态给Mesos slave
和Mesos Master
多进程vs多线程
MapReduce
采用了多进程模型,便于细粒度控制每个任务占用的资源,但会消耗较多的启动时间
Spark
同节点上的任务以多线程的方式运行在一个JVM
进程中
多线程好处
任务启动速度快
有利于共享内存,非常适合内存密集型任务
避免了每个任务重复申请资源带来的时间开销
MapReduce多进程模型
每个Task
运行在一个独立的JVM
进程中
可单独为不同类型的Task
设置不同的资源量,目前支持内存和CPU
两种资源
每个Task
都要经历“申请资源 > 运行Tas
k > 释放资源”的过程
Spark多线程模型
每个节点上可以运行一个或多个Executor
服务
每个Executor
配有一定数量的slot
每个Executor
单独运行在一个JVM
进程中,每个Task
则是运行在Executor
中的一个线程
同一个Executor
内部的Task
可共享内存