程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Google Dataproc群集实例中的Spark-Submit上运行应用程序Jar文件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在Google Dataproc群集实例中的Spark-Submit上运行应用程序Jar文件?

开发过程中遇到在Google Dataproc群集实例中的Spark-Submit上运行应用程序Jar文件的问题如何解决?下面主要结合日常开发的经验,给出你关于在Google Dataproc群集实例中的Spark-Submit上运行应用程序Jar文件的解决方法建议,希望对你解决在Google Dataproc群集实例中的Spark-Submit上运行应用程序Jar文件有所启发或帮助;

如您所见,调用Spark时,Dataproc在类路径中包括Hadoop依赖项。这样做主要是为了使使用Hadoop输入格式,文件系统等非常简单。不利的一面是,最终将使用Hadoop的guava版本11.02(请参阅HADOOP-10101)。

如何解决此问题取决于您的构建系统。如果使用Maven,则可以使用maven-shade插件以新的软件包名称重新定位您的番石榴版本。可以在GCS Hadoop Connector的包装中看到一个示例,但关键是pom.xml构建部分中的以下插件声明:

  <plugin>
    <groupID>org.apache.maven.plugins</groupID>
    <artifactID>maven-shade-plugin</artifactID>
    <version>2.3</version>
    <EXECUTIONS>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <reLOCATIOns>
            <reLOCATIOn>
              <pattern>com.Google.common</pattern>
              <shadedPattern>your.repackaged.deps.com.Google.common</shadedPattern>
            </reLOCATIOn>
          </reLOCATIOns>
        </execution>
      </execution>
    </plugin>

类似的重定位可以通过sbt的sbt-assembly插件,ant的jarjar和gradle的jarjar或shadow实现。

解决方法

我正在运行一个.jar文件,其中包含需要打包在其中的所有依赖项。此依赖项之一是com.google.common.util.concurrent.RateLimiter并且已经检查过它的类文件在此.jar文件中。

不幸的是,当我在Google的dataproc-cluster实例的主节点上单击命令spark-submit时,出现此错误:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch;
at com.google.common.util.concurrent.RateLimiter$SleepingStopwatch$1.<init>(RateLimiter.java:417)
at com.google.common.util.concurrent.RateLimiter$SleepingStopwatch.createFromSystemTimer(RateLimiter.java:416)
at com.google.common.util.concurrent.RateLimiter.create(RateLimiter.java:130)
at LabeledAddressDatasetBuilder.publishLabeledAddressesFromBlockstem(LabeledAddressDatasetBuilder.java:60)
at LabeledAddressDatasetBuilder.main(LabeledAddressDatasetBuilder.java:144)
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:497)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:672)
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:120)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

似乎在覆盖我的依赖项方面发生了一些事情。已经Stopwatch.class从此.jar 反编译文件,并检查该方法是否存在。当我在该google
dataproc实例上运行时,这种情况刚刚发生。我grep在执行的过程中做了spark-submit,得到了如下标志-cp

/usr/lib/jvm/java-8-openjdk-amd64/bin/java -cp /usr/lib/spark/conf/:/usr/lib/spark/lib/spark-assembly-1.5.0-hadoop2.7.1.jar:/usr/lib/spark/lib/datanucleus-api-jdo-3.2.6.jar:/usr/lib/spark/lib/datanucleus-rdbms-3.2.9.jar:/usr/lib/spark/lib/datanucleus-core-3.2.10.jar:/etc/hadoop/conf/:/etc/hadoop/conf/:/usr/lib/hadoop/lib/native/:/usr/lib/hadoop/lib/*:/usr/lib/hadoop/*:/usr/lib/hadoop-hdfs/lib/*:/usr/lib/hadoop-hdfs/*:/usr/lib/hadoop-mapreduce/lib/*:/usr/lib/hadoop-mapreduce/*:/usr/lib/hadoop-yarn/lib/*:/usr/lib/hadoop-yarn/*

有什么我可以解决的问题吗?

谢谢。

@H_944_45@ @H_944_45@
@H_944_45@

大佬总结

以上是大佬教程为你收集整理的在Google Dataproc群集实例中的Spark-Submit上运行应用程序Jar文件全部内容,希望文章能够帮你解决在Google Dataproc群集实例中的Spark-Submit上运行应用程序Jar文件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。