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> |