我試圖找出在Hadoop集羣中將內容/文件寫入HDFS的各種方法。Hadoop - 如何獲取HDFS文件的路徑對象
我知道有org.apache.hadoop.fs.FileSystem.get()
和org.apache.hadoop.fs.FileSystem.getLocal()
來創建一個輸出流並逐字節地寫入。如果您正在使用OutputCollector.collect()
,它似乎不是寫入HDFS的預期方式。我相信你在使用Mappers和Reducers時必須使用Outputcollector.collect()
,如果我錯了,請糾正我的錯誤?
我知道你甚至可以在運行作業之前設置FileOutputFormat.setOutputPath()
,但它看起來像只能接受Path類型的對象。
在看org.apache.hadoop.fs.path並查看路徑類時,我沒有看到任何允許指定遠程或本地的東西。然後,當查找org.apache.hadoop.fs.FileSystem我看不到任何返回類型路徑的對象。
- 是否
FileOutputFormat.setOutputPath()
總是要寫入本地文件系統?我不認爲這是真的,我依稀記得,讀到一份工作的產出可以用作另一份工作的投入。這使我相信還有一種方法可以將它設置爲HDFS。 - 如上所述,寫入HDFS以使用數據流的唯一方法是?
我現在在我的午餐/當我回家時給它一個鏡頭。這似乎解釋了我需要的一切。如果/當它工作,我會接受答案。謝謝你的幫助錢德拉。 –
我剛剛檢查過我的'conf/core-site.xml'文件,我已經有'hdfs://'設置了。我的輸出到我的本地文件系統。如何在使用'FileOutputFormat.setOutputPath()時指定HDFS路徑'它必須接受像'new Path(fileVar)'這樣的東西,但似乎返回一個本地路徑而不是HDFS路徑,無論我在我的'conf/core-site.xml'文件。 –
ok ..所以你的設置從core-site.xml不導入。使用conf.addResource(「path_to_core-site.xml」)。現在試試。順便說一句,你使用一些IDE或使用jar嗎?在jar的情況下,你不應該需要這個明確的設置。 –