spark源码解析之org.apache.spark.deploy.sparksubmit源码解析
时间: 2023-04-17 11:00:47 浏览: 212
org.apache.spark.deploy.sparksubmit是Spark中用于提交应用程序的主要入口点之一。它是一个命令行工具,可以将应用程序打包成JAR文件并将其提交到Spark集群上运行。
该工具的主要功能包括解析命令行参数、构建SparkConf对象、创建SparkContext对象、将应用程序JAR文件上传到集群、启动Driver程序等。
在源码中,该工具主要由以下几个类组成:
1. SparkSubmit:该类是应用程序的入口点,负责解析命令行参数、构建SparkConf对象、创建SparkContext对象、将应用程序JAR文件上传到集群、启动Driver程序等。
2. SparkSubmitArguments:该类用于封装命令行参数,包括应用程序的主类、JAR文件路径、Spark配置等。
3. SparkSubmitOptionParser:该类用于解析命令行参数,并将其转换为SparkSubmitArguments对象。
4. SparkSubmitCommandBuilder:该类用于构建SparkSubmitCommand对象,该对象包含了启动Driver程序所需的所有参数。
5. SparkSubmitCommandRunner:该类用于执行SparkSubmitCommand对象,启动Driver程序并将其提交到集群上运行。
总的来说,org.apache.spark.deploy.sparksubmit是Spark中非常重要的一个模块,它为用户提供了方便的应用程序提交方式,同时也为Spark集群的管理和调度提供了必要的支持。
相关问题
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357) at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338) at org.apache.spark.deploy.SparkHadoopUtil$.org$apache$spark$deploy$SparkHadoopUtil$$appendS3AndSparkHadoopConfigurations(SparkHadoopUtil.scala:464) at org.apache.spark.deploy.SparkHadoopUtil$.newConfiguration(SparkHadoopUtil.scala:436) at org.apache.spark.deploy.SparkSubmit$$anonfun$2.apply(SparkSubmit.scala:334) at org.apache.spark.deploy.SparkSubmit$$anonfun$2.apply(SparkSubmit.scala:334) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.deploy.SparkSubmit.prepareSubmitEnvironment(SparkSubmit.scala:334) at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:143) at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86) at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:924) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
这个错误提示表明你的Spark应用程序在运行时遇到了NoSuchMethodError异常,具体原因是你的应用程序依赖的com.google.guava库版本与Hadoop库版本不兼容。在你的代码中使用了Hadoop的Configuration类时,它引用了Google Guava库中的方法,但是这个方法在你当前使用的Guava版本中不存在,从而导致了运行时异常。
为了解决这个问题,你需要升级或降级你的Guava库版本,以便与你当前使用的Hadoop库版本兼容。如果你使用的是Maven或Gradle构建工具,可以在项目的pom.xml或build.gradle文件中修改Guava库的版本号;如果你手动管理依赖关系,可以从Maven中央仓库中下载适当版本的Guava库,并将其添加到你的classpath中。
另外,如果你使用的是Spark on YARN模式,你还需要确保你的所有节点上都安装了相同版本的Guava库和Hadoop库,以便避免类库版本不一致的问题。
希望这个回答能够帮助你解决问题!
用spark计算圆周率报错:Exception in thread "main" org.apache.spark.SparkException: Application application_1681996207692_0003 finished with failed status at org.apache.spark.deploy.yarn.Client.run(Client.scala:1122) at org.apache.spark.deploy.yarn.Client$.main(Client.scala:1168) at org.apache.spark.deploy.yarn.Client.main(Client.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:775) at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
这个错误信息可能由于多种原因造成,需要更多的上下文信息才能确定。你可以先检查一下你的代码是否正确,特别是在Spark环境中使用的方式是否正确。另外,还需要检查一下Spark的配置和运行环境是否正确。如果还是无法解决问题,可以考虑查看任何其他的日志信息以确定更详细的错误原因。
阅读全文