大數(shù)據(jù)技術(shù)原理與操作應(yīng)用 第4章 MapReduce 分布式計(jì)算系統(tǒng)_第1頁
大數(shù)據(jù)技術(shù)原理與操作應(yīng)用 第4章 MapReduce 分布式計(jì)算系統(tǒng)_第2頁
大數(shù)據(jù)技術(shù)原理與操作應(yīng)用 第4章 MapReduce 分布式計(jì)算系統(tǒng)_第3頁
大數(shù)據(jù)技術(shù)原理與操作應(yīng)用 第4章 MapReduce 分布式計(jì)算系統(tǒng)_第4頁
大數(shù)據(jù)技術(shù)原理與操作應(yīng)用 第4章 MapReduce 分布式計(jì)算系統(tǒng)_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第4章MapReduce分布式計(jì)算系統(tǒng)1MapReduce運(yùn)行模式MapReduce運(yùn)行流程MapReduce編程案例分析使用MapReduce實(shí)現(xiàn)反向索引MapReduce基本思想MapReduce處理流程MapReduce編程模型2?學(xué)習(xí)目標(biāo)理解掌握掌握掌握理解MapReduce的核心思想12掌握MapReduce的編程模型4掌握MapReduce常見編程組件的使用3掌握MapReduce的工作原理本章將對(duì)MapReduce進(jìn)行系統(tǒng)的介紹,讓讀者對(duì)MapReduce有一個(gè)全面的認(rèn)識(shí)。章節(jié)概要HadoopMapReduce是一個(gè)面向大規(guī)模數(shù)據(jù)集的簡(jiǎn)單易用的并行計(jì)算模型,它極大地方便了編程人員在不會(huì)分布式并行編程的情況下,將自己的程序運(yùn)行在分布式系統(tǒng)上。

4.1 MapReduce介紹4.1.1 MapReduce基本思想MapReduce是Google提出的大規(guī)模并行計(jì)算框架,應(yīng)用于大規(guī)模廉價(jià)集群上的大數(shù)據(jù)并行處理。MapReduce采用“分而治之”的設(shè)計(jì)思想,將輸入的大量數(shù)據(jù)(這些數(shù)據(jù)之間不存在或有較少的依賴關(guān)系)采用一定的劃分方法進(jìn)行分片,然后將一個(gè)數(shù)據(jù)分片交由一個(gè)任務(wù)去處理,這些任務(wù)并行計(jì)算,最后再匯總所有任務(wù)的處理結(jié)果。MapReduce將大數(shù)據(jù)計(jì)算任務(wù)劃分成多個(gè)子任務(wù),然后由各個(gè)分節(jié)點(diǎn)并行計(jì)算,最后通過整合各個(gè)節(jié)點(diǎn)的中間結(jié)果,將各個(gè)子任務(wù)的結(jié)果進(jìn)行合并,得到最終結(jié)果。MapReduce借助函數(shù)式編程設(shè)計(jì)思想,將大數(shù)據(jù)處理過程主要拆分為Map(映射)和Reduce(歸約)兩個(gè)模塊。Map(映射)用來將輸入的大量鍵值對(duì)映射成新的鍵值對(duì),Reduce(歸約)負(fù)責(zé)收集整理Map操作生成的中間結(jié)果,并進(jìn)行輸出。

4.1 MapReduce介紹4.1.1 MapReduce基本思想MapReduce是一個(gè)并行計(jì)算與運(yùn)行軟件框架,能自動(dòng)完成計(jì)算任務(wù)的并行化處理,自動(dòng)劃分計(jì)算數(shù)據(jù)和計(jì)算任務(wù),在集群節(jié)點(diǎn)上自動(dòng)分配和執(zhí)行任務(wù)以及收集計(jì)算結(jié)果,為程序員隱藏系統(tǒng)底層細(xì)節(jié)。這樣程序員就不需要考慮數(shù)據(jù)的存儲(chǔ)、劃分、分發(fā)、結(jié)果收集和錯(cuò)誤恢復(fù)等諸多細(xì)節(jié)問題,這些問題都交由系統(tǒng)自行處理,大大減少了軟件開發(fā)人員的負(fù)擔(dān)。

4.1 MapReduce介紹4.1.2 MapReduce處理流程MapReduce是一種并行編程模型,將計(jì)算分為兩個(gè)階段:Map階段和Reduce階段。首先將輸入數(shù)據(jù)劃分成多個(gè)塊,由多個(gè)Map任務(wù)并行計(jì)算。MapReduce對(duì)Map任務(wù)的結(jié)果進(jìn)行聚集和混洗,然后提供給Reduce任務(wù)作為其輸入數(shù)據(jù)集。最終通過合并Reduce任務(wù)的輸出得到最終結(jié)果。MapReduce數(shù)據(jù)處理流程如圖4.1所示。圖4.1MapReduce數(shù)據(jù)處理流程

4.1 MapReduce介紹4.1.1 MapReduce基本思想①從存儲(chǔ)系統(tǒng)中讀取輸入文件內(nèi)容,存儲(chǔ)系統(tǒng)可以是本地文件系統(tǒng)或者HDFS文件系統(tǒng)等。對(duì)輸入文件的每一行解析成一個(gè)<key,value>對(duì),在默認(rèn)情況下,key表示行偏移量,value表示這行的內(nèi)容。②每一個(gè)<key,value>對(duì)調(diào)用一次map函數(shù)。程序員需要根據(jù)實(shí)際的業(yè)務(wù)需要重寫map()方法,對(duì)輸入的<key,value>對(duì)進(jìn)行處理,轉(zhuǎn)換為新的<key,value>對(duì)輸出。(1)Map任務(wù)處理

4.1 MapReduce介紹4.1.1 MapReduce基本思想①對(duì)Map輸出的<key,value>對(duì)進(jìn)行分區(qū),并將結(jié)果通過網(wǎng)絡(luò)復(fù)制到不同的Reducer節(jié)點(diǎn)上。②將不同分區(qū)的數(shù)據(jù)按照key進(jìn)行排序,相同key的value放到一個(gè)集合中,形成新的鍵值對(duì),即<key,list(value)>對(duì),記為<key,VALUE>。(2)Shuffle與Sort

4.1 MapReduce介紹4.1.1 MapReduce基本思想①調(diào)用Reduce函數(shù)處理前面得到的每一個(gè)<key,VALUE>。程序員需要根據(jù)實(shí)際的業(yè)務(wù)需要重寫reduce()方法。②將Reduce函數(shù)的輸出保存到文件系統(tǒng)中。(3)Reduce任務(wù)處理

4. 2MapReduce運(yùn)行機(jī)制4.2.1MapReduce編程模型簡(jiǎn)介一個(gè)MapReduce作業(yè)通常將輸入的數(shù)據(jù)集拆分成多個(gè)獨(dú)立的塊,這些塊被Map任務(wù)以并行的方式進(jìn)行計(jì)算。MapReduce將Map任務(wù)的輸出進(jìn)行排序,然后將排序后的結(jié)果作為Reduce任務(wù)的輸入。作業(yè)的輸入和輸出數(shù)據(jù)均被存儲(chǔ)在文件系統(tǒng)中。MapReduce框架負(fù)責(zé)任務(wù)調(diào)度、監(jiān)控和重新執(zhí)行失敗的任務(wù)。HadoopMapReduce為用戶提供了五個(gè)可編程組件,分別是InputFormat、Mapper、Partitioner、Reducer和OutputFormat。還有一個(gè)組件稱為Combiner,實(shí)際上是一個(gè)局部的Reducer,通常用于MapReduce程序性能方面,不屬于必備組件。一般情況下,用戶只需要編寫Mapper和Reducer類即可,其他類已由MapReduce實(shí)現(xiàn),可以直接使用。

4. 2MapReduce運(yùn)行機(jī)制4.2.2 MapReduce運(yùn)行模式Hadoop的MapReduceJob的運(yùn)動(dòng)模式可以分為本地運(yùn)行模式和集群運(yùn)行模式。本地運(yùn)行模式在編寫MapReduce程序時(shí)不帶集群的配置文件,也就是MapReduce程序不要配置YARN作為運(yùn)行框架,配置“=local”,就可以實(shí)現(xiàn)程序的本地運(yùn)行。MapReduce的本地運(yùn)行模式無須啟動(dòng)遠(yuǎn)程的Hadoop集群,MapReduce程序會(huì)被提交給本地執(zhí)行器LocalJobRunner在本地以單進(jìn)程的形式運(yùn)行。輸入數(shù)據(jù)及輸出結(jié)果可以放在本地文件系統(tǒng),也可以放在HDFS上。本地運(yùn)行模式非常便于進(jìn)行業(yè)務(wù)邏輯調(diào)試,只要在Eclipse中設(shè)置斷點(diǎn)即可。

4. 2MapReduce運(yùn)行機(jī)制4.2.2 MapReduce運(yùn)行模式(2)集群運(yùn)行模式首先需要啟動(dòng)YARN,Job

會(huì)提交到Y(jié)ARN框架中去執(zhí)行,訪問“http://master:8088”可以查看Job執(zhí)行狀態(tài)。在MapReduce的集群運(yùn)行模式下,MR程序?qū)?huì)提交給YARN集群Resourcemanager,分發(fā)到多個(gè)節(jié)點(diǎn)上并發(fā)執(zhí)行。輸入數(shù)據(jù)和輸出結(jié)果一般位于HDFS文件系統(tǒng)。將MapReduce程序提交集群的實(shí)現(xiàn)方法有以下幾種:①將程序打包成jar包,上傳到服務(wù)器,然后在集群的任意節(jié)點(diǎn)上調(diào)用Hadoop命令啟動(dòng)集群執(zhí)行。②在Linux的Eclipse中直接運(yùn)行main方法,將程序提交到集群中去運(yùn)行,但采用此種方法,項(xiàng)目中要帶YARN的配置。③在Windows的Eclipse中直接運(yùn)行main方法,也可以提交給集群去運(yùn)行,但需要作更多的修改。

4. 2MapReduce運(yùn)行機(jī)制4.2.3MapReduce運(yùn)行流程

4. 2MapReduce運(yùn)行機(jī)制4.2.3MapReduce運(yùn)行流程(1)MapTask工作原理MapTask負(fù)責(zé)Map階段的整個(gè)數(shù)據(jù)處理流程,Map階段并行度由客戶端提交作業(yè)時(shí)的切片個(gè)數(shù)決定。①Split階段。MapReduce從文件系統(tǒng)中讀取文件后,會(huì)首先對(duì)讀取的文件進(jìn)行輸入分片(inputsplit)的劃分。輸入分片存儲(chǔ)的并非數(shù)據(jù)本身,而是一個(gè)分片長(zhǎng)度和一個(gè)記錄數(shù)據(jù)的位置的數(shù)組。一般情況下,以HDFS的一個(gè)塊的大小作為一個(gè)分片(也可以按split設(shè)置值來切片)。②一個(gè)輸入分片分配給一個(gè)Map任務(wù)。Map任務(wù)分配完成后,再對(duì)傳進(jìn)來的分片進(jìn)一步分解成一批鍵值對(duì)(<key,value>對(duì)),每一個(gè)鍵值對(duì)調(diào)用程序員事先編寫的Map函數(shù)進(jìn)行邏輯處理,輸出新的<key,value>對(duì)。③數(shù)據(jù)處理完成后,會(huì)調(diào)用collect()函數(shù)進(jìn)行結(jié)果的收集和輸出。collect()函數(shù)將新生成的<key,value>對(duì)進(jìn)行分區(qū),并寫入一個(gè)環(huán)形內(nèi)存緩沖區(qū)中(默認(rèn)為100MB)。

4. 2MapReduce運(yùn)行機(jī)制4.2.3MapReduce運(yùn)行流程(1)MapTask工作原理④溢寫。當(dāng)環(huán)形內(nèi)存緩沖區(qū)滿后(一般為寫滿緩沖區(qū)大小的80%),MapReduce會(huì)將數(shù)據(jù)寫到本地磁盤上生成一個(gè)臨時(shí)文件。首先,對(duì)需要溢寫的緩存區(qū)內(nèi)的數(shù)據(jù)進(jìn)行分區(qū),分區(qū)的個(gè)數(shù)由Reduce任務(wù)的個(gè)數(shù)決定,有多少個(gè)Reduce任務(wù)就劃分為多少個(gè)分區(qū),這樣可以保證Reduce任務(wù)分到均衡的數(shù)據(jù)。然后對(duì)每個(gè)分區(qū)中的數(shù)據(jù)進(jìn)行排序,經(jīng)過排序后,數(shù)據(jù)按分區(qū)聚集在一起,且同一分區(qū)內(nèi)所有數(shù)據(jù)按照key有序。最后進(jìn)行溢寫操作。如果用戶設(shè)置了Combiner,則還需要將排序后的結(jié)果以分區(qū)為單位合并成大文件,以避免同時(shí)打開大量文件和同時(shí)讀取大量小文件產(chǎn)生的隨機(jī)讀取帶來的開銷。

4. 2MapReduce運(yùn)行機(jī)制4.2.3MapReduce運(yùn)行流程(2)Shuffle工作原理Shuffle是MapReduce最為關(guān)鍵的一個(gè)階段,主要負(fù)責(zé)將Map端生成的數(shù)據(jù)按鍵排好序傳遞到Reduce端,包括兩個(gè)部分,即Map端的Shuffle和Reduce端的Shuffle。1)Map端的Shuffle將Map輸出的<key,value>對(duì)放到環(huán)形緩沖區(qū)中,當(dāng)緩沖區(qū)空間寫滿80%時(shí),準(zhǔn)備將緩沖區(qū)中數(shù)據(jù)寫入到磁盤,這樣可以保證寫入到內(nèi)存緩沖區(qū)和寫入到磁盤并行進(jìn)行,而不用中止Map。溢寫之前,先按照分區(qū)和key等對(duì)數(shù)據(jù)進(jìn)行排序,然后按分區(qū)將數(shù)據(jù)寫入臨時(shí)文件。如果有必要,還會(huì)進(jìn)行合并操作,也就是將按分區(qū)輸出的小文件合并成大文件,以提高效率。

4. 2MapReduce運(yùn)行機(jī)制4.2.3MapReduce運(yùn)行流程(2)Shuffle工作原理2)Reduce端的ShuffleReduce任務(wù)通過HTTP向各個(gè)Map任務(wù)復(fù)制它所需要的數(shù)據(jù),Map任務(wù)會(huì)在內(nèi)存或磁盤上對(duì)數(shù)據(jù)進(jìn)行合并,Reduce任務(wù)復(fù)制過來的數(shù)據(jù)有些放在內(nèi)存中,而有些放在磁盤上。Map輸出數(shù)據(jù)已經(jīng)是有序的,Reduce會(huì)對(duì)Map傳遞過來的數(shù)據(jù)不斷地進(jìn)行合并。一般Reduce端是一邊復(fù)制數(shù)據(jù)一邊合并數(shù)據(jù),復(fù)制和合并是重疊的。合并完成后,便得到了Reduce端的輸入文件。

4. 2MapReduce運(yùn)行機(jī)制4.2.3MapReduce運(yùn)行流程(3)ReduceTask工作原理①ReduceTask負(fù)責(zé)Reduce階段的整個(gè)數(shù)據(jù)處理流程。ReduceTask的并行度可以通過“job.setNumReduceTasks()”進(jìn)行手動(dòng)設(shè)置。ReduceTask默認(rèn)值是“1”,輸出文件個(gè)數(shù)為1個(gè)。若ReduceTask設(shè)置為“0”,表示沒有Reduce階段,輸出文件個(gè)數(shù)與Map個(gè)數(shù)一致。②ReduceTask從各個(gè)MapTask上通過網(wǎng)絡(luò)遠(yuǎn)程復(fù)制數(shù)據(jù),每個(gè)Map傳來的數(shù)據(jù)都是有序的。針對(duì)復(fù)制過來的數(shù)據(jù),如果數(shù)據(jù)量較小,則直接存放在內(nèi)存中;如果數(shù)據(jù)量大小超過一定閾值,則寫到磁盤上。③為了避免內(nèi)存使用過多或磁盤上存在大量小文件,在ReduceTask進(jìn)行拷貝的同時(shí),會(huì)啟動(dòng)后臺(tái)線程對(duì)內(nèi)存和磁盤上的文件進(jìn)行合并。因此,Reduce端一邊復(fù)制數(shù)據(jù),一邊合并數(shù)據(jù)。

4. 2MapReduce運(yùn)行機(jī)制4.2.3MapReduce運(yùn)行流程(3)ReduceTask工作原理④為了將key相同的數(shù)據(jù)聚集在一起,ReduceTask會(huì)對(duì)所有數(shù)據(jù)進(jìn)行一次歸并排序,將相同key的value值放到一個(gè)列表中,生成形如<key,list(value)>的鍵值對(duì)。⑤對(duì)每一個(gè)鍵值對(duì)調(diào)用程序員事先編寫的Reduce()函數(shù)進(jìn)行計(jì)算,并將結(jié)果輸出到文件系統(tǒng)中。

4. 2MapReduce運(yùn)行機(jī)制4.2.4 MapReduce編程案例WordCount分析單詞統(tǒng)計(jì)(WordCount)是MapReduce經(jīng)典案例之一,用于統(tǒng)計(jì)大量文件中每個(gè)單詞出現(xiàn)的次數(shù),本節(jié)通過分析一個(gè)單詞統(tǒng)計(jì)案例來深入剖析MapReduce編程模型。WordCount的目標(biāo)是將多個(gè)inputsplit文件輸入最終得到文件的詞頻統(tǒng)計(jì),如圖4.3所示。圖4.3統(tǒng)計(jì)大量文件中的單詞詞頻

4. 2MapReduce運(yùn)行機(jī)制4.2.4 MapReduce編程案例WordCount分析1)文件轉(zhuǎn)換圖4.4文件轉(zhuǎn)換成<key,value>對(duì)過程(1)Map階段

4. 2MapReduce運(yùn)行機(jī)制4.2.4 MapReduce編程案例WordCount分析2)map()方法作用圖4.5 map()方法的轉(zhuǎn)換過程(1)Map階段

4. 2MapReduce運(yùn)行機(jī)制4.2.4 MapReduce編程案例WordCount分析2)map()方法作用(1)Map階段public

static

classWordCountMap

extendsMapper<LongWritable,Text,Text,IntWritable>{

private

final

IntWritable

one=new

IntWritable(1);

privateTextword=newText();

@Override

protected

voidmap(LongWritable

key,Textvalue, Mapper<LongWritable,Text,Text,IntWritable>.Contextcontext)

throws

IOException,InterruptedException{ Stringline=value.toString();

StringTokenizer

token=new

StringTokenizer(line);

while(token.hasMoreTokens()){

word.set(token.nextToken());

context.write(word,one); } } }

4. 2MapReduce運(yùn)行機(jī)制4.2.4 MapReduce編程案例WordCount分析3)Map端的Shuffle(1)Map階段圖4.6Map端的Shuffle過程

4. 2MapReduce運(yùn)行機(jī)制4.2.4 MapReduce編程案例WordCount分析1)Reduce端的Shuffle(2)Reduce階段圖4.7Reduce端的Shuffle過程

4. 2MapReduce運(yùn)行機(jī)制4.2.4 MapReduce編程案例WordCount分析2)reduce()方法作用(2)Reduce階段圖4.8Reduce()方法的作用過程

4. 2MapReduce運(yùn)行機(jī)制4.2.4 MapReduce編程案例WordCount分析2)reduce()方法作用(2)Reduce階段public

static

class

WordCountReduce

extendsReducer<Text,IntWritable,Text,IntWritable>{

@Override

protected

voidreduce(Textkey,Iterable<IntWritable>values, Reducer<Text,IntWritable,Text,IntWritable>.Contextcontext)

throws

IOException,InterruptedException{

int

sum=0;

for(IntWritable

val:values){

sum+=val.get(); }

context.write(key,new

IntWritable(sum)); }}

4. 2MapReduce運(yùn)行機(jī)制4.2.4 MapReduce編程案例WordCount分析(3)作業(yè)設(shè)置

public

static

voidmain(String[]args)

throws

IOException,ClassNotFoundException,InterruptedException{

//Configuration類代表作業(yè)的配置 Configurationconf=newConfiguration(); Jobjob=newJob(conf);

//指定主類為WordCount.class

job.setJarByClass(WordCount.class);

job.setJobName("wordcount");

//設(shè)置輸出key類型為Text,輸出值類型為IntWritable

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

//指定Mapper類和Reducer類

job.setMapperClass(WordCountMap.class);

job.setReducerClass(WordCountReduce.class);

//設(shè)置輸入輸出格式類

job.setInputFormatClass(TextInputFormat.class);

job.setOutputFormatClass(TextOutputFormat.class);

//設(shè)置輸入數(shù)據(jù)文件路徑和輸出文件存放路徑

FileInputFormat.addInputPath(job,newPath("hdfs://master:9000/wordcounttest/word.txt"));

FileOutputFormat.setOutputPath(job,newPath("hdfs://master:9000/wordcounttest/output"));

//提交作業(yè)并等待執(zhí)行完成

job.waitForCompletion(true); }

4. 3案例:使用MapReduce實(shí)現(xiàn)反向索引4.3.1Windows下Eclipse遠(yuǎn)程開發(fā)環(huán)境搭建(1)安裝配置JDK1)下載JDK1.8,注意版本正確。2)環(huán)境變量設(shè)置①配置JDK環(huán)境變量在“計(jì)算機(jī)”上單擊鼠標(biāo)右鍵,選擇“屬性”,在彈出的對(duì)話框中單擊“高級(jí)系統(tǒng)設(shè)置”,如圖4.9所示。圖4.9 高級(jí)系統(tǒng)設(shè)置

4. 3案例:使用MapReduce實(shí)現(xiàn)反向索引4.3.1Windows下Eclipse遠(yuǎn)程開發(fā)環(huán)境搭建(1)安裝配置JDK在“系統(tǒng)屬性”對(duì)話框的“高級(jí)”選項(xiàng)卡中,單擊“環(huán)境變量”,如圖4.10所示。圖4.10系統(tǒng)屬性

4. 3案例:使用MapReduce實(shí)現(xiàn)反向索引4.3.1Windows下Eclipse遠(yuǎn)程開發(fā)環(huán)境搭建(1)安裝配置JDK在“環(huán)境變量”對(duì)話框中,新建系統(tǒng)變量“JAVA_HOME”,輸入值為JDK的安裝路徑,如圖4.11所示。圖4.11新建系統(tǒng)變量“JAVA_HOME”

4. 3案例:使用MapReduce實(shí)現(xiàn)反向索引4.3.1Windows下Eclipse遠(yuǎn)程開發(fā)環(huán)境搭建(1)安裝配置JDK編輯系統(tǒng)變量CLASSPATH,如果沒有該變量,則單擊“新建”按鈕進(jìn)行創(chuàng)建。在編輯框中,輸入變量值為JDK的安裝目錄的lib目錄和jre下的lib目錄。注意,第一個(gè)英文句號(hào)表示當(dāng)前目錄,不能省略。如圖4.12所示。圖4.12編輯系統(tǒng)變量CLASSPATH

4. 3案例:使用MapReduce實(shí)現(xiàn)反向索引4.3.1Windows下Eclipse遠(yuǎn)程開發(fā)環(huán)境搭建(1)安裝配置JDK編輯系統(tǒng)變量Path,在變量值的前面添加JDK安裝目錄的bin目錄。注意,末尾的分號(hào)不能省略。如圖4.13所示。至此,JDK安裝完成。圖4.13編輯系統(tǒng)變量Path

4. 3案例:使用MapReduce實(shí)現(xiàn)反向索引4.3.1Windows下Eclipse遠(yuǎn)程開發(fā)環(huán)境搭建(1)安裝配置JDK②測(cè)試JDK是否安裝成功JDK安裝完成后需要測(cè)試其是否安裝成功。按“Win+R”鍵彈出“運(yùn)行”對(duì)話框,輸入“cmd”,在命令提示符中輸入“java-version”查看JDK版本是否正確,如圖4.14所示。圖4.14查看JDK版本

4. 3案例:使用MapReduce實(shí)現(xiàn)反向索引4.3.1Windows下Eclipse遠(yuǎn)程開發(fā)環(huán)境搭建(1)安裝配置JDK②測(cè)試JDK是否安裝成功輸入“javac”和“java”,如果能正確輸出信息,則JDK配置成功,如圖4.15和4.16所示。如果輸出“Commandnotfound”,說明JDK配置失敗,需要重新配置。JDK的配置非常重要,一定要保證Java環(huán)境變量配置正確。圖4.16執(zhí)行java命令圖4.15執(zhí)行javac命令

4. 3案例:使用MapReduce實(shí)現(xiàn)反向索引4.3.1Windows下Eclipse遠(yuǎn)程開發(fā)環(huán)境搭建(2)配置Eclipse在Windows上遠(yuǎn)程開發(fā)MapReduce項(xiàng)目需要使用插件“hadoop-eclipse-plugin-2.7.7.jar”(2.7.7表示對(duì)應(yīng)Hadoop版本號(hào),需保持一致)。將下載好的插件放入Eclipse安裝目錄下的dropins文件夾中。以管理員身份運(yùn)行解壓縮軟件將“hadoop-2.7.7.tar.gz”解壓到Windows下,由于Linux文件格式和Windows不一樣,在解壓過程中可能會(huì)有錯(cuò)誤提示,可以忽略。將bin目錄下的hadoop.dll和winutils.exe(可以到網(wǎng)上自行下載)這兩個(gè)文件復(fù)制到“C:\Windows\System32\”目錄下。

4. 3案例:使用MapReduce實(shí)現(xiàn)反向索引4.3.1Windows下Eclipse遠(yuǎn)程開發(fā)環(huán)境搭建(2)配置Eclipse重新打開Eclipse,單擊Windows→Preferences,在左側(cè)窗口中單擊“HadoopMap/Reduce”選項(xiàng),在窗口右側(cè)設(shè)置Hadoop安裝路徑,如圖4.17所示。注意,Hadoop的安裝路徑既不能有空格,也不能有中文。圖4.17配置Windows下Hadoop安裝路徑

4. 3案例:使用MapReduce實(shí)現(xiàn)反向索引4.3.1Windows下Eclipse遠(yuǎn)程開發(fā)環(huán)境搭建(2)配置Eclipse配置Map/ReduceLocations。單擊Eclipse中Window→Perspective→OpenPerspective→Other,單擊“Map/Reduce”,在下方窗口中單擊“Map/ReduceLocations”,在其下空白處右擊“NewHadoopLocation”選項(xiàng)。在彈出的對(duì)話框中進(jìn)行Hadoop的配置,如圖4.18所示。其中“1”處配置“LocationName”,任意名稱都可以,這里輸入名稱為“master”?!?”處的Host輸入Hadoop集群中master節(jié)點(diǎn)的IP地址?!?”和“4”處分別設(shè)置通信端口號(hào)?!?”處設(shè)置通信的用戶名,這里設(shè)置為“apache”。圖4.18配置Hadooplocation

4. 3案例:使用MapReduce實(shí)現(xiàn)反向索引4.3.1Windows下Eclipse遠(yuǎn)程開發(fā)環(huán)境搭建(2)配置Eclipse配置hostname的解析。為了使Windows系統(tǒng)與Hadoop集群順利通信,還需要配置hostname的解析。在Windows下打開“C:\Windows\System32\drivers\etc\hosts”文件,添加如下內(nèi)容:00master01slave102slave2

4. 3案例:使用MapReduce實(shí)現(xiàn)反向索引4.3.1Windows下Eclipse遠(yuǎn)程開發(fā)環(huán)境搭建(2)配置Eclipse進(jìn)行通信測(cè)試啟動(dòng)Hadoop集群后,打開Eclipse,單擊左側(cè)的DFSLocations,如果連接成功,在ProjectExplorer的DFSLocations下會(huì)看到master下的HDFS集群中的文件,如圖4.19所示。此時(shí),可以直接在Eclipse中操作HDFS集群上的文件。圖4.19DFSLocations展現(xiàn)

4. 2MapReduce運(yùn)行機(jī)制4.3.2 使用MapReduce實(shí)現(xiàn)反向索引(1)案例說明反向索引也稱為倒排索引或反向檔案,用來存儲(chǔ)某個(gè)單詞在一個(gè)文檔或一組文檔中的存儲(chǔ)位置的映射。它是文檔檢索系統(tǒng)中最常用的數(shù)據(jù)結(jié)構(gòu),搜索引擎就是利用反向索引來進(jìn)行搜索的。通過反向索引可以快速地通過文章內(nèi)的單詞反向檢索獲取包含這個(gè)單詞的文檔標(biāo)識(shí)列表,從而完成巨大文件的快速搜索。

4. 2MapReduce運(yùn)行機(jī)制4.3.2 使用MapReduce實(shí)現(xiàn)反向索引(1)案例說明假設(shè)有兩個(gè)文件a.txt和b.txt,其內(nèi)容如下:a.txt:helloworldhellospring

b.txt:helloapachehellohadoop通過反向索引后,得到的結(jié)果為:apacheb.txt:1hadoopb.txt:1helloa.txt:2;b.txt:2springa.txt:1worlda.txt:1

4. 2MapReduce運(yùn)行機(jī)制4.3.2 使用MapReduce實(shí)現(xiàn)反向索引(1)案例說明整個(gè)實(shí)現(xiàn)過程:map函數(shù)解析輸入的文檔,輸出一系列<單詞,文檔標(biāo)識(shí)及單詞次數(shù)>的鍵值對(duì)。MapReduce將鍵值對(duì)按照單詞進(jìn)行排序,然后局部合并相同單詞的文檔,形成一批“<單詞,list(文檔標(biāo)識(shí)及單詞次數(shù))>”。reduce函數(shù)再將這些鍵值對(duì)進(jìn)行進(jìn)一步地排序、合并,最后輸出反向索引結(jié)果。MapReduce反向索引實(shí)現(xiàn)原理示意圖如圖4.20所示。圖4.20MapReduce反向索引實(shí)現(xiàn)原理示意圖

4. 2MapReduce運(yùn)行機(jī)制4.3.2 使用MapReduce實(shí)現(xiàn)反向索引(2)數(shù)據(jù)集本案例的數(shù)據(jù)集為“InverseData.zip”,包含三個(gè)英文文件,first.txt、second.txt和third.txt。首先,需要將這三個(gè)文件上傳到HDFS的“/mrtestlin/”目錄下。

文件上傳到DFS的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論