一:Spark 运行模式
即作业以什么样的模式去执行,主要是单机、分布式两种方式的细节选择。
| 序号 |
模式名称 |
特点 |
应用场景 |
| 1 |
本地运行模式(local) |
单台机器多线程来模拟spark分布式计算 |
机器资源不够测试验证程序逻辑的正确性 |
| 2 |
伪分布式模式 |
单台机器多进程来模拟spark分布式计算 |
机器资源不够测试验证程序逻辑的正确性 |
| 3 |
standalone(client) |
独立布署spark计算集群自带clustermanagerdriver运行在spark submit client端 |
机器资源充分纯用spark计算框架任务提交后在spark submit client端实时查看反馈信息数据共享性弱测试使用还可以,生产环境极少使用该种模式 |
| 4 |
standalone(cluster) |
独立布署spark计算集群自带clustermanagerdriver运行在spark worker node端 |
机器资源充分纯用spark计算框架任务提交后将退出spark submit client端数据共享性弱测试和生产环境均可以自由使用,但更多用于生产环境 |
| 5 |
spark on yarn(yarn-client) |
以yarn集群为基础只添加spark计算框架相关包driver运行在yarn client上 |
机器资源充分多种计算框架混用数据共享性强任务提交后在yarn client端实时查看反馈信息 |
| 6 |
spark on yarn(yarn-cluster) |
以yarn集群为基础只添加spark计算框架相关包driver运行在集群的am contianer中 |
机器资源充分多种计算框架混用数据共享性强任务提交后将退出yarn client端 |
| 7 |
spark on mesos/ec2 |
与spark on yarn类似 |
与spark on yarn类似在国内应用较少 |
二:Spark 用户交互方式
- spark-shell:spark命令行方式来操作spark作业。
- spark-submit:通过程序脚本,提交相关的代码、依赖等来操作spark作业。
- spark-sql:通过sql的方式操作spark作业。
- sql相关的学习、测试、生产环境研发均可以使用该直接操作交互方式。
- spark-class:最低层的调用方式,其它调用方式多是最终转化到该方式中去提交。
- sparkR、sparkPython:通过其它非java、非scala语言直接操作spark作业的方式。
三:Spark-Shell 操作
3.1 交互方式定位
- 一个强大的交互式数据操作与分析的工具,提供一个简单的方式快速学习spark相关的API。
3.2 启动方式
- 前置环境:已将spark-shell等交互式脚本已加入系统PATH变量,可在任意位置使用。
- 以本地2个线程来模拟运行spark相关操作,该数量一般与本机的cpu核数相一致为最佳spark-shell –master local[2]
3.3 相关参数
- 参数列表获取方式:spark-shell –help
四:Spark-submit 操作
4.1 交互方式定位
- 最常用的通过程序脚本,提交相关的代码、依赖等来操作spark作业的方式。
4.2 启动方式
1 2 3 4 5 6 7 8
| spark-submit \ --class <main-class> \ --master <master-url> \ --jars jar_list_by_comma \ --conf <key>=<value> \ ... # other options <application-jar> \ [application-arguments]
|
4.3 spark-submit 详细参数说明
| 参数名 |
参数说明 |
| –master |
master 的地址,提交任务到哪里执行,例如 spark://host:port, yarn, local |
| –deploy-mode |
在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client |
| –class |
应用程序的主类,仅针对 java 或 scala 应用 |
| –name |
应用程序的名称 |
| –jars |
用逗号分隔的本地jar 包,设置后,这些 jar 将包含在 driver 和 executor 的 classpath 下 |
| –packages |
包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标 |
| –exclude-packages |
为了避免冲突 而指定不包含的 package |
| –repositories |
远程 repository |
| –conf PROP=VALUE |
指定 spark 配置属性的值, 例如 -conf spark.executor.extraJavaOptions=”-XX:MaxPermSize=256m” |
| –properties-file |
加载的配置文件,默认为 conf/spark-defaults.conf |
| –driver-memory |
Driver内存,默认 1G |
| –driver-java-options |
传给 driver 的额外的 Java 选项 |
| –driver-library-path |
传给 driver 的额外的库路径 |
| –driver-class-path |
传给 driver 的额外的类路径 |
| –driver-cores |
Driver 的核数,默认是1。在 yarn 或者 standalone 下使用 |
| –executor-memory |
每个 executor 的内存,默认是1G |
| –total-executor-cores |
所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用 |
| –num-executors |
启动的 executor 数量。默认为2。在 yarn 下使用 |
| –executor-core |
每个 executor 的核数。在yarn或者standalone下使用 |
4.4 关于–master取值的特别说明
| local |
本地worker线程中运行spark,完全没有并行 |
| local[K] |
在本地work线程中启动K个线程运行spark |
| local[*] |
启动与本地work机器的core个数相同的线程数来运行spark |
| spark://HOST:PORT |
连接指定的standalone集群的master,默认7077端口 |
| mesos://HOST:PORT |
连接到mesos集群,国内用的极少 |
| yarn |
使用yarn的cluster或者yarn的client模式连接。取决于–deploy-mode参数,由deploy-mode的取值为client或是cluster来最终决定。也可以用yarn-client或是yarn-cluster进行二合一参数使用,保留–master去掉—deploy-mode参数亦可。–master yarn-client,相当于—master yarn –deploy-mode client的二合一 |