本文共 3736 字,大约阅读时间需要 12 分钟。
Spark概念
spark 是基于内存的(优先使用内存),分布式的大数据计算框架
spark和hadoop-mapreduce的区别
Spark 在 MapReduce 之上发展而来,继承了分布式并行计算的优点并改进了缺陷
mapreduce 读 -- 处理 -- 写磁盘 -- 读 -- 处理 -- 写
spark 读 -- 处理 -- 处理 -- (需要的时候)写磁盘
1、高效率:Spark把中间数据放到内存中,MapReduce计算结果需要保存到磁盘上,Spark支持DAG(有向无环)图的分布式并行计算,减少了迭代过程中数据的磁盘IO,提高了处理效率
2、高容错:Spark 引进了弹性分布式数据集 RDD ,某个节点如果数据集一部分丢失,则可以根据“血统”对它们进行重建,另外还可以通过CheckPoint实现容错
3、高通用:MapReduce 只有 Map 和 Reduce 两种操作,Spark 的数据集操作类型有很多,大致分为:Transformations和Actions两大类 。Transformations 常用包括 Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、MapValues、Sort,Actions 常用包括 Collect、Reduce、Count、Lookup和Save等操作
4、支持的开发语言更多,Spark 支持 4 种开发语言:scala,java,python,R
总结:Spark是MapReduce的替代方案,兼容HDFS、Hive,可融入Hadoop的生态
Spark部署模式
运行环境 | 模式 | 描述 |
Local | 本地模式 | 常用于本地开发测试,如在eclipse,idea中写程序测试等。本地还分为local单线程和local-cluster多线程 |
Standalone | 集群模式 | Spark自带的一个资源调度框架,支持完全分布式。存在的Master单点故障可由ZooKeeper来实现HA |
Yarn | 集群模式 | 运行在yarn资源管理器框架之上,由yarn负责资源管理,Spark负责任务调度和计算 |
yarn-client | 以client模式连接到YARN cluster. 集群的位置基于HADOOP_CONF_DIR 变量找到 | |
yarn-cluster | 以cluster模式连接到YARN cluster. 集群的位置基于HADOOP_CONF_DIR 变量找到 | |
Mesos | 集群模式 | 运行在mesos资源管理器框架之上,由mesos负责资源管理,Spark负责任务调度和计算 |
Kubernetes | 集群模式 | 运行在Kubernetes资源管理的集群上,目前Kubernetes调度程序是实验性的 |
spark4种部署模式,都通过master 参数指定
1、local
本地模式
不指定master
或者
--master local local[N] local[*]
local: 只是用一个cores
local[N] : 使用N个cores
local[*] : 使用当前机器的所有的可以用的cores
2、standalone
spark本身提供的集群模式
--master spark://host:port
3、yarn
运行在yarn资源管理器框架之上,由yarn负责资源管理,Spark负责任务调度和计算
--master yarn
4、mesos
运行在mesos资源管理器框架之上,由mesos负责资源管理,Spark负责任务调度和计算
--master mesos://host:port
提交任务两个命令
spark-submit 程序执行之后,application就会退出
spark-shell 会一直占有一个application,手动退出,ctrl + c
1、spark-shell
是一个交互式的命令行,主要用于测试。
spark-shell脚本,实际调用的是spark-submit脚本:spark-shell --master spark://hdp-01:7077
在spark-shell中,已经初始化了一个名称是sc 的 SparkContext,写spark程序之前,必须创建SparkContext实例对象
2、spark-submit
常用于提交spark任务的命令,需要有jar包。
sparkSubmit的使用:spark-submit 选项 jar包 参数列表
spark-submit –master xx –class 程序运行的主类 xxx.jar input output
当我们提交spark-submit或者spark-shell时,就会生成一个Application
利用spark-shell来编程
# spark-shell --master spark://hdp-01:7077
初始化了SparkContext sc
local模式/集群模式,集群模式需要所有worker节点都有处理文件
Spark中的RDD上的方法都称之为算子,分为两类:
transformation类算子,lazy执行,会生成新的rdd 。遇action算子时,才真正运行
spark中的基本机制
Spark角色
Master: 管理worker,接收提交任务,进行任务分配调度
Worker:工作节点,管理自己节点上的executor
执行流程
1、client模式提交任务后,会在客户端启动Driver进程
2、Driver会向Master申请启动Application启动资源
3、资源申请成功,Driver端将task发送到worker端执行
4、worker将task执行结果返回到Driver端
总结
Driver端可看到task执行情况,生产中不能使用client模式,因为:提交大量application到集群运行,Driver每次都会在client端启动,导致客户端网卡流量暴增问题
执行流程
1、cluster模式提交应用程序后,会向Master请求启动Driver
2、Master接受请求,随机在集群一台节点启动Driver进程
3、Driver启动后为当前的应用程序申请资源
4、Driver端发送task到worker节点上执行
5、worker将执行情况和执行结果返回给Driver端
总结
Driver进程在集群某一台Worker上启动,客户端是无法查看task执行情况。提交大量application到集群运行,那么流量暴增问题散布在集群上
Driver任务
负责应用程序资源的申请
任务的分发
结果的回收
监控task执行情况
Spark角色介绍
1、Application:Spark应用程序
Spark应用程序,包含了Driver功能代码和分布在集群中多个节点上运行的Executor代码
Spark应用程序,由一个或多个作业JOB组成
2、Driver:驱动程序
Driver即Application的Main()函数并且创建SparkContext,SparkContext是Spark应用程序的运行环境,通常SparkContext代表Driver
3、Cluster Manager:资源管理器
集群获取资源的外部服务,常用的有:Standalone,Spark原生的资源管理器,由Master负责资源的分配; Yarn,由Yarn中的ResearchManager负责资源的分配;Messos,由Messos中的Messos Master负责资源管理
4、Executor:执行器
Application运行在Worker节点上的一个进程,该进程负责运行Task,负责将数据存在内存或者磁盘上,每个Application都有各自独立的一批Executor
5、RDD:弹性分布式数据集
Spark的基本计算单元,可以通过一系列算子进行操作(主要有Transformation和Action操作)
6、窄依赖
父RDD每个分区被一个子RDD的分区所用
7、宽依赖
父RDD的每个分区被多个子RDD分区使用
8、DAG:有向无环图
RDD之间的依赖关系
9、TaskScheduler:任务调度器
将TaskSet提交给worker(集群)运行并回报结果;负责每个具体任务的实际物理调度
10、Job:作业
由一个或多个调度阶段所组成的一次计算作业;包含多个Task组成的并行计算
11、Stage:调度阶段
一个作业分为多个阶段;Stage分成两种类型ShuffleMapStage、ResultStage
12、TaskSet:任务集
由一组关联的,但相互之间没有Shuffle依赖关系的任务所组成的任务集
1)一个Stage创建一个TaskSet
2)为Stage的每个Rdd分区创建一个Task,多个Task封装成TaskSet
13、Task:任务
被送到某个Executor上的工作任务;单个分区数据集上的最小处理流程单元
转载地址:http://xvazi.baihongyu.com/