在一个jar文件中提交spark应用程序,该文件独立于包含所有依赖项的uberjar

gz5pxeao  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(468)

我正在构建spark应用程序,它有几个很重的依赖项(例如带有语言模型的stanford nlp),因此包含依赖项的应用程序代码的uber jar需要大约500mb。将这个胖jar上传到我的测试集群需要很多时间,我决定将我的应用程序和依赖项构建到单独的jar文件中。
我在我的父pom.xml中创建了两个模块,分别用 mvn package 以及 mvn assembly:asembly 分别。
但是,在我将这些单独的jar上传到yarn cluster之后,应用程序失败,出现以下错误:
线程“main”java.lang.nosuchmethoderror中出现异常:org.apache.hadoop.net.unix.domainsocketwatcher。(i)v位于org.apache.hadoop.hdfs.shortcircuit.dfsclientshmmanager.(dfsclientshmmanager)。java:415)在org.apache.hadoop.hdfs.shortcircuit.shortcircuitcache。java:379)在org.apache.hadoop.hdfs.clientcontext。java:100) 在org.apache.hadoop.hdfs.clientcontext.get(clientcontext。java:151)在org.apache.hadoop.hdfs.dfsclient。java:690)在org.apache.hadoop.hdfs.dfsclient。java:601)位于org.apache.hadoop.hdfs.distributedfilesystem.initialize(distributedfilesystem)。java:148)在org.apache.hadoop.fs.filesystem.createfilesystem(filesystem。java:2653)在org.apache.hadoop.fs.filesystem.access$200(文件系统)。java:92)
在spark上运行应用程序时,它也会失败,并出现类似的错误。
包含依赖项的jar包含在类路径中:

<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文件?

mec1mxoz

mec1mxoz1#

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

相关问题