java.io.IOException: No FileSystem for scheme: hdfs


maven工程,執行jar包的時候出錯:

Exception in thread "main" java.io.IOException: No FileSystem for scheme: hdfs
但是,在沒有打成jar包的工程中,是可以正常運行的,通過長時間的觀察和分析,
發現與hadoop filesystem相關的包有兩個,分別是:hadoop-hdfs-2.7.1.jar和hadoop-common-2.7.1.jar.

這兩個包的services目錄下都有,org.apache.hadoop.fs.FileSystem這個文件。使用Maven-assembly-plugin的時候,
會將所有依賴的包unpack,然后在pack,這樣就會出現,同樣的文件被覆蓋的情況。

maven-assembly-plugin(fatjar也是一樣的),將hadoop-common.jar中的services內容打進了最終的jar包中,
而hadoop-hdfs.jar包中,services的內容被覆蓋了。由於我們的函數調用是這樣寫的:

在函數中使用了hdfs://IP : port的schema,而在生成的最終jar包中,無法找到這個schema的實現。所以就拋出了

 
        

java.io.IOException: No FileSystem for scheme: hdfs

 
        

解決方案是,在設置hadoop的配置的時候,顯示設置這個類:"org.apache.hadoop.hdfs.DistributedFileSystem:

 
        
val conf = new Configuration() //hadoop配置,hadoop-default.xml,hadoop-site.xml的<name>.</name><value>.</value>
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem")










免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM