Hadoop随笔(一)
文章目錄
- 1 大數(shù)據(jù)概述
- 1.1 什么是大數(shù)據(jù)
- 1.2 大數(shù)據(jù)技術(shù)背后的核心思想
- 1.2.1 把數(shù)據(jù)分發(fā)到多個(gè)節(jié)點(diǎn)
- 1.2.2 把計(jì)算邏輯移到數(shù)據(jù)附近
- 1.2.3 計(jì)算節(jié)點(diǎn)進(jìn)行本地?cái)?shù)據(jù)處理
- 1.2.4 優(yōu)選順序讀,次之隨機(jī)讀
- 1.2.5 例子
- 1.3 大數(shù)據(jù)的編程模型
- 1.3.1 大規(guī)模并行處理數(shù)據(jù)庫系統(tǒng)
- 1.3.2 內(nèi)存數(shù)據(jù)庫系統(tǒng)
- 1.3.3 MapReduce系統(tǒng)
- 1.3.4 整體同步并行系統(tǒng)
- 1.4 大數(shù)據(jù)和事務(wù)性系統(tǒng)
- 1.5 我們能處理多大的數(shù)據(jù)
1 大數(shù)據(jù)概述
由于數(shù)據(jù)處理增長的速度已經(jīng)快于計(jì)算資源處理能力的提升速度,為了解決這種矛盾,數(shù)據(jù)的并行處理出現(xiàn)了。Hadoop就是利用互聯(lián)網(wǎng)的多臺(tái)計(jì)算機(jī)使用MapReduce(采用SIMD)來并行地處理大量數(shù)據(jù)。
1.1 什么是大數(shù)據(jù)
現(xiàn)代社會(huì)是一個(gè)高速發(fā)展的社會(huì),而大數(shù)據(jù)就是這個(gè)高科技社會(huì)的產(chǎn)物。對(duì)于大數(shù)據(jù)來說,麥肯錫全球研究所給出的定義是,一種規(guī)模大道在獲取、管理、分析方面大大超出傳統(tǒng)數(shù)據(jù)庫軟件工具能力范圍的數(shù)據(jù)集合,具有海量的數(shù)據(jù)規(guī)模、快速的數(shù)據(jù)流轉(zhuǎn)、多樣的數(shù)據(jù)類型和價(jià)值密度低四大特征。
正如前面所說,大數(shù)據(jù)迫切地需要一些特殊的技術(shù)來有效地應(yīng)對(duì)數(shù)據(jù)的增長,而大規(guī)模并行處理數(shù)據(jù)庫、數(shù)據(jù)挖掘、分布式文件系統(tǒng)、分布式數(shù)據(jù)庫、云計(jì)算平臺(tái)、互聯(lián)網(wǎng)和可擴(kuò)展的存儲(chǔ)系統(tǒng)等就是我們手中處理這群數(shù)據(jù)的工具。
整體來看,目前國內(nèi)大數(shù)據(jù)應(yīng)用尚處于從熱點(diǎn)行業(yè)領(lǐng)域向傳統(tǒng)領(lǐng)域滲透的階段。也就是說,小公司產(chǎn)生的數(shù)據(jù)不高,而且對(duì)于原始數(shù)據(jù)的處理能力不強(qiáng),而需要大數(shù)據(jù)技術(shù)的往往都是一些比較大的公司。目前大數(shù)據(jù)的典型應(yīng)用由以下幾個(gè)方面:
運(yùn)營商業(yè)務(wù)
運(yùn)營商掌握體量巨大的數(shù)據(jù)資源,可以提升洞察力,借助大數(shù)據(jù)分析運(yùn)營的內(nèi)在問題,改善服務(wù)水平,為客戶提供更好地體驗(yàn),獲得更多的客戶以及更高的業(yè)務(wù)增長。
金融業(yè)務(wù)
金融行業(yè)是信息產(chǎn)業(yè)之外大數(shù)據(jù)的又一重要應(yīng)用領(lǐng)域,大數(shù)據(jù)在金融的銀行、保險(xiǎn)和證券三大業(yè)務(wù)中都有著廣泛的應(yīng)用前景。
政府業(yè)務(wù)
大數(shù)據(jù)政府應(yīng)用不僅在世界各國政府日益重視,我國政府也非常重視大數(shù)據(jù)的應(yīng)用。
還有其他繁多的領(lǐng)域,這里就不做過多介紹了。如有興趣,可以參考教材大數(shù)據(jù)Hadoop 3.X分布式處理實(shí)戰(zhàn)。
1.2 大數(shù)據(jù)技術(shù)背后的核心思想
我們的核心問題是:雖然通過并行可以很快地處理數(shù)據(jù);但是從持久性的存儲(chǔ)設(shè)備中讀取的速度受到限制。這也說明了我們?nèi)绻獙?duì)大數(shù)據(jù)進(jìn)行處理,那么是I/O并行化是必不可少的。
1.2.1 把數(shù)據(jù)分發(fā)到多個(gè)節(jié)點(diǎn)
我們首先要做的是,把一個(gè)大數(shù)據(jù)分布到多個(gè)計(jì)算節(jié)點(diǎn),這些計(jì)算節(jié)點(diǎn)可以是電腦可以是服務(wù)器,這么做是有以下好處的:
- 每個(gè)數(shù)據(jù)塊會(huì)在多個(gè)節(jié)點(diǎn)上有多份拷貝(Hadoop默認(rèn)是一個(gè)數(shù)據(jù)塊有3份拷貝),這使得系統(tǒng)具備容錯(cuò)性,每一個(gè)節(jié)點(diǎn)發(fā)生故障,其他節(jié)點(diǎn)還備份有故障節(jié)點(diǎn)上的數(shù)據(jù)。
- 多個(gè)節(jié)點(diǎn)可以同時(shí)參與數(shù)據(jù)處理過程。這樣的話能夠使處理效率翻倍。
1.2.2 把計(jì)算邏輯移到數(shù)據(jù)附近
對(duì)于熟悉JavaEE的人來說,MVC架構(gòu)是最常見的一種。從大數(shù)據(jù)的概念來看,應(yīng)該要把數(shù)據(jù)分布在各個(gè)計(jì)算節(jié)點(diǎn)后,對(duì)應(yīng)的程序也應(yīng)該分布在各個(gè)節(jié)點(diǎn),可是這樣做不易維護(hù);對(duì)此,我們應(yīng)該要有一個(gè)系統(tǒng),其能夠讓我們集中式地部署程序代碼,部署后啟動(dòng)計(jì)算任務(wù),最后程序才會(huì)移動(dòng)到各個(gè)數(shù)據(jù)處理節(jié)點(diǎn)。
1.2.3 計(jì)算節(jié)點(diǎn)進(jìn)行本地?cái)?shù)據(jù)處理
所有的大數(shù)據(jù)編程模型都是基于分布式和并行處理的。但是由于網(wǎng)絡(luò)I/O比本地磁盤I/O慢了好幾個(gè)數(shù)量級(jí),我們要做的最好是每個(gè)節(jié)點(diǎn)處理本地?cái)?shù)據(jù)即可。在每個(gè)節(jié)點(diǎn)中,數(shù)據(jù)有了,程序有了,計(jì)算的條件也就完備了。
盡管想的很美,但這并不是每次都能剛好遇上這么巧的任務(wù),恰好能夠讓本地的數(shù)據(jù)剛好能夠完成。所以對(duì)于大數(shù)據(jù)系統(tǒng)來說,其都會(huì)把計(jì)算任務(wù)盡量調(diào)度到離數(shù)據(jù)最近的節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)計(jì)算結(jié)果出來后,就會(huì)把所有的計(jì)算結(jié)構(gòu)匯聚到一個(gè)計(jì)算節(jié)點(diǎn)。
1.2.4 優(yōu)選順序讀,次之隨機(jī)讀
數(shù)據(jù)在磁盤的讀取過程是:磁盤頭首先要移到數(shù)據(jù)所在的磁盤位置(尋道),移到后將數(shù)據(jù)讀取出來,這個(gè)過程叫做數(shù)據(jù)的傳輸操作。對(duì)于熟悉計(jì)算機(jī)組成原理的同學(xué)來說,都知道讀寫磁盤最重要的就是減少磁頭臂的移動(dòng),盡量使數(shù)據(jù)的存放在同一個(gè)磁盤片上。
既然數(shù)據(jù)是散亂的,就意味著不能在磁盤中過濾數(shù)據(jù),因?yàn)樵诖疟P上過濾就等于是磁盤頭一個(gè)一個(gè)數(shù)據(jù)確認(rèn)是不是自己要的,然后不是自己要的就算過濾,這樣的話會(huì)花很多時(shí)間。
大多數(shù)的數(shù)據(jù)讀取密集型的大數(shù)據(jù)編程模型都利用了這個(gè)特征。數(shù)據(jù)被順序地從磁盤上讀出,然后在內(nèi)存中過濾數(shù)據(jù)。而對(duì)于關(guān)系型數(shù)據(jù)庫管理系統(tǒng)模型來說,其往往是隨機(jī)讀寫數(shù)據(jù)為主。
1.2.5 例子
假設(shè)我們要計(jì)算2000年美國各州的總銷售量,并按州排序。銷售數(shù)據(jù)已經(jīng)隨機(jī)分發(fā)到各個(gè)計(jì)算節(jié)點(diǎn)。按照大數(shù)據(jù)計(jì)算技術(shù)的計(jì)算步驟:
- 每個(gè)計(jì)算節(jié)點(diǎn)應(yīng)該讀取分發(fā)給自己的全部數(shù)據(jù),然后過濾掉不是2000年的銷售數(shù)據(jù)。
- 各個(gè)計(jì)算節(jié)點(diǎn)在處理數(shù)據(jù)的時(shí)候,每發(fā)現(xiàn)一個(gè)州,就要建立一個(gè)新分組,用于存放該州所有銷售數(shù)據(jù)。在處理的過程中,程序是位于各個(gè)計(jì)算節(jié)點(diǎn)的,對(duì)本地的數(shù)據(jù)做處理。
- 當(dāng)所有的節(jié)點(diǎn)都完成了本地所有數(shù)據(jù)的磁盤讀取工作,按照州編號(hào)分別計(jì)算其銷售總額,它們都會(huì)把所有的結(jié)果匯聚到匯聚節(jié)點(diǎn)上。
- 這個(gè)指定的匯聚節(jié)點(diǎn)會(huì)把所有計(jì)算節(jié)點(diǎn)按照州的編號(hào)匯聚全部結(jié)果,把各個(gè)州的來自不同計(jì)算節(jié)點(diǎn)的數(shù)據(jù)分別相加。
- 匯聚節(jié)點(diǎn)按照州的最終結(jié)果排序,并輸出排序結(jié)果。
1.3 大數(shù)據(jù)的編程模型
大數(shù)據(jù)編程模型主要有以下幾種類型:
- 大規(guī)模并行處理數(shù)據(jù)庫系統(tǒng)
- 內(nèi)存數(shù)據(jù)庫系統(tǒng)
- MapReduce系統(tǒng)
- 整體同步并行系統(tǒng)
1.3.1 大規(guī)模并行處理數(shù)據(jù)庫系統(tǒng)
大規(guī)模并行處理(MMP)數(shù)據(jù)庫系統(tǒng)的核心思想是把數(shù)據(jù)按照某一列或者某一組列的值,按照某種形式進(jìn)行劃分,以分別處理。但是這樣做的缺陷是,要用算法去劃分?jǐn)?shù)據(jù),還要?jiǎng)澐值暮侠?#xff0c;如果劃分不合理查詢不方便,為了得到計(jì)算結(jié)果需要通過網(wǎng)絡(luò)來實(shí)現(xiàn)數(shù)據(jù)交換。
為了解決這個(gè)缺陷,大規(guī)模并行處理數(shù)據(jù)庫系統(tǒng)經(jīng)常采用把數(shù)據(jù)存儲(chǔ)多份,并且按照不同準(zhǔn)則來劃分。比如你現(xiàn)在要查詢這個(gè)結(jié)果,結(jié)果這個(gè)結(jié)點(diǎn)數(shù)據(jù)劃分不合理,那我就換另外一個(gè)劃分準(zhǔn)則劃分出來的數(shù)據(jù)。根據(jù)不同的查詢請(qǐng)求,選擇不同的數(shù)據(jù)集。
1.3.2 內(nèi)存數(shù)據(jù)庫系統(tǒng)
從系統(tǒng)運(yùn)行的角度來看,內(nèi)存數(shù)據(jù)庫系統(tǒng)類似于MMP數(shù)據(jù)庫系統(tǒng)。根據(jù)1.2.5的例子,可以說出主要幾個(gè)要點(diǎn)特征:
數(shù)據(jù)按州劃分,每個(gè)節(jié)點(diǎn)把數(shù)據(jù)加載到內(nèi)存中。
每個(gè)計(jì)算節(jié)點(diǎn)讀取本地?cái)?shù)據(jù)。
由于數(shù)據(jù)是被緩存到內(nèi)存的,所以除了最初的數(shù)據(jù)加載入內(nèi)存的過程外,這里不適用順序讀取數(shù)據(jù)的特性。
1.3.3 MapReduce系統(tǒng)
MapReduce是我們要講的重點(diǎn)。其有如下的特征:
- 使用商用級(jí)別的硬件。
- 無需事先定義數(shù)據(jù)劃分準(zhǔn)則來吧數(shù)據(jù)分配到各個(gè)計(jì)算節(jié)點(diǎn),用戶僅需要定義兩個(gè)獨(dú)立的處理過程:Map和Reduce。
當(dāng)Hadoop系統(tǒng)實(shí)現(xiàn)MapReduce時(shí),數(shù)據(jù)常常按照64~128MB的數(shù)據(jù)塊大小進(jìn)行分發(fā),每個(gè)數(shù)據(jù)塊會(huì)被復(fù)制兩次,然后加載到Hadoop分布式文件系統(tǒng)。MapReduce程序啟動(dòng)的時(shí)候,Hadoop系統(tǒng)會(huì)把程序運(yùn)行依賴庫拷貝到各個(gè)計(jì)算節(jié)點(diǎn)。
各個(gè)計(jì)算節(jié)點(diǎn)按照調(diào)度執(zhí)行Map任務(wù),每個(gè)節(jié)點(diǎn)上的Mapper會(huì)根據(jù)輸入的記錄,輸出一條條包含鍵值對(duì)的數(shù)據(jù)記錄。然后Reducer會(huì)從每個(gè)Mapper的輸出中獲取鍵/值對(duì),各個(gè)鍵會(huì)被發(fā)送到特定的Reducer進(jìn)行處理,確保相同的鍵被相同的Reducer處理。每個(gè)Reducer把接收的鍵值對(duì)中的數(shù)值相加。輸出結(jié)果寫回HDFS中。客戶端再從HDFS讀取結(jié)果數(shù)據(jù),對(duì)結(jié)果數(shù)據(jù)做最后處理。
經(jīng)過上面的敘述,我們可以分析出MapReduce有以下的特征:
- 數(shù)據(jù)以較大的數(shù)據(jù)塊的形式存放在HDFS上。HDFS是一個(gè)分布式文件系統(tǒng),數(shù)據(jù)塊分散存儲(chǔ)到各個(gè)結(jié)點(diǎn),數(shù)據(jù)庫是有冗余的。
- 程序運(yùn)行依賴庫,包括Map和Reduce代碼被復(fù)制發(fā)送到所有的任務(wù)節(jié)點(diǎn)。
- 每個(gè)計(jì)算節(jié)點(diǎn)僅讀取節(jié)點(diǎn)本地?cái)?shù)據(jù),集群中所有節(jié)點(diǎn)運(yùn)行Mapper,從節(jié)點(diǎn)本地讀取數(shù)據(jù)到Mapper中。
- 數(shù)據(jù)被每個(gè)節(jié)點(diǎn)的任務(wù)以數(shù)據(jù)塊的方式一次性順序讀取。
1.3.4 整體同步并行系統(tǒng)
整體同步并行(BSP)系統(tǒng)的運(yùn)行過程和MapReduce過程非常相似。我們?cè)诤竺鏁?huì)細(xì)講,這里不過多講述。
1.4 大數(shù)據(jù)和事務(wù)性系統(tǒng)
在Hadoop中,通常使用HBase來作為自己的NoSQL數(shù)據(jù)存儲(chǔ)。
對(duì)于普通的RDBMS來說,遵守ACID準(zhǔn)則是非常重要的,但是有時(shí)候也必須做出妥協(xié),其理論依據(jù)就是CAP理論,即:
- Consistency(一致性):在分布式系統(tǒng)中的所有數(shù)據(jù)備份,在同一時(shí)刻有同樣的值。
- Availability(可用性):在合理且明確的時(shí)間內(nèi),保證每個(gè)請(qǐng)求都能獲得成功或者失敗的結(jié)果的響應(yīng)。
- Partition tolerance(分區(qū)容忍性):在集群中一部分節(jié)點(diǎn)故障后,集群整體仍然可以使用。
需要注意的是,分布式系統(tǒng)只能滿足上述三中其二。
對(duì)于一致性和可用性:遵守ACID準(zhǔn)則的單機(jī)RDBMS是兼顧一致性和可用性的系統(tǒng)例子,但是其不滿足分區(qū)容忍性。
對(duì)于一致性和分區(qū)容忍性:一個(gè)RDBMS集群就是這樣的系統(tǒng)。分布式事務(wù)保證了所有用戶在同一時(shí)刻獲取到相同的數(shù)據(jù),也可以保證某個(gè)節(jié)點(diǎn)宕機(jī)了還能使用其他節(jié)點(diǎn)。但是其是不滿足可用性的,因?yàn)樵趦呻A段提交事務(wù)期間,系統(tǒng)是不可用的,這是為了保證系統(tǒng)的一致性。也就是說,一致性限制了可用性。
對(duì)于可用性和分區(qū)容忍性:本類別的系統(tǒng)常常被歸屬于最終一致性系統(tǒng)。為了系統(tǒng)可用性和分區(qū)容忍性犧牲了一致性。
對(duì)于分布式系統(tǒng),對(duì)于上述三種選二如何折中是非常關(guān)鍵的。MapReduce只是Hadoop生態(tài)下的一個(gè)組件,其常常和其他的組件一起搭配使用。
1.5 我們能處理多大的數(shù)據(jù)
對(duì)于前面我們忽略了CPU的處理而討論了IO設(shè)備的問題,但是隨著現(xiàn)代科技計(jì)算量的提高,各種情況皆需考慮其中。如果是計(jì)算密集型的數(shù)據(jù),我們可以采用增加節(jié)點(diǎn)數(shù)量來提高處理器性能。
我們還忽略了網(wǎng)絡(luò)I/O開銷,對(duì)于各個(gè)節(jié)點(diǎn)計(jì)算后傳入?yún)R聚節(jié)點(diǎn),其在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)通信開銷也是非常大的。
總結(jié)
以上是生活随笔為你收集整理的Hadoop随笔(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蛋白质结构域的概念_Chapter1 蛋
- 下一篇: schoolcms - 学习笔记