如何在spark-submit中指定

如何在spark-submit中指定,第1张

一、命令

1向spark standalone以client方式提交job。

1

/spark-submit --master spark://hadoop3:7077 --deploy-mode client --class orgapachesparkexamplesSparkPi /lib/spark-examples-130-hadoop230jar

--deploy-mode client,在提交的节点会有个main进程,来运行Driver program。如果使用--deploy-mode cluster,则Driver program直接运行在worker中。

2向spark on yarn以client方式提交job

1

/spark-submit --master yarn --deploy-mode client --class orgapachesparkexamplesSparkPi /lib/spark-examples-130-hadoop230jar

二、Spark100 应用程序部署工具spark-submit

随着Spark的应用越来越广泛,对支持多资源管理器应用程序部署工具的需求也越来越迫切。Spark100的出现,这个问题得到了逐步改善。从Spark100开始,Spark提供了一个容易上手的应用程序部署工具bin/spark-submit,可以完成Spark应用程序在local、Standalone、YARN、Mesos上的快捷部署。

Spark 的运行模式有 Local(也称单节点模式),Standalone(集群模式),Spark on Yarn(运行在Yarn上),Mesos以及K8s等常用模式,本文介绍前三种模式。

Spark-shell 参数

Spark-shell 是以一种交互式命令行方式将Spark应用程序跑在指定模式上,也可以通过Spark-submit提交指定运用程序,Spark-shell 底层调用的是Spark-submit,二者的使用参数一致的,通过- -help 查看参数:

sparkconf的传入有三种方式:

1通过在spark应用程序开发的时候用set()方法进行指定

2通过在spark应用程序提交的时候用过以上参数指定,一般使用此种方式,因为使用较为灵活

3通过配置spark-defaultconf,spark-envsh文件进行指定,此种方式较shell方式级别低

Local模式

Local 模式是最简单的一种Spark运行方式,它采用单节点多线程(cpu)方式运行,local模式是一种OOTB(开箱即用)的方式,只需要在spark-envsh导出JAVA_HOME,无需其他任何配置即可使用,因而常用于开发和学习

方式:/spark-shell - -master local[n] ,n代表线程数

Standalone模式

Spark on Yarn

on Yarn的俩种模式

客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMaster和excutor,另外ApplicationMaster和executor都装在在container里运行,container默认的内存是1g,ApplicationMaster分配的内存是driver-memory,executor分配的内存是executor-memory同时,因为Driver在客户端,所以程序的运行结果可以在客户端显示,Driver以进程名为SparkSubmit的形式存在。

Cluster 模式

1由client向ResourceManager提交请求,并上传Jar到HDFS上

这期间包括四个步骤:

a)连接到RM

b)从RM ASM(applicationsManager)中获得metric,queue和resource等信息。

c)upload app jar and spark-assembly jar

d)设置运行环境和container上下文

2ResourceManager向NodeManager申请资源,创建Spark ApplicationMaster(每个SparkContext都有一个ApplicationManager)

3NodeManager启动Spark App Master,并向ResourceManager ASM注册

4Spark ApplicationMaster从HDFS中找到jar文件,启动DAGScheduler和YARN Cluster Scheduler

5ResourceManager向ResourceManager ASM注册申请container资源(INFO YarnClientImpl: Submitted application)

6ResourceManager通知NodeManager分配Container,这是可以收到来自ASM关于container的报告。(每个container的对应一个executor)

7Spark ApplicationMaster直接和container(executor)进行交互,完成这个分布式任务。

进入spark安装目录下的conf文件夹

[atguigu@hadoop102 module] mv slavestemplate slaves

[atguigu@hadoop102 conf] vim slaves

hadoop102

hadoop103

hadoop104

4)修改spark-envsh文件,添加如下配置:

[atguigu@hadoop102 conf]$ vim spark-envsh

SPARK_MASTER_HOST=hadoop102

SPARK_MASTER_PORT=7077

5)分发spark包

[atguigu@hadoop102 module] sbin/start-allsh

注意:如果遇到 “JAVA_HOME not set” 异常,可以在sbin目录下的spark-configsh 文件中加入如下配置:

export JAVA_HOME=XXXX

官方求PI案例

spark-submit

--class orgapachesparkexamplesSparkPi

--master spark://server-2:7077

--executor-memory 1G

--total-executor-cores 2

/home/xxx/software/spark-244-bin-hadoop27/examples/jars/spark-examples_211-244jar

100

spark-shell

--master spark://server-2:7077

--executor-memory 1g

--total-executor-cores 2

spark-shell --master spark://server-2:7077 --executor-memory 1g --total-executor-cores 2

参数:--master spark://server-2:7077 指定要连接的集群的master

Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。

yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出

yarn-cluster:Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)适用于生产环境。

安装使用

1)修改hadoop配置文件yarn-sitexml,添加如下内容:

2)修改spark-envsh,添加如下配置:

[atguigu@hadoop102 conf]$ vi spark-envsh

YARN_CONF_DIR=/opt/module/hadoop-272/etc/hadoop

3)分发配置文件

[atguigu@hadoop102 conf] xsync spark-envsh

4)执行一个程序

spark-submit

--class orgapachesparkexamplesSparkPi

--master yarn

--deploy-mode client

/home/xxx/software/spark-244-bin-hadoop27/examples/jars/spark-examples_211-244jar

100

注意:在提交任务之前需启动HDFS以及YARN集群。

日志查看

修改配置文件spark-defaultsconf

添加如下内容:

sparkyarnhistoryServeraddress=server-2:18080

sparkhistoryuiport=18080

2)重启spark历史服务

[atguigu@hadoop102 spark] sbin/start-history-serversh

starting orgapachesparkdeployhistoryHistoryServer, logging to /opt/module/spark/logs/spark-atguigu-orgapachesparkdeployhistoryHistoryServer-1-hadoop102out

3)提交任务到Yarn执行

spark-submit

--class orgapachesparkexamplesSparkPi

--master yarn

--deploy-mode client

/home/xxx/software/spark-244-bin-hadoop27/examples/jars/spark-examples_211-244jar

100

在很多情况下,我们需要查看driver和executors在运行 Spark 应用程序时候产生的日志,这些日志对于我们调试和查找问题是很重要的。

Spark 日志确切的存放路径和部署模式相关:

(1)、 如果是Spark Standalone模式 ,我们可以直接在Master UI界面查看应用程序的日志,在默认情况下这些日志是存储在worker节点的work目录下,这个目录可以通过 SPARK_WORKER_DIR 参数进行配置。

(2)、 如果是Mesos模式 ,我们同样可以通过Mesos的Master UI界面上看到相关应用程序的日志,这些日志是存储在Mesos slave的work目录下。

(3)、 如果是YARN模式 ,最简单地收集日志的方式是使用YARN的日志收集工具( yarn logs -applicationId ),这个工具可以收集你应用程序相关的运行日志,但是这个工具是有限制的:应用程序必须运行完,因为YARN必须首先聚合这些日志;而且你必须开启日志聚合功能( yarnlog-aggregation-enable ,在默认情况下,这个参数是false)。

如果你运行在YARN模式,你可以在ResourceManager节点的WEB UI页面选择相关的应用程序,在页面点击表格中 Tracking UI 列的 ApplicationMaster ,这时候你可以进入到Spark作业监控的WEB UI界面,这个页面就是你Spark应用程序的proxy界面,比如 >

简介

由于spark有多种运行模式,远程调试的时候,虽然大体步骤相同,但是还是有小部分需要注意的地方,这里记录一下调试运行在spark on yarn模式下的程序。

环境准备

需要完好的Hadoop,spark集群,以便于提交spark on yarn程序。我这里是基于CDH的环境

步骤

1随便写个spark程序,比如序列化一个集合,然后求和。然后使用maven打包,上传至集群。可以先提交运行一次,确保可以运行成功。

[root@kjtlxsvr5 bin]# /spark-submit --class cnsparkstudycoreParallelizeCollection --master yarn-cluster --num-executors 3 --executor-cores 2 --executor-memory 1G --driver-java-options "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8787" /home/spark-study-scala-001-SNAPSHOT-jar-with-dependenciesjar

现在有两个办法可以解决这个问题。

第一个办法是节点少的话,通过修改上面IDEA远程主机地址来一个一个试。

第二办法可以精确知道ApplicationMaster在哪里:

①通过CDH进入yarn的应用程序界面

②然后点击进入该程序的详细信息界面,如下图就可以知道Applicationmaster在哪台NodeManager上:

③可以去该节点查看进程,的确有一个ApplicationMaster,然后在IDEA中修改为该远程主机地址,开始debug程序看源码吧!

1、你要切换到yarn-cluster或者yarn-client模式,很简单,将我们之前用于提交spark应用程序的spark-submit脚本,加上--master参数,设置为yarn-cluster,或yarn-client,即可。如果你没设置,那么,就是standalone模式。

2、yarn集群分为主节点和从节点,一个主节点是ResourceManager(RM),多个从节点是NodeManager(NM)。

3、

31、如果是yarn-cluster模式,spark-submit在提交的时候请求到ResourceManager,请求来启动ApplicationMaster,ResourceManager接收到请求后会分配一个container,在某个NodeManager上启动ApplicationMaster,ApplicationMaster(AM)启动后会反过来向ResourceManager进行通讯,其实这个ApplicationMaster就相当于是driver,AM找RM请求container,启动excutor,然后RM会分配一批container,用于启动executor,AM链接其他的NM,来启动executor,这里的NM相当于worker,executor向AM反向注册。ResourceManager相当于之前的master。

32、yarn-client模式,spark-submit在提交的时候发送给RM,请求启动AM,分配一个container,在某个NM上,启动AM,但是这里的AM只是一个ExecutorLauncher,功能是很有限的。AM启动后会找RM申请container,启动executor,AM链接其他的NM,用container的资源来启动executor。executor会反向注册到本地的driver上。

4、区别:yarn-cluster的driver相当于就是在NodeManager上的某一个ApplicationMaster;yarn-client的driver还是在本地启动的一个进程,在NodeManager启动的ApplicationMaster只是一个ExecutorLauncher,ExecutorLauncher只会向ResourceManager申请资源,然后用container资源去链接其他的NodeManager,然后去启动executor,executor启动后会反向注册到提交应用程序的本地客户端的driver进程上,通过本地客户端的driver进程里面的DAGScheduler、TaskScheduler会大量进行task的调度,发送到NodeManager上的executor上去执行。

下面对集中部署模式进行详细介绍

该模式运行任务不会提交在集群中,只在本节点执行,有两种情况

运行该模式非常简单,只需要把Spark的安装包解压后,改一些常用的配置即可使用,而不用启动Spark的Master、Worker守护进程( 只有集群的Standalone方式时,才需要这两个角色),也不用启动Hadoop的各服务(除非你要用到HDFS)。

Spark不一定非要跑在hadoop集群,可以在本地,起多个线程的方式来指定。将Spark应用以多线程的方式直接运行在本地,一般都是为了方便调试,本地单机模式分三类:

搭建步骤:

(中间有报错:raise IllegalArgumentException(ssplit(': ', 1)[1], stackTrace)

pysparksqlutilsIllegalArgumentException: u'Unable to locate hive jars to connect to metastore Please set sparksqlhivemetastorejars',网上提示查看jdk版本,发现ubuntu 1804默认是openjdk-11-jdk包(java -version提示1001)。重新安装openjdk-8-jdk版本不报错)

运行:

使用spark-shell、spark-submit、pyspark

例如使用spark-shell:

local:单机、单核运行

local[k]:启动k个executor

local[ ]:启动跟cpu数目相同的 executor

上述情况中,local[N]与local[]相当于用单机的多个线程来模拟spark分布式计算,通常用来检验开发出来的程序逻辑上有没有问题。

其中N代表可以使用N个线程,每个线程拥有一个core。

这些任务的线程,共享在一个进程中,可以开到,在程序的执行过程中只会产生一个进程,这个进程揽下了所有的任务,既是客户提交任务的client进程,又是spark的driver程序,还是spark执行task的executor

这种运行模式,和Local[N]很像,不同的是,它会在单机启动多个进程来模拟集群下的分布式场景,而不像Local[N]这种多个线程只能在一个进程下委屈求全的共享资源。通常也是用来验证开发出来的应用程序逻辑上有没有问题,或者想使用Spark的计算框架而没有太多资源。

用法:提交应用程序时使用local-cluster[x,y,z]参数:x代表要生成的executor数,y和z分别代表每个executor所拥有的core和memory数。

上面这条命令代表会使用2个executor进程,每个进程分配3个core和1G的内存,来运行应用程序。可以看到,在程序执行过程中,会生成如下几个进程:

前段时间使用了一下google的博客空间,感觉也很一般,所以现在把那里的几篇文章转过来。 执行python脚本只需要对python文件做如下 *** 作即可: 在python文件里第一行加上#! /usr/bin/python,即你的python解释器所在的目录。另外还有一种写法是#!

以上就是关于如何在spark-submit中指定全部的内容,包括:如何在spark-submit中指定、spark安装与运行模式、spark日志收集等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9527308.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存