首页 文章

在与包含所有依赖项的uber Jar分开的Jar文件中提交spark应用程序

提问于
浏览
0

我正在构建具有多个重度依赖项的Spark应用程序(例如带有语言模型的Stanford NLP),因此包含具有依赖项的应用程序代码的uber Jar需要大约500MB . 将这个胖Jar上传到我的测试集群需要花费很多时间,我决定将我的应用程序和依赖项构建到单独的Jar文件中 .

我在我的父pom.xml中创建了两个模块,分别使用 mvn packagemvn assembly:asembly 构建app和uber jar .

但是,在我将这些单独的jar上传到我的YARN群集应用程序失败后出现以下错误:

线程“main”中的异常java.lang.NoSuchMethodError:org.apache.hadoop.net.unix.DomainSocketWatcher . (I)V org.apache.hadoop.hdfs.shortcircuit.DfsClientShmManager . (DfsClientShmManager.java:415)at org.apache.hadoop.hdfs.shortcircuit.ShortCircuitCache . (ShortCircuitCache.java:379)org.apache.hadoop.hdfs.ClientContext . (ClientContext.java:100)org.apache.hadoop.hdfs.ClientContext.get( ClientContext.java:151)org.apache.hadoop.hdfs.DFSClient . (DFSClient.java:690)org.apache.hadoop.hdfs.DFSClient . (DFSClient.java:601)org.apache.hadoop.hdfs .distributedFileSystem.initialize(DistributedFileSystem.java:148)org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2653)atg.apache.hadoop.fs.FileSystem.access $ 200(FileSystem.java:92)

在Spark上运行应用程序时,它也会因类似错误而失败 .

带有依赖关系的jar包含在Yarn类路径中:

<property>
    <name>yarn.application.classpath</name>
    <value>
      $HADOOP_CONF_DIR,
      $HADOOP_COMMON_HOME/*,
      $HADOOP_COMMON_HOME/lib/*,
      $HADOOP_HDFS_HOME/*,
      $HADOOP_HDFS_HOME/lib/*,
      $HADOOP_MAPRED_HOME/*,
      $HADOOP_MAPRED_HOME/lib/*,
      $YARN_HOME/*,
      $YARN_HOME/lib/*,
      /usr/local/myApp/org.myCompany.myApp-dependencies.jar
    </value>
  </property>

它实际上可能以这种方式运行Spark应用程序吗?或者我必须将所有依赖项放在YARN(或Spark)类路径中作为单独的Jar文件?

1 回答

  • 0

    我的火花工作遇到了同样的问题 . 这肯定是一个依赖性问题 . 您必须确保在运行时选择正确的版本 . 最好的方法是将正确的版本hadoop-common-2.6.jar添加到我的应用程序jar中 . 我还在应用程序jar中升级了我的hadoop-hdfs版本 . 这解决了我的问题 .

相关问题