1. 程式人生 > >hadoop叢集執行jar包報錯(eclipse導jar)

hadoop叢集執行jar包報錯(eclipse導jar)

報錯日誌:

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/hdfs/wordcount/WordcountDriver has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0

注:可能數字是52和51,但問題是一樣的


使用的工具:centos7minimal,Linux下jdk版本是:

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

windows下jdk版本與Linux下一致一致

C:\Users\york>java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

問題分析:

  • 1.可能是Linux下jdk版本和windows下jdk版本差異太大(如1.6和1.8)
  • 2.可能是Linux下jdk環境變數配置不完善
  • 3.可能是hadoop叢集配置檔案不完善

嘗試解決:

  • 通過問題查詢,許多方式是通過更改compiler level來更改,因為**修改Compiler compliance level為對應的級別即可。Eclipse對java專案的編譯並不是使用JDK完成的,是通過自帶的ECJ(Eclipse Compiler for Java)來實現的,這也就解釋了為什麼你本地安裝的JDK或啟動Eclipse是在配置檔案中通過-vm引數設定的jdk或新建專案時選擇的JDK的版本為1.6時,在這裡的編譯級別卻可以選為1.7或1.8的原因,因為所能編譯的最高級別跟那些JDK根本沒有關係,是由eclipse版本決定的。如果你的Eclipse在這個選項裡沒有你需要的級別,可以嘗試著升級高版本來實現。**可以參考:
    https://blog.csdn.net/zcdyx88/article/details/53928383/

    此方法可以解決部分電腦出現上面的報錯日誌的問題,但測試過此方法後匯出jar包,叢集執行jar包時仍然報此錯誤。
    原因是開發環境配置不一致。

完善的解決方案:

  • 1.首先檢查Linux下jdk的環境變數是否正確
  • 2.hadoop叢集配置檔案是否完善
  • 3.更改compiler level,設定的編譯級別最好與Linux下jdk版本一致(比如都為1.8或者1.7)
  • 4.最重要的一步,如果以上方式檢查都正常,但匯出的jar在叢集上執行仍然報錯,檢查專案的properties屬性
    第一步:選中專案右鍵
    在這裡插入圖片描述
    第二步:確定專案編譯的版本設定,最好與叢集jdk版本一致,也可以比叢集jdk低一版(eclipse設定compiler level後會檢測專案的java compiler然後進行編譯)
    在這裡插入圖片描述
    第三步:確定後重新匯出jar包,部署叢集執行,成功
總結:jdk版本使用,穩定版使用1.8居多,叢集jdk版本最好與客戶端jdk版本一致(windows下)或者比叢集低一個版本,如1.7
  • 此問題同樣適用於其他java專案