spark-submit提交程序,找不到类名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark-submit提交程序,找不到类名相关的知识,希望对你有一定的参考价值。

参考技术A 解决方法:

1. 根据错误提示查看对应路径的jar包是否存在,jar包里是否有相应类

2. 若1确认无误,建议执行命令sh -x 脚本,具体查看打印的spark-submit信息,对症下药。

举例说明:

报错信息如下:

sh -x sparkTest.sh,打印信息如下。发现spark-submit语句信息被隔断,仔细检查被隔开的那两行有一行最后多了一个空格。删除空格后,脚本执行正常。

shell语法对空格比较敏感,编辑shell脚本需要细心。

Spark运行原理源码版

1、首先我们编写完类打成jar包提交到集群上,然后用spark-submit提交任务。提交任务可以分为集群和本地模式(集群:spark-submit --master spark://master:7077 --class 全类名 jar包路径 需要的参数)(本地:spark-submit --class 全类名 jar包路径 需要的参数)
2、spark-submit脚本会自己去调用SparkSubmit类,appArgs.action根据模式匹配判断是哪种方式提交的然后去执行对应的代码。
3、通过调用runmain方法去反射拿到我们要执行的类和方法去执行
4、首先SparkContext会去创建DAGScheduler和TaskScheduler
5、Transformation是懒执行的当我们的程序碰到Action算子的时候才会去saveAsHadoopDataset中调用runjob方法利用submitJob去DAGSchedulerEventProcessLoop线程池中提交job这时开始构造Stage,先拿到最后一个RDD(finalRdd),创建ResultStage(只存在一个),之后的Stage会根据宽窄依赖去切分Stage(都叫做ShuffleMapStage),Stage的切分是从后往前的,但是提交是从前往后的。
6、一个Stage中都是窄依赖,可以并行的去计算。根据你的分区数量开始划分任务。把相同处理逻辑但是数据不同的Task封装成一个TaskSet调用makeOffers去启动Task,交给TaskScheduler
7、客户端的Driver向Master注册
8、Master会根据自己的资源调度算法去让Worker启动一个或者多个Exeuctor。Worker创建一个ExecutorRunner线程,ExecutorRunner会启动ExecutorBackend进程
9、ExecutorBackend启动后会向Driver的SchedulerBackend注册,每个Stage包含的Task通过TaskScheduler分配给Executor执行
10、所有stage都完成后作业结束。

以上是关于spark-submit提交程序,找不到类名的主要内容,如果未能解决你的问题,请参考以下文章

spark-submit 找不到类 - htrace

sbt打包Scala写的Spark程序,打包正常,提交运行时提示找不到对应的类

Spark在本地运行但在YARN中运行时找不到文件

使用 Spark-Submit 在 kubernetes 上安装 PySpark 软件包:找不到常春藤缓存文件错误

面向对象,类名称空间,查找顺序,组合

java中找不到主类是啥问题