簡體   English   中英

Hadoop-如何獲取HDFS文件的Path對象

[英]Hadoop - How to get a Path object of an HDFS file

我正在嘗試找出將內容/文件寫入Hadoop集群中的HDFS的各種方法。

我知道有org.apache.hadoop.fs.FileSystem.get()org.apache.hadoop.fs.FileSystem.getLocal()創建輸出流並逐字節寫入。 如果您正在使用OutputCollector.collect()則似乎不是寫HDFS的預期方式。 我相信您在實現Outputcollector.collect()Outputcollector.collect()時必須使用Outputcollector.collect() ,如果我做錯了,請糾正我嗎?

我知道您甚至可以在運行作業之前設置FileOutputFormat.setOutputPath() ,但看起來這只能接受Path類型的對象。

在查看org.apache.hadoop.fs.path並查看path類時,我看不到任何允許您指定遠程或本地的內容。 然后,當查找org.apache.hadoop.fs.FileSystem時,我看不到任何返回路徑類型的對象的東西。

  1. FileOutputFormat.setOutputPath()是否始終必須寫入本地文件系統? 我不認為這是真的,我隱約記得讀過一個作業的輸出可以用作另一個作業的輸入。 這使我相信,還有一種方法可以將其設置為HDFS。
  2. 是寫入HDFS以使用所述數據流的唯一方法嗎?

org.apache.hadoop.fs.FileSystem.getorg.apache.hadoop.FileSystem.getLocal返回一個FileSystem對象,該對象是通用的,既可以實現為本地文件系統,也可以實現為分布式文件系統。
OutputCollector不會寫入hdfs。 它僅提供了一種collect方法,供映射器和約簡器收集數據輸出(中間和最終)。 順便說一句,它不贊成使用Context對象。
FileOutputFormat.setOuptPath通過設置mapred.output.dir設置最終輸出目錄,該目錄可以在本地文件系統上,也可以在分布式文件系統上。
關於遠程或本地fs.default.name設置這些值。 如果將其設置為file:/// ,它將使用本地文件系統。 如果設置為hdfs:// ,它將采用hdfs,依此類推。
關於寫入FSDataOuputStream無論采用FSDataOuputStream方法寫入hadoop中的文件,都將在下面使用FSDataOuputStream FSDataOutputStremjava.io.OutputStream包裝。 順便說一句,只要您想用Java寫入文件系統,就已經為此創建了一個流對象。
FileOutputFormat具有FileOutputFormat.setOutputPath(job, output_path)方法FileOutputFormat.setOutputPath(job, output_path)其中可以代替output_path,指定要使用本地文件系統還是hdfs,從而覆蓋core-site.xml的設置。 例如FileOutputFormat.setOutputPath(job, new Path("hdfs://localhost:9000/path_to_file"))將設置要寫入到hdfs的輸出。 將其更改為file:///,您可以寫入本地文件系統。 根據您的設置更改loclahost和portno。 同樣,也可以按每個作業級別覆蓋輸入。 -

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM