我在本地使用 Intellij Idea 打包了一個 spark 的程序 jar 包,放到linux集羣上運行,報錯信息是:Unsupported major.minor version 52.0
java
本機系統 -> windows10 開發工具 -> Intellij Idea 構建工具 -> mavenlinux
集羣系統 -> Linux jre -> Java(TM) SE Runtime Environment (build 1.7.0_80-b15)`apache
根據報錯 log 能夠判定的是因爲我本地編譯打包所使用的 jdk 版本和 linux 集羣的 jre 版本不一致致使的。stanford parser 和 jdk 版本對應關係爲:windows
J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
複製代碼
能夠推斷出是因爲我打包編譯時所使用的 jdk 版本是 jdk8,而集羣的 jre 是7,才致使的問題。maven
maven 項目會用 maven-compiler-plugin 默認的 jdk 版原本進行編譯,若是不指明版本就容易出現版本不匹配的問題,可能致使編譯不經過的問題。解決辦法:在 pom 文件中配置 maven-compiler-plugin 插件。工具
方式一:開發工具
<properties>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.source>1.7</maven.compiler.source>
</properties>
複製代碼
方式二:ui
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
複製代碼
若是使用 scala 編寫 spark 的程序,在編譯打包時候要注意 scala 的版本號和 jdk 版本的對應關係,同時也要考慮集羣上 jre 的版本。好比個人集羣上所使用的 jre 的版本號爲 7,那麼本機打包編譯的 jdk 版本必須爲 7 ,那麼 scala 版本必須爲 2.12 版本如下。spa
Intellij Idea 設置「開發」運行時所用的 jdk 版本的幾個地方:插件
若是上圖中 Intellij Idea 的開發運行 jdk 版本配置錯誤,在開發運行編譯的時候會報:Error:java: 無效的源發行版: xx