一.Spark的四大特性
1. 速度快
Spark比MapReduce快的原因
- MapReduce是简单粗暴地将作业分成Map和Reduce两部分,而Spark更加细腻,它可以将前一个Reduce和后一个Map连接起来(减少对HDFS的操作),形成一个更高效的模型,减少作业调度的次数,所以速度更快。
- Spark有限使用内存进行数据存储,除非内存不够用了。
2. 易用
就是可以通过 java/scala/python/R/SQL 等不同语言快速去编写 spark 程序
3. 通用性
其实可以理解为 Spark 已经形成了自己的一个生态,其内部包含了许多模块
SparkSQL:通过sql去做离线分析
SparkStreaming:解决实时计算用的
Mlib:机器学习的算法库
Graphx:图计算方面的
4. 兼容性
spark程序就是一个计算逻辑程序,这个任务要运行就需要计算资源(内存、cpu、磁盘),哪里可以给当前这个任务提供计算资源,就可以把spark程序提交到哪里去运行
二、Spark架构
1. Driver
它会执行客户端写好的main方法,它会构建一个名叫 SparkContext 对象。该对象 是所有spark程序的执行入口
2. Cluster Manager
给 Spark 程序提供外部计算资源的服务,一般来说有以下3种
- standAlone:Spark 自带的集群模式,整个任务的资源分配由 Spark 集群的老大 master 负责
- Yarn:可以把 Spark 提交到 Yarn 中运行,此时资源分配由 Yarn 中的老大 ResourceManager 负责
- mesos:Apache开源的一个类似于 Yarn 的资源调度平台
正常来说我们都会使用 Yarn 去进行管理
3. Worker Node
Master是整个spark集群的老大,负责任务资源的分配。也就是 Spark 集群中负责干活的小弟,是负责任务计算的节点
4. Executor
Executor 是一个进程,它会在worker节点启动该进程(计算资源)
5. Task
spark任务是以task线程的方式运行在worker节点对应的executor进程中
三、Spark使用方法
1. Spark如何提交应用
普通方式提交
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node1:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
examples/jars/spark-examples_2.11-2.3.3.jar \
10
--class:指定包含main方法的主类
--master:指定spark集群master地址
--executor-memory :指定任务在运行的时候需要的每一个executor内存大小
--total-executor-cores: 指定任务在运行的时候需要总的cpu核数
数字 10 表示程序的入口参数
spark-shell方式提交
Spark 的 shell 作为一个强大的交互式数据分析工具,可以在里面直接写sql进行处理,非常方便。
直接启动bin目录下的spark-shell
./spark-shell --master spark://master:7077 --executor-memory 1G --total-executor-cores 2
2. Spark的提交流程
所谓的提交流程,其实就是我们开发人员根据需求写的应用程序通过 Spark 客户端提交给 Spark 运行环境执行计算的流程。在不同的部署环境中,这个提交过程基本相同。一般会有两种部署执行的方式:Client和Cluster。两种模式主要区别在于:Driver 程序的运行节点位置。
Client 模式将用于监控和调度的 Driver 模块在客户端执行,Cluster模式的在 Yarn 中。
3. Spark启动时的几个重要参数
| --num-executors | 配置 Executor 的数量 |
|---|---|
| --executor-memory | 配置每个 Executor 的内存大小 |
| --executor-cores | 配置每个 Executor 的虚拟 CPU core 数量 |