提交应用

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。

js的变量声明以及变量提升的更多相关文章

  1. js声明引入和变量声明和变量类型、变量

    问题: 在网页的发展历程中,发现网页不能对用户的数据进行自动校验,和提供一些特效. 解决: 使用javascript. 作用 可以让网页和用户进行直接简单的交互. 可以让网页制作特效和动画. 声明js ...

  2. JS——变量声明、变量类型、命名规范

    变量声明: JavaScript是一种弱类型语言,它的变量类型由它的值来决定,var是变量声明. 变量类型: 基本类型:number.string.boolean(布尔类型:var a=true/fa ...

  3. javascript中函数声明、变量声明以及变量赋值之间的关系与影响

    javascript中函数声明.变量声明以及变量赋值之间的关系与影响 函数声明.变量声明以及变量赋值之间有以下几点共识: 1.所有的全局变量都是window的属性 2.函数声明被提升到范围作用域的顶端 ...

  4. javascript:变量声明&&赋值的提升和函数声明&&定义的提升在不同情况下的表现

    console.log(a); //undefined console.log(show); //函数的定义 show();         //aaa123 var a = 1; function ...

  5. c++中变量声明和变量定义的区别。2016年12月6日

    整个流程: 1.程序告诉cpu,程序将要使用一个变量.(暂时不一定用到,先说一下.) 2.程序告诉CPU,程序现在就要使用一个变量.(现在就用) 3.cpu按照这个变量的类型,把内存划分出几个单位(b ...

  6. C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?

    报错信息:error C2065: 'salary' : undeclared identifier #include <stdio.h> void main(){ printf(&quo ...

  7. JavaScript变量声明与变量声明提前

    JavaScript变量声明 JavaScript中存储数据的容器称为变量.用关键字和标识符创建新变量的语句,称为变量声明.可以通过关键字var进行变量声明,在ES6中增加了let.const关键字声 ...

  8. 浅谈JS变量声明和函数声明提升

    先来两个问题 很多时候,在直觉上,我们都会认为JS代码在执行时都是自上而下一行一行执行的,但是实际上,有一种情况会导致这个假设是错误的. a = 2; var a; console.log(a); 按 ...

  9. js预编译环节 变量声明提升 函数声明整体提升

    预编译四部曲 1.创建AO对象 2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined 3.将实参和形参统一 4.在函数体里面找函数声明,值赋予函数体 function fn(a) ...

随机推荐

  1. poj1463 Strategic game (树状dp)

    Strategic game Time Limit: 2000MS   Memory Limit: 10000K Total Submissions: 5498   Accepted: 2484 De ...

  2. myeclipse乱码问题和 编码设置

    A    Myeclipse安装后编码默认是GB18030,外面的人一般推荐用UTF-8.如果在导入项目后发现乱码现象,那是编码设置设置不对. Eclipse 编码设置: 全局编码设置:编码设置的方法 ...

  3. Laravel5.3 流程粗粒度分析之bootstrap

    从laravel入口文件index里面外面不难定位到Illuminate\Foundation\Http\Kernel的handle方法,同样也不难发现handle方法的核心是 $response = ...

  4. 数据意识崛起,从企业应用看BI软件的未来发展

    前阵子,和一群企业CIO聊天,希望从甲方角度看看对BI产品的看法.在问及一些成熟企业为何不上BI项目时,大家纷纷表示目前还处于观望状态. 提及BI,大家都觉得有些飘忽,和大数据一样,听着高大上,能真正 ...

  5. SQL sever 创建定时执行任务

    在SQL的使用过程中,我们经常要做些数据备份以及定时执行的任务. 这些任务能够帮助我们简化工作过程. 下面我们了解下如何创建一个定时执行的存储过程. 首先我们要打开 SQL server 代理服务 选 ...

  6. Oracle 视图操作

    -- 创建视图create view V_TEST asselect * from T_TEST where rownum <100 select * from V_TEST-- 新建视图用户 ...

  7. install OwnCloud9 on CentOS7

    OwnCloud9下载地址: https://download.owncloud.org/community/owncloud-9.1.1.zip //安装配置数据库 #yum install mar ...

  8. Tomcat禁止外网访问

    Tomcat中某个应用禁止外网访问 Tomcat中有多个应用,由于权限需要,将某一个主机禁止外网访问.在config/server.xml中设置: <Host name="172.16 ...

  9. 解决Keras在IDE集成环境中找不到nvcc

    在我们正确配置了Keras使用GPU,并在Terminal中运行一切顺利的的时候,转到Pycharm或者Eclipse中运行有可能会出现"nvcc not found on the $PAT ...

  10. 解决 maven项目问题 An error occurred while filtering resources

    解决方法: Maven -> Update Project.