提交应用

SPARK_HOME/bin目录中的spark-submit脚本用于启动集群上的应用程序。它可以通过一个统一的接口使用所有Spark支持的集群管理器。

绑定应用程序的依赖

如果你的代码依赖其他项目,你需要将其与你的应用程序一起打包,以便将代码分发到Spark集群。为此,创建一个包含你的代码及其依赖的assembly jar (or uber jar)。sbt和maven都有对应的组装插件。在创建assembly jar时,将Spark和Hadoop依赖设为provided级别即可,它们不需要捆绑,因为它们是由集群管理器在运行时提供的。

用spark-submit脚本启动应用

一旦你有一个组装jar,你可以调用bin/spark-submit脚本启动应用。该脚本负责使用Spark及其依赖来设置环境变量,并且可以支持不同集群管理器及部署模式:

./bin/spark-submit \
--class <main-class> \
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]

一些常用的选项如下:

--class         应用的main类(例如org.apache.spark.examples.SparkPi)

--master  集群的master URL, spark standalone对应的是spark://host:port, mesos对应的是mesos://host:port,yarn,or local.

--deploy-mode  本地启动驱动程序(client)还是在集群的一个工作节点上启动驱动程序(cluster),默认是client

--conf           键值对格式的属性设置。如果属性值有空格的话,则用双引号包裹key=value, 形如"key=value"

application-jar  包含应用代码和依赖的组装jar的路径。路径对整个集群来说必须是可访问的,例如,一个hdfs://或者file://

application-arguments  传递给main方法的参数

常见的部署策略是从与你的worker节点物理位置相同的网关机器提交你的应用程序。这时候,client模式是合适的。在client模式下,驱动程序直接在作为集群客户端的spark-submit进程中启动。应用程序的输入和输出连接到控制台。因此,这种模式特别适用于设计REPL的应用程序(比如Spark shell)。

REPL,Read-Eval-Print Loop的简称,“读取-求值-输出”循环,是一个简单的、交互式的编程环境。

或者,如果你的应用程序是从远离worker机器的机器提交的(例如,在你本地的笔记本上),则通常使用cluster模式来尽量减少驱动程序(drivers)和执行程序(executors)之间的网络延迟。

有几个选项是特定于集群管理器的。

例如,对于cluster部署模式的Spark standalone模式或者Mesos,你可以指定--supervise以确保在驱动程序因non-zero exit code失败时可以自动重启。

具体可以使用spark-submit --help来查看所有的选项。以下是常见选项的一些示例:

# Run application locally
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[*] \
/path/to/examples.jar \ # Run on a Spark standalone cluster in client deploy mode
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--executor-memory 20G \
--total-executor-cores \
/path/to/examples.jar \ # Run on a Spark standalone cluster in cluster deploy mode with supervise
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--deploy-mode cluster \
--supervise \
--executor-memory 20G \
--total-executor-cores \
/path/to/examples.jar \ # Run on a YARN cluster
export HADOOP_CONF_DIR=XXX
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \ # can be client for client mode
--executor-memory 20G \
--num-executors \
/path/to/examples.jar \ # Run a Python application on a Spark standalone cluster
./bin/spark-submit \
--master spark://207.184.161.138:7077 \
examples/src/main/python/pi.py \ # Run on a Mesos cluster in cluster deploy mode with supervise
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master mesos://207.184.161.138:7077 \
--deploy-mode cluster \
--supervise \
--executor-memory 20G \
--total-executor-cores \
http://path/to/examples.jar \

Master URLS

传递给Spark的master URL可采用以下格式之一:

local                                                                      以一个工作线程在本地运行Spark应用

local[K]                                                                  以K个工作线程在本地运行Spark应用

local[K, F]                                                              以K个工作线程在本地运行Spark应用,每个任务最多失败F次

local[*]                                                                   使用与本机逻辑内核一样多的工作线程在本地运行Spark应用

local[*, F]                                                               使用与本机逻辑内核一样多的工作线程在本地运行Spark应用,每个任务最多失败F次

spark://HOST:PORT                                              Spark standalone集群的master。端口默认是7077,可以在master节点的文件中配置。

spark://HOST1:PORT1,HOST2:PORT2               连接用ZooKeeper中间件搭建的高可用的Spark standalone集群的masters。Spark standalone cluster with standby masters with Zookeeper。主机名列表必须包含所有的master节点,端口默认都是7077

mesos://HOST:PORT                                            连接Mesos集群,端口默认是5050,可配置。如果使用ZooKeeper搭建Mesos集群的话,则用mesos://zk://

yarn                                                                       连接YARN集群,以client 模式或者以 cluster 模式,取决于--deploy-mode 的值。集群地址由HADOOP_CONF_DIR 或者 YARN_CONF_DIR 参数指定

从文件加载配置

spark-submit脚本可以从属性文件加载默认的配置并传给你的应用。默认情况下,它将从SPARK_HOME的conf目录中的spark-default.conf文件读取配置。

以这种方式加载默认Spark配置使得我们在使用spark-submit脚本时可以省略特定的标志。例如,如果在spark-default.conf文件中设置了spark.master属性,则spark-submit脚本可省略--master标志。一般来说,在SparkConf上显式设置的配置值的优先级最高,spark-submit选项值优先级次之,spark-default.conf文件中的配置值优先级最低。如果不确定配置项的值最终取的是哪里的值,可以在spark-submit 的时候添加--verbose选项。

高级依赖管理

略。

实际项目中,我们会把写到shell脚本中,这样直接运行脚本就可以启动spark任务了。

示例1:

#!/bin/sh
sparkTaskName='spark-realtime-contactList2Hive';
/home/koushengrui/app/spark-2.2.-bin-hadoop2./bin/spark-submit \
--class com.kou.SparkConsumerTest \
--name ${sparkTaskName} \
--master local[] \
--driver-memory 16G \
--executor-memory 16G \
--conf spark.kafka.metadata.broker.list=192.168.56.100:,192.168.56.101:,192.168.56.102: \
--conf spark.zookeeper.quorum=192.168.56.100:,192.168.56.101:,192.168.56.102: \
--conf spark.streaming.kafka.maxRatePerPartition= \
--conf spark.default.parallelism= \
--conf spark.task.maxFailures= \
--conf spark.network.timeout= \
--conf spark.dynamicAllocation.enaled=false \
--conf spark.shuffle.service.enabled=false \
--conf spark.eventLog.enabled=true \
--conf spark.eventLog.compress=false \
--conf spark.eventLog.dir=/data/spark/events \
--conf spark.executor.extraJavaOptions="-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+ParallelRefProcEnabled
-XX:+CMSClassUnloadingEnabled -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+HeapDumpOnOutOfMemoryError -verbose:gc" \
--verbose \
/home/koushengrui/app/spark-realtime-contactList2Hive.jar

本例的master是local[*],不用写deploy-mode。

spark第二篇:Application Submission Guide的更多相关文章

  1. spark第二篇--基本原理

    ==是什么 == 目标Scope(解决什么问题) 在大规模的特定数据集上的迭代运算或重复查询检索 官方定义 aMapReduce-like cluster computing framework de ...

  2. spark第一篇:RDD Programming Guide

    预览 在高层次上,每一个Spark应用(application)都包含一个驱动程序(driver program),该程序运行用户的主函数(main function),并在集群上执行各种并行操作. ...

  3. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm(转载)

    IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm 自从本系列发布之后,收到了很多的朋友的回复!非常感谢,同时很多朋友问到了一些问题,有些问 ...

  4. 第二篇:彻底搞清楚 Spring Boot 的配置文件 application.properties

    前言 在Spring Boot中,配置文件有两种不同的格式,一个是properties,另一个是yaml. 虽然properties文件比较常见,但是相对于properties而言,yaml更加简洁明 ...

  5. 【渗透课程】第二篇下-HTTP协议的请求与响应深度剖析

    [渗透课程]第二篇下-HTTP协议的请求与响应深度剖析 HTTP1.1目前支持以下7种请求方法: 常见的MIME类型如下: 第一个数字有五种可能的取值: 目录 什么是请求方法?什么是请求头? HTTP ...

  6. Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN

    Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession ...

  7. 第二篇——Struts2的Action搜索顺序

    Struts2的Action的搜索顺序: 地址:http://localhost:8080/path1/path2/student.action     1.判断package是否存在,例如:/pat ...

  8. 第二篇 界面开发 (Android学习笔记)

    第二篇 界面开发 第5章 探索界面UI元素 ●The Android View Class     ●△Widget设计步骤 需要修改三个XML,以及一个class: 1)第一个xml是布局XML文件 ...

  9. XSS报警机制(前端防火墙:第二篇)

    XSS报警机制(前端防火墙:第二篇) 在第一章结尾的时候我就已经说了,这一章将会更详细的介绍前端防火墙的报警机制及代码.在一章出来后,有人会问为什么不直接防御,而是不防御报警呢.很简单,因为防御的话, ...

随机推荐

  1. markdown的图片外链

    markdown的图片用本地的很不方便,今天试用了一下七牛的服务,感觉很好用.推荐一下,免费的服务够用并且比较友好.

  2. Web大文件上传控件-示例更新-Xproer.HttpUploader6.2

    版权所有 2009-2016荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

  3. Android学习笔记 Gallery图库组件的使用

    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  4. 变量声明和定义的关系------c++ primer

    为了允许把程序分成多个逻辑部分来编写,c++语言支持分离式编译机制 为了支持分离式编译,c++语言把声明和定义区分开来.声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名 ...

  5. 《Servlet和jsp学习指南》 笔记1

    chapter 1 Servlet 4个java 包: 对于每一个http请求,Servlet请求都会创建一个ServletRequest实例,并将它传给Servlet的service方法.Servl ...

  6. 生成HTML测试报告

    HTMLTestRunner是Python标准库unittest单元测试框架的一个扩展,可以生成易于使用的HTML测试报告,这个扩展很简单,只有一个HTMLTestRunner.py,下载地址:htt ...

  7. 第0篇 Python前言

    1.注释 1)注释的作用: 用自己熟悉的语言在代码中添加注释,方便后期自己查看和理解,也方便其他人查看和理解代码含义. 2)单行注释: 以#号开头,#后面的所有内容均不会被程序执行,起到辅助说明的作用 ...

  8. 一大波趣图:CSS的力量

    CSS的力量         CSS的作用,一目了然~     见识一下CSS的厉害!   用了CSS,效果显著   HTML5 + CSS3 + Javascript会怎么样?       HTML ...

  9. Django 实现上传图片功能

    很多时候我们要用到图片上传功能,如果图片一直用放在别的网站上,通过加载网址的方式来显示的话其实也挺麻烦的,我们通过使用 django-filer 这个模块实现将图片文件直接放在自己的网站上. 感兴趣的 ...

  10. 快速理解mysql主从,主主备份原理及实践

    感谢大家在上一篇 学一点Git--20分钟git快速上手 里的踊跃发言.这里再次分享干货, 简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动 ...