日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Hadoop—MapReduce編程思想

MapReduce,本質(zhì)就是一種編程模型,也是一個處理大規(guī)模數(shù)據(jù)集的相關(guān)實現(xiàn)。之所以會有這個模型,目的是為了隱藏“并行計算、容錯處理、數(shù)據(jù)分發(fā)、負(fù)載均衡”,從而實現(xiàn)大數(shù)據(jù)計算的一種抽象。

成都創(chuàng)新互聯(lián)擁有網(wǎng)站維護(hù)技術(shù)和項目管理團(tuán)隊,建立的售前、實施和售后服務(wù)體系,為客戶提供定制化的網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、網(wǎng)站維護(hù)、遂寧聯(lián)通機(jī)房解決方案。為客戶網(wǎng)站安全和日常運維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護(hù)服務(wù)覆蓋集團(tuán)企業(yè)、上市公司、外企網(wǎng)站、商城網(wǎng)站建設(shè)、政府網(wǎng)站等各類型客戶群體,為全球數(shù)千家企業(yè)提供全方位網(wǎng)站維護(hù)、服務(wù)器維護(hù)解決方案。

1、環(huán)境說明

部署節(jié)點操作系統(tǒng)為CentOS,防火墻和SElinux禁用,創(chuàng)建了一個shiyanlou用戶并在系統(tǒng)根目錄下創(chuàng)建/app目錄,用于存放Hadoop等組件運行包。因為該目錄用于安裝hadoop等組件程序,用戶對shiyanlou必須賦予rwx權(quán)限(一般做法是root用戶在根目錄下創(chuàng)建/app目錄,并修改該目錄擁有者為shiyanlou(chown –R shiyanlou:shiyanlou /app)。

**Hadoop**搭建環(huán)境:

l 虛擬機(jī)操作系統(tǒng): CentOS6.6 64位,單核,1G內(nèi)存

l JDK:1.7.0_55 64位

l Hadoop:1.1.2

2、MapReduce原理

2.1 MapReduce簡介

MapReduce 是現(xiàn)今一個非常流行的分布式計算框架,它被設(shè)計用于并行計算海量數(shù)據(jù)。第一個提出該技術(shù)框架的是Google 公司,而Google 的靈感則來自于函數(shù)式編程語言,如LISP,Scheme,ML 等。MapReduce 框架的核心步驟主要分兩部分:Map 和Reduce。當(dāng)你向MapReduce 框架提交一個計算作業(yè)時,它會首先把計算作業(yè)拆分成若干個Map 任務(wù),然后分配到不同的節(jié)點上去執(zhí)行,每一個Map 任務(wù)處理輸入數(shù)據(jù)中的一部分,當(dāng)Map 任務(wù)完成后,它會生成一些中間文件,這些中間文件將會作為Reduce 任務(wù)的輸入數(shù)據(jù)。Reduce 任務(wù)的主要目標(biāo)就是把前面若干個Map 的輸出匯總到一起并輸出。從高層抽象來看,MapReduce的數(shù)據(jù)流圖如下圖所示:

2.2 MapReduce流程分析

2.2.1 Map過程

\1. 每個輸入分片會讓一個map任務(wù)來處理,默認(rèn)情況下,以HDFS的一個塊的大?。J(rèn)為64M)為一個分片,當(dāng)然我們也可以設(shè)置塊的大小。map輸出的結(jié)果會暫且放在一個環(huán)形內(nèi)存緩沖區(qū)中(該緩沖區(qū)的大小默認(rèn)為100M,由io.sort.mb屬性控制),當(dāng)該緩沖區(qū)快要溢出時(默認(rèn)為緩沖區(qū)大小的80%,由io.sort.spill.percent屬性控制),會在本地文件系統(tǒng)中創(chuàng)建一個溢出文件,將該緩沖區(qū)中的數(shù)據(jù)寫入這個文件;

\2. 在寫入磁盤之前,線程首先根據(jù)reduce任務(wù)的數(shù)目將數(shù)據(jù)劃分為相同數(shù)目的分區(qū),也就是一個reduce任務(wù)對應(yīng)一個分區(qū)的數(shù)據(jù)。這樣做是為了避免有些reduce任務(wù)分配到大量數(shù)據(jù),而有些reduce任務(wù)卻分到很少數(shù)據(jù),甚至沒有分到數(shù)據(jù)的尷尬局面。其實分區(qū)就是對數(shù)據(jù)進(jìn)行hash的過程。然后對每個分區(qū)中的數(shù)據(jù)進(jìn)行排序,如果此時設(shè)置了Combiner,將排序后的結(jié)果進(jìn)行Combia操作,這樣做的目的是讓盡可能少的數(shù)據(jù)寫入到磁盤;

\3. 當(dāng)map任務(wù)輸出最后一個記錄時,可能會有很多的溢出文件,這時需要將這些文件合并。合并的過程中會不斷地進(jìn)行排序和combia操作,目的有兩個:

l盡量減少每次寫入磁盤的數(shù)據(jù)量

l盡量減少下一復(fù)制階段網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。最后合并成了一個已分區(qū)且已排序的文件。為了減少網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量,這里可以將數(shù)據(jù)壓縮,只要將mapred.compress.map.out設(shè)置為true就可以了

\4. 將分區(qū)中的數(shù)據(jù)拷貝給相對應(yīng)的reduce任務(wù)。有人可能會問:分區(qū)中的數(shù)據(jù)怎么知道它對應(yīng)的reduce是哪個呢?其實map任務(wù)一直和其父TaskTracker保持聯(lián)系,而TaskTracker又一直和JobTracker保持心跳。所以JobTracker中保存了整個集群中的宏觀信息。只要reduce任務(wù)向JobTracker獲取對應(yīng)的map輸出位置就可以了。

2.2.2 Reduce過程

\1. Reduce會接收到不同map任務(wù)傳來的數(shù)據(jù),并且每個map傳來的數(shù)據(jù)都是有序的。如果reduce端接受的數(shù)據(jù)量相當(dāng)小,則直接存儲在內(nèi)存中(緩沖區(qū)大小由mapred.job.shuffle.input.buffer.percent屬性控制,表示用作此用途的堆空間的百分比),如果數(shù)據(jù)量超過了該緩沖區(qū)大小的一定比例(由mapred.job.shuffle.merge.percent決定),則對數(shù)據(jù)合并后溢寫到磁盤中;

\2. 隨著溢寫文件的增多,后臺線程會將它們合并成一個更大的有序的文件,這樣做是為了給后面的合并節(jié)省時間。其實不管在map端還是reduce端,MapReduce都是反復(fù)地執(zhí)行排序,合并操作;

\3. 合并的過程中會產(chǎn)生許多的中間文件(寫入磁盤了),但MapReduce會讓寫入磁盤的數(shù)據(jù)盡可能地少,并且最后一次合并的結(jié)果并沒有寫入磁盤,而是直接輸入到reduce函數(shù)。

2.3 MapReduce工作機(jī)制剖析

1.在集群中的任意一個節(jié)點提交MapReduce程序;

2.JobClient收到作業(yè)后,JobClient向JobTracker請求獲取一個Job ID;

3.將運行作業(yè)所需要的資源文件復(fù)制到HDFS上(包括MapReduce程序打包的JAR文件、配置文件和客戶端計算所得的輸入劃分信息),這些文件都存放在JobTracker專門為該作業(yè)創(chuàng)建的文件夾中,文件夾名為該作業(yè)的Job ID;

4.獲得作業(yè)ID后,提交作業(yè);

5.JobTracker接收到作業(yè)后,將其放在一個作業(yè)隊列里,等待作業(yè)調(diào)度器對其進(jìn)行調(diào)度,當(dāng)作業(yè)調(diào)度器根據(jù)自己的調(diào)度算法調(diào)度到該作業(yè)時,會根據(jù)輸入劃分信息為每個劃分創(chuàng)建一個map任務(wù),并將map任務(wù)分配給TaskTracker執(zhí)行;

6.對于map和reduce任務(wù),TaskTracker根據(jù)主機(jī)核的數(shù)量和內(nèi)存的大小有固定數(shù)量的map槽和reduce槽。這里需要強(qiáng)調(diào)的是:map任務(wù)不是隨隨便便地分配給某個TaskTracker的,這里有個概念叫:數(shù)據(jù)本地化(Data-Local)。意思是:將map任務(wù)分配給含有該map處理的數(shù)據(jù)塊的TaskTracker上,同時將程序JAR包復(fù)制到該TaskTracker上來運行,這叫“運算移動,數(shù)據(jù)不移動”;

7.TaskTracker每隔一段時間會給JobTracker發(fā)送一個心跳,告訴JobTracker它依然在運行,同時心跳中還攜帶著很多的信息,比如當(dāng)前map任務(wù)完成的進(jìn)度等信息。當(dāng)JobTracker收到作業(yè)的最后一個任務(wù)完成信息時,便把該作業(yè)設(shè)置成“成功”。當(dāng)JobClient查詢狀態(tài)時,它將得知任務(wù)已完成,便顯示一條消息給用戶;

8.運行的TaskTracker從HDFS中獲取運行所需要的資源,這些資源包括MapReduce程序打包的JAR文件、配置文件和客戶端計算所得的輸入劃分等信息;

9.TaskTracker獲取資源后啟動新的JVM虛擬機(jī);

\10. 運行每一個任務(wù);


分享文章:Hadoop—MapReduce編程思想
標(biāo)題路徑:http://www.5511xx.com/article/djgdses.html