一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

hadoop框架詳細(xì)分析

 月影曉風(fēng) 2014-11-20

mapreduce是一種模式,一種什么模式呢?一種云計(jì)算的核心計(jì)算模式,一種分布式運(yùn)算技術(shù),也是簡(jiǎn)化的分布式編程模式,它主要用于解決問(wèn)題的程序開(kāi)發(fā)模型,也是開(kāi)發(fā)人員拆解問(wèn)題的方法。

如下圖所示,mapreduce模式的主要思想是將自動(dòng)分割要執(zhí)行的問(wèn)題(例如程序)拆解成map(映射)和reduce(化簡(jiǎn))的方式,流程圖如下圖1所示:

 hadoop框架詳細(xì)分析

在數(shù)據(jù)被分割后通過(guò)Map 函數(shù)的程序?qū)?shù)據(jù)映射成不同的區(qū)塊,分配給計(jì)算機(jī)機(jī)群處理達(dá)到分布式運(yùn)算的效果,在通過(guò)Reduce 函數(shù)的程序?qū)⒔Y(jié)果匯整,從而輸出開(kāi)發(fā)者需要的結(jié)果。

MapReduce 借鑒了函數(shù)式程序設(shè)計(jì)語(yǔ)言的設(shè)計(jì)思想,其軟件實(shí)現(xiàn)是指定一個(gè)Map 函數(shù),把鍵值對(duì)(key/value)映射成新的鍵值對(duì)(key/value),形成一系列中間結(jié)果形式的key/value 對(duì),然后把它們傳給Reduce(規(guī)約)函數(shù),把具有相同中間形式key 的value 合并在一起。Map 和Reduce 函數(shù)具有一定的關(guān)聯(lián)性。函數(shù)描述如表1 所示:

 hadoop框架詳細(xì)分析

MapReduce致力于解決大規(guī)模數(shù)據(jù)處理的問(wèn)題,因此在設(shè)計(jì)之初就考慮了數(shù)據(jù)的局部性原理,利用局部性原理將整個(gè)問(wèn)題分而治之。MapReduce集 群由普通PC機(jī)構(gòu)成,為無(wú)共享式架構(gòu)。在處理之前,將數(shù)據(jù)集分布至各個(gè)節(jié)點(diǎn)。處理時(shí),每個(gè)節(jié)點(diǎn)就近讀取本地存儲(chǔ)的數(shù)據(jù)處理(map),將處理后的數(shù)據(jù)進(jìn)行 合并(combine)、排序(shuffle and sort)后再分發(fā)(至reduce節(jié)點(diǎn)),避免了大量數(shù)據(jù)的傳輸,提高了處理效率。無(wú)共享式架構(gòu)的另一個(gè)好處是配合復(fù)制(replication)策 略,集群可以具有良好的容錯(cuò)性,一部分節(jié)點(diǎn)的down機(jī)對(duì)集群的正常工作不會(huì)造成影響。

ok,你可以再簡(jiǎn)單看看下副圖,整幅圖是有關(guān)hadoop的作業(yè)調(diào)優(yōu)參數(shù)及原理,圖的左邊是MapTask運(yùn)行示意圖,右邊是ReduceTask運(yùn)行示意圖:

 hadoop框架詳細(xì)分析

如上圖所示,其中map階段,當(dāng)map task開(kāi)始運(yùn)算,并產(chǎn)生中間數(shù)據(jù)后并非直接而簡(jiǎn)單的寫(xiě)入磁盤(pán),它首先利用內(nèi)存buffer來(lái)對(duì)已經(jīng)產(chǎn)生的buffer進(jìn)行緩存,并在內(nèi)存buffer中 進(jìn)行一些預(yù)排序來(lái)優(yōu)化整個(gè)map的性能。而上圖右邊的reduce階段則經(jīng)歷了三個(gè)階段,分別Copy->Sort->reduce。我們能 明顯的看出,其中的Sort是采用的歸并排序,即merge sort。

Hadoop 是一個(gè)實(shí)現(xiàn)了MapReduce 計(jì)算模型的開(kāi)源分布式并行編程框架,程序員可以借助Hadoop 編寫(xiě)程序,將所編寫(xiě)的程序運(yùn)行于計(jì)算機(jī)機(jī)群上,從而實(shí)現(xiàn)對(duì)海量數(shù)據(jù)的處理。

此外,Hadoop 還提供一個(gè)分布式文件系統(tǒng)(HDFS)及分布式數(shù)據(jù)庫(kù)(HBase)用來(lái)將數(shù)據(jù)存儲(chǔ)或部署到各個(gè)計(jì)算節(jié)點(diǎn)上。所以,你可以大致認(rèn) 為:Hadoop=HDFS(文件系統(tǒng),數(shù)據(jù)存儲(chǔ)技術(shù)相關(guān))+HBase(數(shù)據(jù)庫(kù))+MapReduce(數(shù)據(jù)處理)。Hadoop 框架如圖2 所示:

 hadoop框架詳細(xì)分析

借助Hadoop 框架及云計(jì)算核心技術(shù)MapReduce 來(lái)實(shí)現(xiàn)數(shù)據(jù)的計(jì)算和存儲(chǔ),并且將HDFS 分布式文件系統(tǒng)和HBase 分布式數(shù)據(jù)庫(kù)很好的融入到云計(jì)算框架中,從而實(shí)現(xiàn)云計(jì)算的分布式、并行計(jì)算和存儲(chǔ),并且得以實(shí)現(xiàn)很好的處理大規(guī)模數(shù)據(jù)的能力。

Hadoop的組成部分

我們已經(jīng)知道,Hadoop是Google的MapReduce一個(gè)Java實(shí)現(xiàn)。MapReduce是一種簡(jiǎn)化的分布式編程模式,讓程序自動(dòng)分布到一個(gè) 由普通機(jī)器組成的超大集群上并發(fā)執(zhí)行。Hadoop主要由HDFS、MapReduce和HBase等組成。具體的hadoop的組成如下圖:

 hadoop框架詳細(xì)分析

由上圖,我們可以看到:

1、 Hadoop HDFS是Google GFS存儲(chǔ)系統(tǒng)的開(kāi)源實(shí)現(xiàn),主要應(yīng)用場(chǎng)景是作為并行計(jì)算環(huán)境(MapReduce)的基礎(chǔ)組件,同時(shí)也是BigTable(如HBase、 HyperTable)的底層分布式文件系統(tǒng)。HDFS采用master/slave架構(gòu)。一個(gè)HDFS集群是有由一個(gè)Namenode和一定數(shù)目的 Datanode組成。Namenode是一個(gè)中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的namespace和客戶端對(duì)文件的訪問(wèn)。Datanode在集群中一般是 一個(gè)節(jié)點(diǎn)一個(gè),負(fù)責(zé)管理節(jié)點(diǎn)上它們附帶的存儲(chǔ)。在內(nèi)部,一個(gè)文件其實(shí)分成一個(gè)或多個(gè)block,這些block存儲(chǔ)在Datanode集合里。如下圖所示 (HDFS體系結(jié)構(gòu)圖):

 hadoop框架詳細(xì)分析

2、 Hadoop MapReduce是一個(gè)使用簡(jiǎn)易的軟件框架,基于它寫(xiě)出來(lái)的應(yīng)用程序能夠運(yùn)行在由上千個(gè)商用機(jī)器組成的大型集群上,并以一種可靠容錯(cuò)的方式并行處理上TB級(jí)別的數(shù)據(jù)集。

一個(gè)MapReduce作業(yè)(job)通常會(huì)把輸入的數(shù)據(jù)集切分為若干獨(dú)立的數(shù)據(jù)塊,由 Map任務(wù)(task)以完全并行的方式處理它們??蚣軙?huì)對(duì)Map的輸出先進(jìn)行排序,然后把結(jié)果輸入給Reduce任務(wù)。通常作業(yè)的輸入和輸出都會(huì)被存儲(chǔ) 在文件系統(tǒng)中。整個(gè)框架負(fù)責(zé)任務(wù)的調(diào)度和監(jiān)控,以及重新執(zhí)行已經(jīng)失敗的任務(wù)。如下圖所示(Hadoop MapReduce處理流程圖):

 hadoop框架詳細(xì)分析

3、 Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,處理能力強(qiáng)而且成本低廉。

主要特點(diǎn):

存儲(chǔ)方式是將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表。提供類SQL語(yǔ)言,實(shí)現(xiàn)完整的SQL查詢功能。可以將SQL語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)運(yùn)行,十分適合數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析。

不足之處:

采用行存儲(chǔ)的方式(SequenceFile)來(lái)存儲(chǔ)和讀取數(shù)據(jù)。效率低:當(dāng)要讀取數(shù)據(jù)表某一列數(shù)據(jù)時(shí)需要先取出所有數(shù)據(jù)然后再提取出某一列的數(shù)據(jù),效率很低。同時(shí),它還占用較多的磁盤(pán)空間。

由于以上的不足,有人(查禮博士)介紹了一種將分布式數(shù)據(jù)處理系統(tǒng)中以記錄為單位的存儲(chǔ)結(jié)構(gòu)變?yōu)橐粤袨閱挝坏拇鎯?chǔ)結(jié)構(gòu),進(jìn)而減少磁盤(pán)訪問(wèn)數(shù)量,提高查詢處 理性能。這樣,由于相同屬性值具有相同數(shù)據(jù)類型和相近的數(shù)據(jù)特性,以屬性值為單位進(jìn)行壓縮存儲(chǔ)的壓縮比更高,能節(jié)省更多的存儲(chǔ)空間。如下圖所示(行列存儲(chǔ) 的比較圖):

 hadoop框架詳細(xì)分析

4、 HBase

HBase是一個(gè)分布式的、面向列的開(kāi)源數(shù)據(jù)庫(kù),它不同于一般的關(guān)系數(shù)據(jù)庫(kù),是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)。另一個(gè)不同的是HBase基于列的而 不是基于行的模式。HBase使用和 BigTable非常相同的數(shù)據(jù)模型。用戶存儲(chǔ)數(shù)據(jù)行在一個(gè)表里。一個(gè)數(shù)據(jù)行擁有一個(gè)可選擇的鍵和任意數(shù)量的列,一個(gè)或多個(gè)列組成一個(gè) ColumnFamily,一個(gè)Fmaily下的列位于一個(gè)HFile中,易于緩存數(shù)據(jù)。表是疏松的存儲(chǔ)的,因此用戶可以給行定義各種不同的列。在 HBase中數(shù)據(jù)按主鍵排序,同時(shí)表按主鍵劃分為多個(gè)HRegion,如下圖所示(HBase數(shù)據(jù)表結(jié)構(gòu)圖):

 hadoop框架詳細(xì)分析

如下圖所示,便是hadoop的內(nèi)部結(jié)構(gòu),我們可以看到,海量的數(shù)據(jù)交給hadoop處理后,在hadoop的內(nèi)部中,正如上文所述:hadoop提供一 個(gè)分布式文件系統(tǒng)(HDFS)及分布式數(shù)據(jù)庫(kù)(Hbase)用來(lái)存儲(chǔ)或部署到各個(gè)計(jì)算點(diǎn)上,最終在內(nèi)部采取mapreduce的模式對(duì)其數(shù)據(jù)進(jìn)行處理,然 后輸出處理結(jié)果:

 hadoop框架詳細(xì)分析

 hadoop框架詳細(xì)分析

圖2-1 海量數(shù)據(jù)產(chǎn)品技術(shù)架構(gòu)

如上圖所示,我們可以看到,海量數(shù)據(jù)產(chǎn)品技術(shù)架構(gòu),分為以下五個(gè)層次,從上至下來(lái)看,它們分別是:數(shù)據(jù)源,計(jì)算層,存儲(chǔ)層,查詢層和產(chǎn)品層。我們來(lái)一一了解這五層:

數(shù)據(jù)來(lái)源層。存放著交易數(shù)據(jù)。在數(shù)據(jù)源層產(chǎn)生的數(shù)據(jù),通過(guò)DataX,DbSync和Timetunel準(zhǔn)實(shí)時(shí)的傳輸?shù)较旅娴?點(diǎn)所述的“云梯”。

計(jì)算層。在這個(gè)計(jì)算層內(nèi),采用的是hadoop集群,這個(gè)集群,我們暫且稱之為云梯,是計(jì)算層的主要組成部分。在云梯上,系統(tǒng)每天會(huì)對(duì)數(shù)據(jù)產(chǎn)品進(jìn)行不同的mapreduce計(jì)算。

存儲(chǔ)層。在這一層,采用了兩個(gè)東西,一個(gè)使MyFox,一個(gè)是Prom。MyFox是基于MySQL的分布式關(guān)系型數(shù)據(jù)庫(kù)的集群,Prom是基于 hadoop Hbase技術(shù) 的(讀者可別忘了,在上文第一部分中,咱們介紹到了這個(gè)hadoop的組成部分之一,Hbase—在hadoop之內(nèi)的一個(gè)分布式的開(kāi)源數(shù)據(jù)庫(kù))的一個(gè) NoSQL的存儲(chǔ)集群。

查詢層。在這一層中,有一個(gè)叫做glider的東西,這個(gè)glider是以HTTP協(xié)議對(duì)外提供restful方式的接口。數(shù)據(jù)產(chǎn)品通過(guò)一個(gè)唯一的URL來(lái)獲取到它想要的數(shù)據(jù)。同時(shí),數(shù)據(jù)查詢即是通過(guò)MyFox來(lái)查詢的。下文將具體介紹MyFox的數(shù)據(jù)查詢過(guò)程。

產(chǎn)品層。簡(jiǎn)單理解,不作過(guò)多介紹。

MyFOX

MySQL的MyISAM引擎作為底層的數(shù)據(jù)存儲(chǔ)引擎。且為了應(yīng)對(duì)海量數(shù)據(jù),他們?cè)O(shè)計(jì)了分布式MySQL集群的查詢代理層-MyFOX。

如下圖所示,是MySQL的數(shù)據(jù)查詢過(guò)程:

 hadoop框架詳細(xì)分析

圖2-2 MyFOX的數(shù)據(jù)查詢過(guò)程

在MyFOX的每一個(gè)節(jié)點(diǎn)中,存放著熱節(jié)點(diǎn)和冷節(jié)點(diǎn)兩種節(jié)點(diǎn)數(shù)據(jù)。顧名思義,熱節(jié)點(diǎn)存放著最新的,被訪問(wèn)頻率較高的數(shù)據(jù);冷節(jié)點(diǎn),存放著相對(duì)而來(lái)比較舊 的,訪問(wèn)頻率比較低的數(shù)據(jù)。而為了存儲(chǔ)這兩種節(jié)點(diǎn)數(shù)據(jù),出于硬件條件和存儲(chǔ)成本的考慮,你當(dāng)然會(huì)考慮選擇兩種不同的硬盤(pán),來(lái)存儲(chǔ)這兩種訪問(wèn)頻率不同的節(jié)點(diǎn) 數(shù)據(jù)。如下圖所示:

 hadoop框架詳細(xì)分析

圖2-3 MyFOX節(jié)點(diǎn)結(jié)構(gòu)

“熱節(jié)點(diǎn)”,選擇每分鐘15000轉(zhuǎn)的SAS硬盤(pán),按照一個(gè)節(jié)點(diǎn)兩臺(tái)機(jī)器來(lái)計(jì)算,單位數(shù)據(jù)的存儲(chǔ)成本約為4.5W/TB。相對(duì)應(yīng)地,“冷數(shù)據(jù)”我們選擇了每分鐘7500轉(zhuǎn)的SATA硬盤(pán),單碟上能夠存放更多的數(shù)據(jù),存儲(chǔ)成本約為1.6W/TB。

Prom

出于文章篇幅的考慮,本文接下來(lái)不再過(guò)多闡述這個(gè)Prom了。如下面兩幅圖所示,他們分別表示的是Prom的存儲(chǔ)結(jié)構(gòu)以及Prom查詢過(guò)程:

 hadoop框架詳細(xì)分析

圖2-4 Prom的存儲(chǔ)結(jié)構(gòu)

 hadoop框架詳細(xì)分析

圖2-5 Prom查詢過(guò)程

glide的技術(shù)架構(gòu)

 hadoop框架詳細(xì)分析

圖2-6 glider的技術(shù)架構(gòu)

在這一層-查詢層中,主要是基于用中間層隔離前后端的理念而考慮。Glider這個(gè)中間層負(fù)責(zé)各個(gè)異構(gòu)表之間的數(shù)據(jù)JOIN和UNION等計(jì)算,并且負(fù)責(zé)隔離前端產(chǎn)品和后端存儲(chǔ),提供統(tǒng)一的數(shù)據(jù)查詢服務(wù)。

緩存

除了起到隔離前后端以及異構(gòu)“表”之間的數(shù)據(jù)整合的作用之外,glider的另外一個(gè)不容忽視的作用便是緩存管理。我們有一點(diǎn)須了解,在特定的時(shí)間段內(nèi),我們認(rèn)為數(shù)據(jù)產(chǎn)品中的數(shù)據(jù)是只讀的,這是利用緩存來(lái)提高性能的理論基礎(chǔ)。

在上文圖2-6中我們看到,glider中存在兩層緩存,分別是基于各個(gè)異構(gòu)“表”(datasource)的二級(jí)緩存和整合之后基于獨(dú)立請(qǐng)求的一級(jí)緩存。除此之外,各個(gè)異構(gòu)“表”內(nèi)部可能還存在自己的緩存機(jī)制。

 hadoop框架詳細(xì)分析

圖2-7 緩存控制體系

圖2-7向我們展示了數(shù)據(jù)魔方在緩存控制方面的設(shè)計(jì)思路。用戶的請(qǐng)求中一定是帶了緩存控制的“命令”的,這包括URL中的query string,和HTTP頭中的“If-None-Match”信息。并且,這個(gè)緩存控制“命令”一定會(huì)經(jīng)過(guò)層層傳遞,最終傳遞到底層存儲(chǔ)的異構(gòu)“表”模 塊。

緩存系統(tǒng)往往有兩個(gè)問(wèn)題需要面對(duì)和考慮:緩存穿透與失效時(shí)的雪崩效應(yīng)。

緩存穿透是指查詢一個(gè)一定不存在的數(shù)據(jù),由于緩存是不命中時(shí)被動(dòng)寫(xiě)的,并且出于容錯(cuò)考慮,如果從存儲(chǔ)層查不到數(shù)據(jù)則不寫(xiě)入緩存,這將導(dǎo)致這個(gè)不存在的數(shù)據(jù) 每次請(qǐng)求都要到存儲(chǔ)層去查詢,失去了緩存的意義。至于如何有效地解決緩存穿透問(wèn)題,最常見(jiàn)的則是采用布隆過(guò)濾器(這個(gè)東西,在我的此篇文章中有介紹:), 將所有可能存在的數(shù)據(jù)哈希到一個(gè)足夠大的bitmap中,一個(gè)一定不存在的數(shù)據(jù)會(huì)被這個(gè)bitmap攔截掉,從而避免了對(duì)底層存儲(chǔ)系統(tǒng)的查詢壓力。

而在數(shù)據(jù)魔方里,用了一個(gè)更為簡(jiǎn)單粗暴的方法,如果一個(gè)查詢返回的數(shù)據(jù)為空(不管是數(shù)據(jù)不存在,還是系統(tǒng)故障),我們?nèi)匀话堰@個(gè)空結(jié)果進(jìn)行緩存,但它的過(guò)期時(shí)間會(huì)很短,最長(zhǎng)不超過(guò)五分鐘。

2、緩存失效時(shí)的雪崩效應(yīng)盡管對(duì)底層系統(tǒng)的沖擊非??膳?。但遺憾的是,這個(gè)問(wèn)題目前并沒(méi)有很完美的解決方案。大多數(shù)系統(tǒng)設(shè)計(jì)者考慮用加鎖或者隊(duì)列的方式保證緩存的單線程(進(jìn)程)寫(xiě),從而避免失效時(shí)大量的并發(fā)請(qǐng)求落到底層存儲(chǔ)系統(tǒng)上。

在數(shù)據(jù)魔方中,存過(guò)期機(jī)制理論上能夠?qū)⒏鱾€(gè)客戶端的數(shù)據(jù)失效時(shí)間均勻地分布在時(shí)間軸上,一定程度上能夠避免緩存同時(shí)失效帶來(lái)的雪崩效應(yīng)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品视频一区二区秋霞| 日本少妇中文字幕不卡视频 | 日韩aa一区二区三区| 中文字幕在线区中文色| 亚洲最新av在线观看| 午夜精品福利视频观看| 久久国产成人精品国产成人亚洲| 欧美日韩校园春色激情偷拍| 在线观看国产成人av天堂野外| 儿媳妇的诱惑中文字幕| 日本最新不卡免费一区二区| 国产亚洲系列91精品| 欧美日本道一区二区三区| 国产传媒欧美日韩成人精品| 成人免费视频免费观看| 日韩一区欧美二区国产| 亚洲精品中文字幕在线视频| 激情五月综五月综合网| 成人精品一区二区三区在线| 欧美日韩免费观看视频| 亚洲国产av一二三区| 日本东京热加勒比一区二区| 黄色在线免费高清观看| 日本人妻熟女一区二区三区| 蜜桃传媒在线正在播放| 国产成人av在线免播放观看av| 婷婷色网视频在线播放| 蜜桃传媒在线正在播放| 久草视频在线视频在线观看| 国产真人无遮挡免费视频一区| 好吊一区二区三区在线看| 亚洲国产精品久久琪琪| 丰满人妻一二三区av| 中文字幕熟女人妻视频| 国产亚洲欧美自拍中文自拍| 中文字幕人妻一区二区免费| 人人妻在人人看人人澡| 欧美特色特黄一级大黄片| 精品国产亚洲一区二区三区| 一区中文字幕人妻少妇| 色丁香一区二区黑人巨大|