MapReduce輸出格式

2022-04-10 10:39:03 字數 1936 閱讀 1148

針對前面介紹的輸入格式,mapreduce也有相應的輸出格式。預設情況下只有乙個 reduce,輸出只有乙個檔案,預設檔名為 part-r-00000,輸出檔案的個數與 reduce 的個數一致。 如果有兩個reduce,輸出結果就有兩個檔案,第乙個為part-r-00000,第二個為part-r-00001,依次類推

outputformat 介面

outputformat主要用於描述輸出資料的格式,它能夠將使用者提供的key/value對寫入特定格式的檔案中。hadoop 自帶了很多 outputformat 的實現,它們與inputformat實現相對應,足夠滿足我們業務的需要。 outputformat 類的層次結構如下圖所示

outputformat是mapreduce輸出的基類,所有mapreduce輸出都實現了 outputformat 介面。 我們可以把這些實現介面類分為以下幾種型別,分別一一介紹

1、文字輸出

預設的輸出格式是textoutputformat,它把每條記錄寫為文字行。它的鍵和值可以是任意型別,因為textoutputformat呼叫tostring()方法把它們轉換為字串。每個鍵/值對由製表符進行分割,當然也可以設定 mapreduce.output.textoutputformat.separator 屬性(舊版本 api 中的 mapred.textoutputformat.separator)改變預設的分隔符。與 textoutputformat對應的輸入格式是keyvaluetextinputformat,它通過可配置的分隔符將鍵/值對文字分割。

可以使用nullwritable來省略輸出的鍵或值(或兩者都省略,相當於 nulloutputformat輸出格式,後者什麼也不輸出)。這也會導致無分隔符輸出,以使輸出適合用 textinputformat 讀取

2、二進位制輸出

1、關於sequencefileoutputformat

顧名思義,sequencefileoutputformat 將它的輸出寫為乙個順序檔案。如果輸出需要作為後續 mapreduce 任務的輸入,這便是一種很好的輸出格式, 因為它的格式緊湊,很容易被壓縮。

2、關於sequencefileasbinaryoutputformat

sequencefileasbinaryoutputformat 把鍵/值對作為二進位制格式寫到乙個 sequencefile 容器中。

3、關於mapfileoutputformat

mapfileoutputformat 把 mapfile 作為輸出。mapfile 中的鍵必須順序新增,所以必須確保reducer輸出的鍵已經排好序

3、多個輸出

上面我們提到,預設情況下只有乙個 reduce,輸出只有乙個檔案。有時可能需要對輸出的檔名進行控制或讓每個 reducer 輸出多個檔案。 我們有兩種方式實現reducer輸出多個檔案。

1、partitioner

具體示例,請參考」使用partitioner實現輸出到多個檔案」

這種方法實現多檔案輸出,很多情況下是無法實現的,因為存在以下兩個缺點。

第一,需要在作業執行之前需要知道分割槽數,如果分割槽數未知,就無法操作。

第二,一般來說,讓應用程式來嚴格限定分割槽數並不好,因為可能導致分割槽數少或分割槽不均

2、multipleoutputs類

具體示例,請參考」通過multipleoutputs寫到多個檔案」

4、資料庫輸出

dboutputformat 適用於將作業輸出資料(中等規模的資料)轉存到mysql、oracle等資料庫;使用dboutputformat以mapreduce的方式執行,會並行的連線資料庫。在這裡需要合適的設定map、reduce的個數,以便將並行連線的數量控制在合理的範圍之內

具體示例,請參考「使用dboutputformat把mapreduce產生的結果集匯入到mysql中」

】。

MapReduce提供的輸入輸出格式

輸入格式 key value textinputformat 預設格式,讀取檔案的行 行的位元組偏移量 行的內容 keyvalueinputformat 把行解析為鍵值對 第乙個tab字元前的所有字元 行剩下的內容 sequencefileinputformat hadoop定義的高效能二進位制格式...

C 輸出格式

cout.precision 設定小數點後精確度,cout.width 設定寬度,cout.setf 設定顯示格式,比如 cout.setf ios left 左對齊 cout.setf ios showpoint 不管是否有小數字,顯示小數點 cout.fill 不足寬度則填充,如cout.fil...

Struts 輸出格式

struts2格式化日期和時間2009 11 30 14 50struts2 中的預設的日期輸出並不符合我們的中文日常習慣.以下是我知道的在struts2中進行日期格式化輸出的幾種方式.1.利用 進行格式化.如 就是將屬性birthday按yyyy mm dd的格式進行輸出.2.利用進行格式化.如 ...