天天看點

spark2- submit送出任務報錯

在安裝完成cdh5.13.3之後,寫了個sparkstream的代碼,然後準備用spark2-submit送出任務,結果遇到了一系列的錯誤:

1.spark2-submit送出任務的時候直接報錯

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream

    at org.apache.spark.deploy.SparkSubmitArguments$$anonfun$mergeDefaultSparkProperties$1.apply(SparkSubmitArguments.scala:117)

    at org.apache.spark.deploy.SparkSubmitArguments$$anonfun$mergeDefaultSparkProperties$1.apply(SparkSubmitArguments.scala:117)

    at scala.Option.getOrElse(Option.scala:120)

    at org.apache.spark.deploy.SparkSubmitArguments.mergeDefaultSparkProperties(SparkSubmitArguments.scala:117)

    at org.apache.spark.deploy.SparkSubmitArguments.<init>(SparkSubmitArguments.scala:103)

    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:114)

    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStream

    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)

    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

    ... 7 more

這個報錯上網看了一圈之後都說要修改spark-env的配置檔案

export export SPARK_DIST_CLASSPATH=$(${HADOOP_HOME}/bin/hadoop classpath)      

加一行這個指令即可。這個問題我後來解決了,至于是不是用的這個方法,因為是生産環境,寫的時候不是在生産環境,是以就沒法驗證了,這個問題直接在網上搜,應該就能找到解決方案。

2.在安裝了spark2元件之後,如果沒有安裝spark元件,那麼用spark-submit送出指令的話,預設的使用的是spark1的平台環境,這個會導緻如果是送出到yarn,在主節點上應用程式沒有問題,在從節點上會報類找不到的錯誤的現象,此時隻需要把spark元件添加上來即可。

還有就是如果spark2-submit送出不通過的話可以嘗試spark-submit來送出到yarn,使用spark-submit送出的程式對版本沖突的問題沒有那麼敏感,很可能就是直接正常的運作。之前我就是直接用的spark-submit的内能運作,在spark2-submit運作報找不到類。

3.其他就是包版本以來的問題。因為我使用到了kafka和sparkstream,送出了之後會報一些kafka和scala的classnotfound的指令,

總結了一下,大部分的原因是因為kafka 和sparkstream的版本直接有沖突的問題。下面給出個經過試驗有效的pom檔案。

<dependencies>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.15</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <artifactId>jms</artifactId>
          <groupId>javax.jms</groupId>
        </exclusion>
        <exclusion>
          <artifactId>jmxtools</artifactId>
          <groupId>com.sun.jdmk</groupId>
        </exclusion>
        <exclusion>
          <artifactId>jmxri</artifactId>
          <groupId>com.sun.jmx</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>net.sf.json-lib</groupId>
      <artifactId>json-lib</artifactId>
      <version>2.3</version>
      <classifier>jdk15</classifier>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-streaming_2.11</artifactId>
      <version>2.1.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>2.11.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-streaming-kafka_2.11</artifactId>
      <version>1.6.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.kafka</groupId>
      <artifactId>kafka_2.11</artifactId>
      <version>0.8.2.1</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  <repositories>
    <repository>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>nexus-aliyun</id>
      <name>nexus-aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </repository>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
    </repository>
  </repositories>
           

繼續閱讀