1. 程式人生 > >Alluxio客戶端顯示找不到FileSystem類問題分析與解決

Alluxio客戶端顯示找不到FileSystem類問題分析與解決

我們發現時常在使用者郵件列表上會出現一個有關作業失敗的問題,這個失敗伴隨著錯誤訊息“java.lang.ClassNotFoundException:Class alluxio.hadoop.FileSystemnot found”。這篇部落格分析解釋了這種失敗的原因以及發生該問題時的解決方案。

為什麼會發生這個錯誤?

這個錯誤說明Alluxio客戶端在執行時不可用。當作業嘗試訪問Alluxio檔案系統但沒能找到Alluxio客戶端的實現以連線到對應的服務時,就會導致異常。

Alluxio客戶端是一個Java包,它定義了alluxio.hadoop.FileSystem類,以便根據使用者請求呼叫Alluxio服務(例如,建立檔案、列出目錄內容等)。它通常被預編譯成一個名為alluxio-1.8.1-client.jar(對於v1.8.1而言)的jar檔案,並與Alluxio壓縮包一起釋出。為了能夠與應用程式協作,Alluxio客戶端jar檔案應該位於JVM的classpath中。如果應用程式無法在classpath中找到這個檔案,它就不知道類alluxio.hadoop.FileSystem的實現,因此會丟擲異常。

如何解決這個問題?

該問題的解決方案就是確保Alluxio客戶端jar在應用程式的classpath中。在故障排除時有幾個因素應當考慮。

如果應用程式分佈在多個節點上,那麼應該將這個jar分發給其中每一個節點。根據計算框架的不同,具體的配置方法可能有很大差異:

  • 對於MapReduce或YARN應用程式,可以將Alluxio客戶端jar的路徑加到mapreduce.application.classpath或yarn.application.classpath以確保每個任務都能找到它。除此之外,你也可以將這個路徑作為-libjars的引數,如下所示:

        

     取決於Hadoop的發行版,設定$HADOOP_CLASSPATH也可能有用:

        

  • 對於Spark應用程式,在每個Spark執行節點上的spark/conf/spark-defaults.conf檔案中新增如下設定,並重啟長期執行的Spark伺服器程序:

        

  • 對於Hive,在conf/hive-env.sh檔案中設定環境變數HIVE_AUX_JARS_PATH:

       

在某些情況下,一個計算引擎依賴於另一個計算引擎。例如,Hive服務可以使用MapReduce作為分散式查詢的引擎。在這種情況下,必須為Hive和MapReduce兩者分別都設定classpath才能正確配置。

 

總結

  • 對於使用Alluxio的應用程式,它們必須將Alluxio客戶端jar檔案加入其classpath中。

  • 如何將Alluxio客戶端jar檔案配置到classpath可以根據計算框架的具體情況進行具體分析。