成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Java基礎之MapReduce框架總結與擴展知識點

瀏覽:2日期:2022-08-12 11:08:17
目錄一、MapTask工作機制二、MapTask工作流程:三、ReduceTask工作機制四、ReduceTask工作流程:五、數據清洗(ETL)六、計數器應用七、計數器案例八、MapReduce總結一、MapTask工作機制

MapTask就是Map階段的job,它的數量由切片決定

Java基礎之MapReduce框架總結與擴展知識點

二、MapTask工作流程:

1.Read階段:讀取文件,此時進行對文件數據進行切片(InputFormat進行切片),通過切片,從而確定MapTask的數量,切片中包含數據和key(偏移量)

2.Map階段:這個階段是針對數據進行map方法的計算操作,通過該方法,可以對切片中的key和value進行處理

3.Collect收集階段:在用戶編寫map()函數中,當數據處理完成后,一般會調用OutputCollector.collect()輸出結果。在該函數內部,它會將生成的key/value分區(調用Partitioner),并寫入一個環形內存緩沖區中。

4.Spill階段:即“溢寫”,當環形緩沖區滿后,MapReduce會將數據寫到本地磁盤上,生成一個臨時文件。需要注意的是,將數據寫入本地磁盤之前,先要對數據進行一次本地排序,并在必要時對數據進行合并、壓縮等操作。

5.Combine階段:當所有數據處理完成后,MapTask對所有臨時文件進行一次合并,以確保最終只會生成一個數據文件,這個階段默認是沒有的,一般需要我們自定義

6.當所有數據處理完后,MapTask會將所有臨時文件合并成一個大文件,并保存到文件output/file.out中,同時生成相應的索引文件output/file.out.index。

7.在進行文件合并過程中,MapTask以分區為單位進行合并。對于某個分區,它將采用多輪遞歸合并的方式。每輪合并io.sort.factor(默認10)個文件,并將產生的文件重新加入待合并列表中,對文件排序后,重復以上過程,直到最終得到一個大文件。

8.讓每個MapTask最終只生成一個數據文件,可避免同時打開大量文件和同時讀取大量小文件產生的隨機讀取帶來的開銷

第四步溢寫階段詳情:

步驟1:利用快速排序算法對緩存區內的數據進行排序,排序方式是,先按照分區編號Partition進行排序,然后按照key進行排序。這樣,經過排序后,數據以分區為單位聚集在一起,且同一分區內所有數據按照key有序。 步驟2:按照分區編號由小到大依次將每個分區中的數據寫入任務工作目錄下的臨時文件output/spillN.out(N表示當前溢寫次數)中。如果用戶設置了Combiner,則寫入文件之前,對每個分區中的數據進行一次聚集操作。 步驟3:將分區數據的元信息寫到內存索引數據結構SpillRecord中,其中每個分區的元信息包括在臨時文件中的偏移量、壓縮前數據大小和壓縮后數據大小。如果當前內存索引大小超過1MB,則將內存索引寫到文件output/spillN.out.index中。三、ReduceTask工作機制

ReduceTask就是Reduce階段的job,它的數量由Map階段的分區進行決定

Java基礎之MapReduce框架總結與擴展知識點

四、ReduceTask工作流程:

1.Copy階段:ReduceTask從各個MapTask上遠程拷貝一片數據,并針對某一片數據,如果其大小超過一定閾值,則寫到磁盤上,否則直接放到內存中。

2.Merge階段:在遠程拷貝數據的同時,ReduceTask啟動了兩個后臺線程對內存和磁盤上的文件進行合并,以防止內存使用過多或磁盤上文件過多。

3.Sort階段:按照MapReduce語義,用戶編寫reduce()函數輸入數據是按key進行聚集的一組數據。為了將key相同的數據聚在一起,Hadoop采用了基于排序的策略。由于各個MapTask已經實現對自己的處理結果進行了局部排序,因此,ReduceTask只需對所有數據進行一次歸并排序即可。

4.Reduce階段:reduce()函數將計算結果寫到HDFS上

五、數據清洗(ETL)

我們在大數據開篇概述中說過,數據是低價值的,所以我們要從海量數據中獲取到我們想要的數據,首先就需要對數據進行清洗,這個過程也稱之為ETL

還記得上一章中的Join案例么,我們對pname字段的填充,也算數據清洗的一種,下面我通過一個簡單的案例來演示一下數據清洗

數據清洗案例

需求:過濾一下log日志中字段個數小于11的日志(隨便舉個栗子而已)

測試數據:就拿我們這兩天學習中HadoopNodeName產生的日志來當測試數據吧,我將log日志信息放到我的windows中,數據位置如下

/opt/module/hadoop-3.1.3/logs/hadoop-xxx-nodemanager-hadoop102.log

編寫思路:

直接通過切片,然后判斷長度即可,因為是舉個栗子,沒有那么復雜

真正的數據清洗會使用框架來做,這個我后面會為大家帶來相關的知識

ETLDriver

package com.company.etl;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class ETLDriver { public static void main(String[] args) throws Exception {Job job = Job.getInstance(new Configuration());job.setJarByClass(ETLDriver.class);job.setMapperClass(ETLMapper.class);job.setNumReduceTasks(0);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(NullWritable.class);FileInputFormat.setInputPaths(job,new Path('D:ioinput8'));FileOutputFormat.setOutputPath(job,new Path('D:iooutput88'));job.waitForCompletion(true); }} ETLMapper

package com.company.etl;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Counter;import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;public class ETLMapper extends Mapper<LongWritable, Text,Text, NullWritable> { @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//清洗(過濾)String line = value.toString();String[] info = line.split(' ');//判斷if (info.length > 11){ context.write(value,NullWritable.get());} }}六、計數器應用 顧名思義,計數器的作用就是用于計數的,在Hadoop中,它內部也有一個計數器,用于監控統計我們處理數據的數量 我們通常在MapReduce中通過上下文 context進行應用,例如在Mapper中,我通過step方法進行初始化計數器,然后在我們map方法中進行計數七、計數器案例

在上面數據清洗的基礎上進行計數器的使用,Driver沒什么變化,只有Mapper

我們在Mapper的setup方法中,創建計數器的對象,然后在map方法中調用它即可

ETLMapper

package com.company.etl;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Counter;import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;public class ETLMapper extends Mapper<LongWritable, Text,Text, NullWritable> { private Counter sucess; private Counter fail; /*創建計數器對象 */ @Override protected void setup(Context context) throws IOException, InterruptedException {/* getCounter(String groupName, String counterName); 第一個參數 :組名 隨便寫 第二個參數 :計數器名 隨便寫 */sucess = context.getCounter('ETL', 'success');fail = context.getCounter('ETL', 'fail'); } @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//清洗(過濾)String line = value.toString();String[] info = line.split(' ');//判斷if (info.length > 11){ context.write(value,NullWritable.get()); //統計 sucess.increment(1);}else{ fail.increment(1);} }}八、MapReduce總結

好了,到這里,我們MapReduce就全部學習完畢了,接下來,我再把整個內容串一下,還是MapReduce的那個圖

Java基礎之MapReduce框架總結與擴展知識點

MapReduce的主要工作就是對數據進行運算、分析,它的工作流程如下:

1.我們會將HDFS中的數據通過InputFormat進行進行讀取、切片,從而計算出MapTask的數量

2.每一個MapTask中都會有Mapper類,里面的map方法就是任務的具體實現,我們通過它,可以完成數據的key,value封裝,然后通過分區進入shuffle中來完成每個MapTask中的數據分區排序

3.通過分區來決定ReduceTask的數量,每一個ReduceTask都有一個Reducer類,里面的reduce方法是ReduceTask的具體實現,它主要是完成最后的數據合并工作

4.當Reduce任務過重,我們可以通過Combiner合并,在Mapper階段來進行局部的數據合并,減輕Reduce的任務量,當然,前提是Combiner所做的局部合并工作不會影響最終的結果

5.當Reducer的任務完成,會將最終的key,value寫出,交給OutputFormat,用于數據的寫出,通過OutputFormat來完成HDFS的寫入操作

每一個MapTask和ReduceTask內部都是循環進行讀取,并且它有三個方法:setup() map()/reduce() cleanup()setup()方法是在MapTask/ReduceTask剛剛啟動時進行調用,cleanup()是在任務完成后調用

到此這篇關于Java基礎之MapReduce框架總結與擴展知識點的文章就介紹到這了,更多相關Java MapReduce框架內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
色噜噜狠狠色综合中国| 成人性色生活片| 成人午夜视频免费看| 欧美日韩精品免费观看视频| 六月丁香婷婷久久| 欧美色视频在线| 久久99精品国产麻豆不卡| 欧美亚洲国产bt| 老汉av免费一区二区三区| 久久精品日产第一区二区三区| 亚洲国产成人91porn| 国产日韩欧美在线播放不卡| 一二三四社区欧美黄| 亚洲一区亚洲| 五月天激情综合| 一本大道综合伊人精品热热| 奇米精品一区二区三区在线观看 | 在线播放欧美女士性生活| 激情六月婷婷久久| 91麻豆精品国产自产在线观看一区| 国产一区激情在线| 日韩欧美国产一区二区三区| 成人h精品动漫一区二区三区| 精品美女被调教视频大全网站| 99热精品一区二区| 国产精品福利一区| 亚洲综合二区| 青青草97国产精品免费观看| 欧美精三区欧美精三区| 国产精品亚洲一区二区三区妖精| 精品精品国产高清一毛片一天堂| 91色在线porny| 国产精品久久久久永久免费观看| 亚洲精品视频啊美女在线直播| 亚洲成人一区二区在线观看| 欧美性生活一区| 丰满少妇久久久久久久| 国产婷婷色一区二区三区| 亚洲国产精品第一区二区三区 | 国产精品美女视频| 国产精品亚洲欧美| 久久国产精品72免费观看| 欧美一区二区三区视频免费| 99亚偷拍自图区亚洲| 国产精品理伦片| 久久久久se| 国产激情一区二区三区桃花岛亚洲| 久久久久久久久伊人| 亚洲精品系列| 麻豆成人av在线| 日韩女优电影在线观看| 国自产拍偷拍福利精品免费一 | 麻豆成人免费电影| 日韩久久精品一区| 精品999成人| 蜜桃视频在线一区| 精品久久久久久久久久久院品网 | 欧美一区二区三区白人| 牛人盗摄一区二区三区视频| 亚洲欧美另类小说| 日本道精品一区二区三区| 国产盗摄一区二区三区| 中文字幕一区二区三| 91久久精品一区二区三区| 成人在线视频首页| 亚洲乱码日产精品bd| 欧美视频一二三区| 欧美日韩在线一区二区三区| 日韩中文字幕av电影| 精品久久五月天| 国产伦精品一区二区三区| 国产精品1024| 亚洲精品乱码久久久久久久久 | 91高清视频在线| 99v久久综合狠狠综合久久| 一区二区高清在线| 日韩一区二区三区精品视频| 影音国产精品| 国产美女久久久久| 亚洲免费观看高清完整版在线观看| 欧美日韩国产大片| 激情视频一区二区| 国产一区二区不卡老阿姨| 一色屋精品亚洲香蕉网站| 在线观看91精品国产入口| 欧美激情在线| 九九精品视频在线看| 日韩一区欧美小说| 91 com成人网| 夜久久久久久| 成人av网站在线| 五月婷婷综合激情| 久久精品人人做人人综合 | 91精品视频网| 亚洲免费精品| 国产91丝袜在线观看| 亚洲国产精品嫩草影院| 久久综合网色—综合色88| 日本电影亚洲天堂一区| 欧美视频观看一区| 国内精品自线一区二区三区视频| 亚洲日本在线天堂| 精品毛片乱码1区2区3区| 久久在线视频| 红桃视频亚洲| 粉嫩蜜臀av国产精品网站| 性做久久久久久久免费看| 久久久久国产精品麻豆ai换脸| 日本久久电影网| 狠狠爱综合网| 风间由美一区二区av101| 亚洲电影你懂得| 国产性天天综合网| 制服丝袜亚洲色图| 久久国产日韩| 欧美日韩精品不卡| 国产精品18久久久久| 午夜精品久久久久久久蜜桃app | 黄色日韩网站视频| 亚洲免费在线电影| 久久久久久免费| 欧美福利一区二区| 狼狼综合久久久久综合网| 国产精品成人观看视频免费| 懂色av一区二区三区免费看| 蜜臀精品一区二区三区在线观看| 一区二区在线免费| 国产女人aaa级久久久级 | 国产精品中文字幕日韩精品| 亚洲成人一区二区| 国产亚洲一二三区| 在线亚洲成人| 99久久国产综合色|国产精品| 久久综合色一综合色88| 久久中文在线| 国产精品亚洲欧美| 国产精品v日韩精品v欧美精品网站 | 中文字幕一区二区视频| 精品国产电影一区二区| 6080亚洲精品一区二区| 性久久久久久| 99re6热在线精品视频播放速度 | 激情综合网av| 日韩高清不卡一区二区三区| 夜夜爽夜夜爽精品视频| 综合精品久久久| 欧美激情中文字幕| 久久久久久97三级| 精品久久国产97色综合| 日韩一区二区三区在线| 欧美一区二区三区四区视频| 91.麻豆视频| 在线播放/欧美激情| 欧美精品xxxxbbbb| 欧美福利一区二区| 欧美精品 国产精品| 欧美日韩久久一区| 欧洲国产伦久久久久久久| 久久综合一区| 色菇凉天天综合网| 在线免费观看一区| 91国模大尺度私拍在线视频| 在线视频亚洲一区| 欧美日韩综合不卡| 欧美日韩成人高清| 在线综合+亚洲+欧美中文字幕| 91精品久久久久久久99蜜桃| 欧美久久久久久久久中文字幕| 欧美高清dvd| 欧美电视剧在线观看完整版| 精品人在线二区三区| 2020日本不卡一区二区视频| 久久久综合精品| 国产精品欧美久久久久无广告| 国产精品第五页| 一区二区三区欧美在线观看| 亚洲成人自拍一区| 日韩电影在线观看一区| 久久不见久久见免费视频7| 国产精品综合二区| 99久久国产综合色|国产精品| 欧美欧美全黄| 亚洲激情一区二区| 国产盗摄视频一区二区三区| www.欧美亚洲| 欧美午夜视频| 日韩天天综合| 久久久av水蜜桃| 色婷婷亚洲婷婷| 宅男噜噜噜66一区二区66| 精品久久久久久最新网址| 欧美极品少妇xxxxⅹ高跟鞋| 中文字幕一区二区三区视频| 亚洲黄一区二区三区| 日韩成人精品在线| 国产精品一区在线| 91视频国产观看| 妖精视频成人观看www| 久久九九99| 91精品国产综合久久国产大片|