針對前面介紹的輸入格式,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.利用進行格式化.如 ...