日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

MapReduce之InputFormat、OutputFormat(三)

發(fā)布時(shí)間:2024/3/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MapReduce之InputFormat、OutputFormat(三) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1. 祝大家中秋節(jié)快樂(lè)
  • 2. MapReduce進(jìn)階
    • 2.1 MapReduce類(lèi)型
    • 2.2 MapReduce輸入格式
      • 2.2.1 InputFormat接口
      • 2.2.2 InputFormat接口的實(shí)現(xiàn)類(lèi)
    • 2.3 MapReduce輸出格式
      • 2.3.1 OutputFormat接口
      • 2.3.2 OutputFormat接口的實(shí)現(xiàn)類(lèi)
  • 3. 小結(jié)

1. 祝大家中秋節(jié)快樂(lè)

身在長(zhǎng)安,心在泰安,又是一年中秋佳節(jié),相思之情,溢于言表。現(xiàn)留杜甫一詩(shī)與大家共勉。
今夜鄜州月,閨中只獨(dú)看。
遙憐小兒女,未解憶長(zhǎng)安。
香霧云鬟濕,清輝玉臂寒。
何時(shí)倚虛幌,雙照淚痕干。

2. MapReduce進(jìn)階

2.1 MapReduce類(lèi)型

  • 輸入數(shù)據(jù)類(lèi)型由輸入格式(InputFormat)設(shè)置,比如:TextInputFormat的Key類(lèi)型為L(zhǎng)ongWritable,Value的類(lèi)型是Text。
  • map函數(shù)輸出的Key類(lèi)型通過(guò)setMapOutputKeyClass設(shè)置,Value類(lèi)型通過(guò)setMapOutputKeyClass設(shè)置。
  • reduce的輸出的Key類(lèi)型通過(guò)setOutputKeyClass設(shè)置,Value類(lèi)型通過(guò)setOutputValueClass設(shè)置。
  • 2.2 MapReduce輸入格式

    2.2.1 InputFormat接口

    InputFormat類(lèi)定義了如何分割和讀取輸入文件,它提供了以下功能:

  • 選擇作為輸入的文件或?qū)ο蟆?/li>
  • 定義把文件劃分到任務(wù)的InputSplits。
  • 為RecordReader讀取文件提供一個(gè)工廠方法。
    InputFormat接口包含了以下兩種方法:
  • public abstract List<InputSplit> getSplits(JobContext context) throws IOException, InterruptedException;public abstract RecordReader<K,V> createRecordReader(InputSplit split,TaskAttemptContext context) throws IOException, InterruptedException;

    方法說(shuō)明

    getSplits(JobContext context)方法負(fù)責(zé)將一個(gè)大數(shù)據(jù)邏輯分成許多片,比如數(shù)據(jù)庫(kù)表有100條數(shù)據(jù),按照主鍵ID升序存儲(chǔ),假設(shè)每20條分成一片,這個(gè)List的大小就是5,然后每個(gè)InputSplit記錄兩個(gè)參數(shù),第一個(gè)為這個(gè)分片的起始ID,第二個(gè)為這個(gè)分片數(shù)據(jù)的大小,這里是20。很明顯InputSplit并沒(méi)有真正存儲(chǔ)數(shù)據(jù),只是提供了一個(gè)如何將數(shù)據(jù)分片的方法。

    createRecordReader方法,根據(jù)定義,返回一個(gè)能夠讀取分片記錄的RecordReader。getSplit用來(lái)獲取由輸入文件計(jì)算出來(lái)的InputSplit,后面計(jì)算InputSplit時(shí),會(huì)考慮輸入文件是否可分割、文件存儲(chǔ)時(shí)分塊的大小和文件大小等因素;而createRecordReader()方法提供了RecordReader的實(shí)現(xiàn),將key-value對(duì)從InputSplit中正確讀出來(lái),比如LineRecordReader,它是以偏移值為Key,每行的數(shù)據(jù)為Value,這使所有createRecordReader()返回LineRecordReader的InputFormat都是以偏移值為Key、每行數(shù)據(jù)為Value的形式讀取輸入分片的。

    2.2.2 InputFormat接口的實(shí)現(xiàn)類(lèi)

    InputFormat接口實(shí)現(xiàn)類(lèi)有很多,其層次結(jié)構(gòu)如下所示:

    常用的實(shí)現(xiàn)類(lèi)介紹:

  • FileInputFormat
    FileInputFormat是所有使用文件作為其數(shù)據(jù)源的InputFormat實(shí)現(xiàn)的基類(lèi),它的主要作用是指出作業(yè)的輸入文件位置。因?yàn)樽鳂I(yè)的輸入被設(shè)定為一組路徑,這對(duì)指定作業(yè)輸入提供了很強(qiáng)的靈活性。FileInputFormat提供了四種靜態(tài)方法來(lái)設(shè)定作業(yè)的輸入路徑:
  • public static void addInputPaths(Job job, String commaSeparatedPaths) public static void addInputPath(Job job, Path path) public static void setInputPaths(Job job, Path... inputPaths) public static void setInputPaths(Job job, String commaSeparatedPaths)
  • KeyValueTextInputFormat
    每一行均為一條記錄,被分隔符(缺省是tab)分割為key(Text),value(Text),當(dāng)然分隔符可以自己設(shè)定。
  • TextInputFormat
    默認(rèn)的輸入格式是TextInputFormat,它把輸入文件每一行作為單獨(dú)的一個(gè)記錄,但不做解析處理,這對(duì)那些沒(méi)有被格式化的數(shù)據(jù)或是基于行的記錄來(lái)說(shuō)是很有用的,比如日志文件。
  • 2.3 MapReduce輸出格式

    2.3.1 OutputFormat接口

    OutputFormat接口主要用于描述輸出數(shù)據(jù)的格式,它能夠?qū)⒂脩?hù)提供的key/value對(duì)寫(xiě)入特定格式的文件中。其功能與前面描述的InputFormat相似,Hadoop提供的OutputFormat實(shí)例會(huì)把文件寫(xiě)在本地磁盤(pán)或HDFS上。每一個(gè)reducer會(huì)把結(jié)果輸出寫(xiě)在公共文件夾中一個(gè)單獨(dú)的文件內(nèi)。這些文件一般命名為:part-xxxxx,而xxxxx是關(guān)聯(lián)到某個(gè)reduce任務(wù)的partition的id。

    2.3.2 OutputFormat接口的實(shí)現(xiàn)類(lèi)

    下圖為OutputFormat接口的實(shí)現(xiàn)類(lèi)層次圖:
    常用的OutputFormat實(shí)現(xiàn)類(lèi)的介紹:

  • 文本輸出
    默認(rèn)的輸出格式是TextOutputFormat,它把每條記錄寫(xiě)為文本行。它的鍵和值可以實(shí)現(xiàn)Writable的任意類(lèi)型,因?yàn)門(mén)extOutputFormat調(diào)用toString()方法把他們轉(zhuǎn)換為字符串。每一個(gè)key/value鍵值對(duì)都以制表符為分隔符,當(dāng)然也可以自行設(shè)定(mapreduce.output.textoutputfomat.separator),與FileOutputFormat對(duì)應(yīng)的輸入格式是KeyValueTextInputFormat,它可以通過(guò)配置分隔符將key/value進(jìn)行文本分割。
    同時(shí),可以使用NullWritable來(lái)省略輸出的key或value,或者兩個(gè)都省略,相當(dāng)于NullOutputFormat的輸出格式,這也會(huì)導(dǎo)致無(wú)分隔符的輸出,以使輸出適合用TextInputFormat讀取。
  • 二進(jìn)制輸出
    SequenceFileOutputFormat將它的輸出寫(xiě)為一個(gè)順序文件。如果輸出需要作為后續(xù)的MapReduce任務(wù)的輸入,這便是一種合適的輸出格式,可以通過(guò)快速的序列化任意的數(shù)據(jù)類(lèi)型到文件中,而對(duì)應(yīng)SequenceFileInputFormat則會(huì)把文件反序列化為相同類(lèi)型并提交到下一個(gè)Mapper的輸入數(shù)據(jù)。
  • 3. 小結(jié)

    下期預(yù)告以及下下期預(yù)告:

  • Combiner詳細(xì)解析及操作
  • Partitioner詳細(xì)解析及操作
  • RecordReader詳細(xì)解析及操作
  • 總結(jié)

    以上是生活随笔為你收集整理的MapReduce之InputFormat、OutputFormat(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。