Spark
什么是Spark
Spark是一种基于内存的快速、通用、可扩展的大数据分析引擎。
Spark 内置模块
Spark Core: 实现Spark的基本功能,包含任务调度吗,内容管理,错误恢复,与存储系统交互等模块。Spark Core中还包含对弹性分布式数据集(简称RDD)的API定义。
Spark SQL: 是spark用来操作结构化数据的程序包,通过SparkSQL,我们可以使用SQL或者ApacheHive版本的SQL方法(HQL)。SparkSQL支持多种数据源,比如Hive表,parquet,以及JSON。
Spark Streaming: 是Spark提供对针对实时数据进行流式处理的组件,提供了用来采集数据的API,并且与SparkCore中的RDD API高度对应。
Spark MLlib: 提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。
集群管理器: Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。为了实现这样的要求,同时获得最大灵活性,Spark 支持在各种集群管理器(Cluster Manager)上运行,包括 Hadoop YARN、Apache Mesos,以及 Spark 自带的一个简易调度器,叫作独立调度器。
Spark 运行模式
Spark运行模式分为本地模式,Standalone 模式,和Yarn模式
本地模式:
-
local: 所有计算都运行在一个线程当中,没有任何并行计算,通常我们在本机执行一些测试代码,或者练手,就用这种模式;
-
local[K]: 指定使用几个线程来运行计算,比如local[4]就是运行4个Worker线程。通常我们的Cpu有几个Core,就指定几个线程,最大化利用Cpu的计算能力;
-
local[*]: 这种模式直接帮你按照Cpu最多Cores来设置线程数了。
使用案例
bin/spark-submit \
--class <main-class> //你的应用的启动类 (如 org.apache.spark.examples.SparkPi)
--master <master-url> \ // 指定 Master 的地址,默认为 Local
--deploy-mode <deploy-mode> \ //是否发布你的驱动到 worker 节点(cluster) 或者作为一个本地客户端
--conf <key>=<value> \ //任意的 Spark 配置属性, 格式 key=value.
... # other options
<application-jar> \ //打包好的应用 jar,包含依赖. 这个 URL 在集群中全局可见。
[application-arguments]
提交流程:
- 提交任务分析:
角色介绍:
-
Driver(驱动器):
- 1)把用户程序转为任务
- 2)跟踪 Executor 的运行状况
- 3)为执行器节点调度任务
- 4)UI 展示应用运行状况
-
Executor(执行器):
- 1)负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程
- 2)通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加速运算
Standalone 模式
构建一个由 Master+Slave 构成的 Spark 集群,Spark 运行在集群中。
Yarn 模式
- Spark 客户端直接连接 Yarn,不需要额外构建 Spark 集群。有 yarnclient 和 yarn-cluster 两种模式,主要区别在于:Driver 程序的运行节点。
- yarn-client:Driver 程序运行在客户端,适用于交互、调试,希望立即看到 app 的输出
- yarn-cluster:Driver 程序运行在由 RM(ResourceManager)启动的 AP(APPMaster)适用于生产环境。
Mesos 模式
Spark 客户端直接连接 Mesos;不需要额外构建 Spark 集群。国内应用比较少,更多的是运用 yarn 调度。