hadoop學習;自訂Input/OutputFormat;類引用mapreduce.mapper;三種模式

來源:互聯網
上載者:User

標籤:style   c   ext   color   get   a   

hadoop分割與讀取輸入檔案的方式被定義在InputFormat介面的一個實現中,TextInputFormat是預設的實現,當你想要一次擷取一行內容作為輸入資料時又沒有確定的鍵,從TextInputFormat返回的鍵為每行的位元組位移量,但目前沒看到用過

以前在mapper中曾使用LongWritable(鍵)和Text(值),在TextInputFormat中,因為鍵是位元組位移量,可以是LongWritable類型,而當使用KeyValueTextInputFormat時,第一個分隔字元前後都是Text類型,所以你必須修改mapper的實現以及map()方法來適應這個新鍵類型

一個MapReduce的輸入不一定是外部資料,常常是一些其他MapReduce的輸出資料,還可以自訂輸出格式,預設的輸出格式與KeyValueTextInputFormat能夠讀取的的資料格式保持一致(記錄中的每行均為一個由定位字元分隔的鍵和值),不過Hadoop提供了更加有效二進位壓縮檔格式,稱為序列檔案,這個序列檔案為hadoop處理做了最佳化,當串連多個MapReduce作業時,它是首選,讀取序列檔案的類為SequenceFileInputFormat,序列檔案的鍵和值對象可以由使用者自訂,輸出和輸入類型必須匹配

自訂InputFormat,實現兩個方法:

getSplit()確定所有用於輸入資料的檔案,並將輸入資料分割為輸入分區,每個map任務處理一個分區

getRecordReader()迴圈提取給定分區中的記錄,並解析每個記錄為預定義類型的鍵和值

在實際情況中一個分區總是以資料區塊為大小,在HDFS中預設一個塊為64MB

FileInputFormat中isSplitable()方法,檢查你是否可以將給定檔案分區,預設返回為true,有時你可能想要一個檔案為其自身的分塊,這時可以設定返回為false

LineRecordReader實現RecordReader,基於實現的封裝,大多數操作存放在next中

我們通過擴充FileInputFormat產生我們的InputFormat類,並實現一個factory方法來返回recordreader

除了類的構建之外,TimeUrlRecordReader會在RecordReader實現6種方法,它主要在KeyValueInputFormat之外的一個封裝,但吧記錄的Text類型轉換為URLWritable

輸出資料到檔案時,使用的是OutputFormat,因為每個reducer僅需將它的輸出寫入自己的檔案中,輸出不需要分區。

輸出檔案放在一個公用目錄中,通常命名為part-nnnnn,這裡的nnnnn是reducer的分區ID,RecordWriter對輸出結果進行格式化,而RecordReader對輸入格式進行解析

NullOutPutFormat簡單的實現了OutputFormat,無輸出,並不需要繼承FileOutputFormat。更主要的是OutputFormat(InputFormat)處理的是資料庫,並非檔案

個人化輸出可以在繼承了FileOutputFormat的類中的封裝的繼承RecordReader類中的write()方法,如果不只想輸出到檔案中


jar -xvf  ../example.jar  解壓jar包

向hdfs遷移本地檔案可以,程式中地址別寫錯了,別寫成其他不關聯的機子上的


在eclipse中寫完程式,打成jar包,放到hadoop檔案夾下,運行hadoop指令可以查看結果

若運用第三方外掛程式fatjar,將mapreduce的jar包和jedis的jar包整合到一起放入hadoop,這樣不需要修改manifest配置資訊

 搭建三種模式,一般預設單機模式:不使用HDFS,也不載入任何守護進程,主要用於開發調試

偽分布模式在“單節點叢集”上運行hadoop,其中所有守護進程都在一台機子上,增加了代碼調試功能,允許檢查記憶體使用量情況,HDFS輸入輸出,以及其他的守護進程互動

全分布模式,真實情況用這種模式,強調分布式儲存和分散式運算,明確聲明了NameNode和JobTracker守護進程所在的主機名稱。增大了HDFS備份參數發揮分布式儲存優勢

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.