2013-05-06 101 views
-1

在hadoop mapreduce編程模型中;當我們處理文件時,必須將文件保存在HDFS文件系統中,還是可以將這些文件保存在其他文件系統中,並仍然具有mapreduce編程模型的優點?Hadoop HDFS依賴關係

+0

你想使用什麼文件系統?像一個MySQL數據庫或東西? – 2013-05-06 18:44:20

+0

我有坐在服務器上的日誌文件;我想使用類型爲ext4的日誌文件 – 2013-05-06 21:43:34

+0

那麼你真正想要訪問的文件是不是通過管道傳送到hdfs目錄?所以更好的問題是如何使用未存儲在HDFS中的文件的MapReduce引擎? – 2013-05-07 05:20:04

回答

2

映射器從InputFormat的實現中讀取輸入數據。大多數實現從FileInputFormat下降,從本地機器或HDFS讀取數據。 (默認情況下,數據是從HDFS讀取的,並且mapreduce作業的結果也存儲在HDFS中。)當您希望從替代數據源讀取數據時,您可以編寫自定義InputFormat,而不是HDFS。

TableInputFormat將直接從HBase讀取數據記錄,並且DBInputFormat將訪問關係數據庫中的數據。您也可以想象一個系統,通過網絡在特定端口上將數據流式傳輸到每臺計算機; InputFormat從端口讀取數據並將其解析爲單個記錄進行映射。

但是,就你而言,你在單個或多個服務器上的ext4文件系統中有數據。爲了在Hadoop中方便地訪問這些數據,您必須首先將其複製到HDFS中。這樣,當文件塊並行處理時,您將從數據局部性中受益。

我強烈建議閱讀關於此主題的tutorial from Yahoo!以獲取詳細信息。爲了收集mapreduce處理的日誌文件,請看Flume

1

您可以將文件保存在其他地方,但您會失去數據本地優勢。例如, 。如果您使用的是AWS,則可以將文件存儲在S3上並直接從Map-Reduce代碼,Pig,Hive等訪問它們。

+0

S3是hdfs存儲 – 2013-05-06 18:43:43

+0

@ djc391:S3可以是一個類似HDFS的存儲,其中mapreduce的數據將存儲在HFDS中,或者可以直接從S3 =沒有HDFS讀取。請參閱http://wiki.apache.org/hadoop/AmazonS3。 – harpun 2013-05-06 23:01:23

+0

這是hdfs的「替代品」,因爲您不是使用自己的服務器hdfs集羣,而是使用亞馬遜的hdfs集羣。它沒有使用ONES OWN hdfs。有或沒有HDFS的 – 2013-05-07 05:19:28

0

爲了使用Apache Haddop,您必須在HDFS中擁有文件,hadoop文件系統。雖然HDFS有不同的抽象類型,比如AWS S3,但它們都在基本級HDFS存儲中。

數據需要在HDFS中,因爲HDFS會將數據沿羣集分發。在映射階段,每個Mapper都會遍歷存儲在其節點中的數據,然後將其發送到爲給定塊運行Reducer代碼的正確節點。

您不能擁有使用HDFS的Hadoop MapReduce。

+0

? – 2013-05-06 21:39:59