Spark应用提交指南(spark-submit)
来源:互联网 发布:python量化策略回测 编辑:程序博客网 时间:2024/05/16 06:00
前言:之前的工作中,关于spark的使用一直停留在能运行、能完成相关功能的境地下,最近涉及到很多关于spark集群调优等各种细枝末节方面的东西,自此决定恶补大数据相关基础的东西,顺便做个笔记,帮助自己记忆。 关于spark的相关笔记尽力基于spark 2.x版本(其实在我目前使用的情况下,1.x与2.x内容基本别无二致)。使用2.x的原因是之前在使用1.6时踩过坑,换2.x后完美解决,该坑我会在之后的笔记中整理出来。
笔记的内容就从spark-submit开始吧。这边我要提出来的个人观点是,该类技术,第一手资料永远是来自官方文档!。Spark 2.1.0的spark-submit官网地址链接为:Submitting Applications。
- 绑定依赖关系
- 使用submit启动应用程序
- Master URL
- 从文件中加载配置
- 高级依赖管理
- 更多信息
绑定依赖关系
如果你的代码依赖其它的项目,为了发布到集群中,你需要为你的应用打包它们。 这样来做: 创建一个装配assembly jar (或者 “uber” jar) 来包含你的代码和依赖. sbt 和 Maven都有assembly 插件. 当用插件创建assembly jar时,需要将Spark 和 Hadoop设置为provided依赖; 不需要将它们打包进你的jar, 这是因为集群管理器在运行时会提供它们. 一旦你打包好,你可以调用bin/spark-submit脚本, 将你的jar作为参数。
我通常会自己下载相应的jar包加载在应用程序中,很少会使用Maven和sbt,原因:不会……,这边立个flag,在后续的笔记中整理下Maven和sbt相关的使用方法。
如果使用Python, 你可以使用–py-files参数增加 .py, .zip 或者 .egg 文件. 如果你依赖多个Python文件, 我们推荐你将它们打包成一个.zip 或者 .egg。
使用submit启动应用程序
一旦打包好,就可以使用bin/spark-submit脚本启动应用了. 这个脚本负责设置spark使用的classpath和依赖,支持不同类型的集群管理器和发布模式:
./bin/spark-submit \ --class <main-class> --master <master-url> \ --deploy-mode <deploy-mode> \ --conf <key>=<value> \ ... # other options <application-jar> \ [application-arguments]
一些常用的选项有:
- class: 你的应用的启动类 (如 org.apache.spark.examples.SparkPi)
- master: 集群的master URL (如 spark://23.195.26.187:7077)
- deploy-mode: 是否发布你的驱动到worker节点(cluster) 或者作为一个本地客户端 (client) (default: client)*
- conf: 任意的Spark配置属性, 格式key=value. 如果值包含空格,可以加引号“key=value”。
- application-jar: 打包好的应用jar,包含依赖. 这个URL在集群中全局可见。 比如hdfs:// 共享存储系统, 如果是 file:// path, 那么所有的节点的path都包含同样的jar.
- application-arguments: 传给main()方法的参数。
一个通用发布策略是从一个网管机器提交你的应用, 这台机器物理的和你的worker机器在一起(比如在一个独立EC2集群中的Master节点). 在这种部署模式下, 适合采用client mode模式. 如果设置client模式, 驱动直接在spark-submit进程中启动,输入输出都可以显示在控制台. 所以这种模式特别适合REPL(读取-求值-输出循环), 比如Spark shell.
另外一种情况, 如果你的应用从离worker机器很远的机器提交,比如你本地笔记本,通常采用集群模式减小驱动和executor之间网络延迟。注意集群模式当前并不支持standalone clusters, Mesos clusters, 或者 python应用.
对于Python应用, 简单把.py文件取代 的JAR, 并将Python .zip, .egg 或者 .py 文件增加到搜索路径中(–py-files).
使用–help列出所有的选项. 这里有一个例子,此处的参数根据集群资源的设置详解参考Spark-submit参数说明:
# Run application locally on 8 cores./bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master local[8] \ /path/to/examples.jar \ 100# Run on a Spark standalone cluster./bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://207.184.161.138:7077 \ --executor-memory 20G \ --total-executor-cores 100 \ /path/to/examples.jar \ 1000# Run on a YARN clusterexport HADOOP_CONF_DIR=XXX./bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn-cluster \ # can also be `yarn-client` for client mode --executor-memory 20G \ --num-executors 50 \ /path/to/examples.jar \ 1000# Run a Python application on a cluster./bin/spark-submit \ --master spark://207.184.161.138:7077 \ examples/src/main/python/pi.py \ 1000
Master URL
master URL可以是以下格式:
从文件中加载配置
spark-submit脚本可以从一个属性文件中加载缺省的Spark配置, 并把它们传给你的应用. 在默认情况下它会从Spark文件夹的conf/spark-defaults.conf读取参数,更多细节请看加载默认配置。
加载缺省配置可以避免在spark-submit设置部分参数. 举例来讲, 如果配置了spark.master, 你就可以不用在调用spark-submit脚本时设置–master参数. 通常SparkConf配置值具有最高的优先级, 然后是spark-submit的参数, 其次才是缺省文件中的值.
如果你不清楚配置项来自哪里,你可以使用–verbose打印详细的调试信息。
高级依赖管理
当使用spark-submit, 你的应用jar以及其它通过–jars包含的jar文件将自动传送给集群。 Spark使用下面的URL scheme 为不同的策略分发jar文件:
- file: -绝对路径和 file:/ URIs 由驱动的HTTP文件服务器提供。 每个executor从驱动的http服务器拉取文件.
- hdfs:, http:, https:, ftp: - 从期望URI地址拉取文件
- local: - local:/ 期望存在所有的worker节点的本地文件系统中. 这意味着没有网络I/O发生,适合已经发布到各worker节点的大的文件/jar, 或者共享的文件系统 NFS, GlusterFS等.
注意JAR和文件被复制到每个executor节点的相应的SparkContext的工作文件夹下。 长期运行会占用大量的磁盘空间,需要清理。YARN会自动清理, 而Spark standalone通过设置spark.worker.cleanup.appDataTtl来配置自动清理.
对于python, t等价的–py-files参数可以用来发布.egg, .zip 和 .py 库到executor.
更多信息
一旦你发布了你的应用,集群模式概述描述了分布执行的组件,以及如何监控和调试应用.
- Spark应用提交指南(spark-submit)
- 提交spark应用程序spark-submit
- spark之13:提交应用的方法(spark-submit)
- spark之13:提交应用的方法(spark-submit)
- spark-submit提交参数设置
- spark-submit提交模式
- Spark源码系列(一)spark-submit提交作业过程
- Spark源码系列(一)spark-submit提交作业过程
- Spark源码系列(一)spark-submit提交作业过程
- Spark源码解析之任务提交(spark-submit)篇
- Spark源码系列(一)spark-submit提交作业过程
- Spark源码系列(一)spark-submit提交作业过程
- 抛开spark-submit脚本提交spark程序
- 【Spark系列6】spark submit提交任务
- spark-submit提交kafka测试
- spark-submit提交集群命令
- Spark Cluster与Application中的重要概念以及如何提交应用spark-submit
- spark-submit动态提交的办法(SparkLauncher实战)
- PHPMailer < 5.2.18
- mybatis mysql 批量insert 返回主键
- Android5.1 电池充电剩余时间计算
- hive原理与源码分析-hive源码架构与理论(一)
- 深度学习 发展 优缺点 面试
- Spark应用提交指南(spark-submit)
- android 常见死机问题--log分析
- PAT 乙级 1032. 挖掘机技术哪家强(20)
- Laravel 5.4 如何定义API Routes
- C语言中交换两个数的方法
- SAP是ECC6.0但是不确定是EHP6还是EHP7,怎么看
- tensorflow自定义网络层、激活函数(self-defined layer)
- Linux内核模块动态添加方法
- hihoCoder 1062 : 最近公共祖先·一(map、set 运用)