真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Hadoop入門

MapReduce&HDFS簡介

公司主營業(yè)務(wù):網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出海原免費(fèi)做網(wǎng)站回饋大家。

一、Hadoop簡介:

結(jié)構(gòu)化數(shù)據(jù):表,關(guān)系型數(shù)據(jù)庫//有嚴(yán)格的約束

半結(jié)構(gòu)化數(shù)據(jù):html,json,yaml,有元數(shù)據(jù)// 有約束,缺少嚴(yán)格的約束

非結(jié)構(gòu)化數(shù)據(jù):沒有預(yù)定義的模型,元數(shù)據(jù) //日志數(shù)據(jù)等

搜索引擎:搜索組件、索引組件

    網(wǎng)絡(luò)爬蟲:爬到的內(nèi)容多為半結(jié)構(gòu)化或者非結(jié)構(gòu)化數(shù)據(jù)

    構(gòu)建倒排索引[基于精確搜索或模糊搜索基于相關(guān)度匹配]存儲到存儲系統(tǒng)[非RDBMS]中。

2003年:The Google File System//google如何實(shí)現(xiàn)文件存儲,不支持對數(shù)據(jù)進(jìn)行隨機(jī)和實(shí)時(shí)訪問,僅適用于存儲少量的體積巨大的文件。

假如爬到html頁面發(fā)生了改變,需要修改。則goole fs無法滿足該需求

2004年:MapReduce: simplified Data Precessing On Large Cluster//MapReduce編程模型,一個(gè)任務(wù)分布在各個(gè)節(jié)點(diǎn)上運(yùn)行,后收集結(jié)果

2006年:BigTable: A Distributed Storage System for Structure Data //存儲結(jié)構(gòu)化數(shù)據(jù)的分布式存儲

GFS->山寨后HDFS:

MapReduce->MapReduce:

BigTable->HBase:

HDFS + MapReduce = Hadoop //作者兒子的一個(gè)玩具

HBase:hadoop 的database 

Nutch:一個(gè)網(wǎng)絡(luò)爬蟲程序,為Lucene爬取數(shù)據(jù)

Hadoop的一個(gè)缺陷:MapReduce是批處理程序,

HDFS采用的是有中心節(jié)點(diǎn)的存儲格式

 client

|

元數(shù)據(jù)節(jié)點(diǎn)

|

===========================

node1  node2  node3  node n

1 1‘ 22’

        數(shù)據(jù)查詢過程:client->元數(shù)據(jù)節(jié)點(diǎn)[數(shù)據(jù)分布在哪些節(jié)點(diǎn)上]-->[node 1,2,3,,n]-->client  用戶查詢[寫代碼]-->先調(diào)用MapReduce的開發(fā)框架-->交由該框架運(yùn)行

Map:該代碼需要分別運(yùn)行在node1和node2上,各節(jié)點(diǎn)分別處理自己所用的那一部分

            //node1擁有1,node2擁有2

Reduce:最后要把node1和node2上的運(yùn)行結(jié)果進(jìn)行合并

最終速度:取決于速度最慢的 node

MapReduce:

1.開發(fā)API

2.運(yùn)行框架

3.提供運(yùn)行時(shí)環(huán)境

NAS和SAN的缺點(diǎn):存儲系統(tǒng)只有1個(gè),面對海量數(shù)據(jù),需要進(jìn)行數(shù)據(jù)存取,磁盤IO和網(wǎng)絡(luò)IO將面臨極大挑戰(zhàn)

因此出現(xiàn)了分布式存儲

二、HDFS和MapReduce

1.無中心節(jié)點(diǎn) 

2.有中心節(jié)點(diǎn)HDFS //元數(shù)據(jù)節(jié)點(diǎn)是瓶頸和核心所在。//GFS,HDFS,

    元數(shù)據(jù)節(jié)點(diǎn):NN: name node //HA,內(nèi)存數(shù)據(jù)持久化。他的數(shù)據(jù)都是存儲在內(nèi)存中的

    //事務(wù)日志,寫入到持久存儲后,宕機(jī)后,重新加載,減少丟失的數(shù)據(jù)。

    后端主機(jī)要保證:服務(wù)可用+數(shù)據(jù)可用 //DN:data node 

    在宕機(jī)后回可能需要文件系統(tǒng)檢測,數(shù)據(jù)量過大時(shí),需要浪費(fèi)大量時(shí)間。

    //簡單的說:一旦NN崩潰,再次啟動需要半個(gè)小時(shí),因?yàn)閔adoop 1.X NN不支持HA

        SNN:second namenode后期提供,

NN需要在內(nèi)存中不斷更新數(shù)據(jù),寫入日志,日志和映像文件合并等

SNN:負(fù)責(zé)合并數(shù)據(jù),假如NN崩潰SNN加載共享存儲的文件,自己工作。

    節(jié)省了時(shí)間,但是文件系統(tǒng)檢測需要的時(shí)間,依然沒有少。只是不用立即修復(fù)NN

LB:對不同的請求,分發(fā)到不同的主機(jī)

 client

|

NN--SNN

|

[鏡像][SHM]

|

===========================

node1  node2  node3  node n

1 1‘ 22’

HDFS 2.0之后的NN可以高可用

元數(shù)據(jù)不再存放到本地存儲,而是存儲到一個(gè)共享存儲存放,基于內(nèi)存完成元數(shù)據(jù)存放。

例如:NFS[腦裂]不常用,ZooKeeper

NN1和NN2的更新 操作都向ZooKeeper同步,因此每一個(gè)節(jié)點(diǎn)都可以從ZooKeeper獲取同樣的數(shù)據(jù)。

//zookeeper:分布式協(xié)調(diào)工具(分布式鎖),google的Chubby(不開源)

http://www.cnblogs.com/wuxl360/p/5817471.html //參考網(wǎng)站

數(shù)據(jù)節(jié)點(diǎn):存放各個(gè)chunk的

每個(gè)數(shù)據(jù)存儲副本:存儲到其他節(jié)點(diǎn)。默認(rèn)存儲3個(gè)副本。

存儲的時(shí)候,之存儲一個(gè),由HDFS另找兩個(gè)節(jié)點(diǎn)進(jìn)行存儲。

每一個(gè)存儲node會向服務(wù)node周期報(bào)告自己所存儲 的數(shù)據(jù)塊信息+自身狀態(tài)信息。

NN有兩個(gè)表:

1.以數(shù)據(jù)為中心,分布在哪些節(jié)點(diǎn)上

2.以節(jié)點(diǎn)為核心,持有哪些數(shù)據(jù)塊

數(shù)據(jù)如何處理://運(yùn)行程序的集群

MapReduce:集群方式工作。

Map:分散運(yùn)行

Reduce:合并

一個(gè)任務(wù)可以分為幾個(gè)Map,由MapReduce的框架進(jìn)行控制的。

需要一個(gè)總的節(jié)點(diǎn),進(jìn)行調(diào)度JobTracker

理想情況:讓擁有請求數(shù)據(jù)的node都運(yùn)行任務(wù) //但是有的node可能已經(jīng)很忙了

假如擁有數(shù)據(jù)的node繁忙解決方案:

1.等待

2.找副本所在節(jié)點(diǎn) //可能副本節(jié)點(diǎn)也比較忙

3.找一個(gè)空閑的節(jié)點(diǎn),運(yùn)行任務(wù)。//可能需要復(fù)制副本到該空閑node

對于HDFS來說

Hadoop和MapReduce共用的數(shù)據(jù)節(jié)點(diǎn)

client

    |

JobTracker

    |

===========================

node1  node2  node3  node n

11'    2     2'

//只是這些節(jié)點(diǎn),不再叫做Data Node而稱為Task Tracker,

這些node需要運(yùn)行兩類進(jìn)程:DataNode /Task Tracker  //負(fù)責(zé)數(shù)據(jù)的存儲和處理

因此一個(gè)Hadoop就是兩類集群的結(jié)合:存儲數(shù)據(jù)和處理數(shù)據(jù)使用的是同一個(gè)類節(jié)點(diǎn)

三、數(shù)據(jù)處理模型

程序運(yùn)行node把數(shù)據(jù)加載到程序所在node 進(jìn)行運(yùn)行 //數(shù)據(jù)向程序靠攏

Hadoop以數(shù)據(jù)為中心,讓程序到數(shù)據(jù)所在節(jié)點(diǎn)上運(yùn)行 //程序向數(shù)據(jù)靠攏

JobTracker和Name node的工作是不沖突的,因此可以部署在同一個(gè)節(jié)點(diǎn)上

[JobTracker/NameNode]

||

=====================================================================

taskTracker/DataNode1 taskTracker/DataNode2 taskTracker/DataNode3 ...

每個(gè)人提交的任務(wù),不一定是運(yùn)行在所有節(jié)點(diǎn)上的,很有可能是運(yùn)行在幾個(gè)節(jié)點(diǎn)上的

可以限制一個(gè)node最多可以運(yùn)行多少個(gè)任務(wù)。

四、函數(shù)式編程:

Lisp:ML函數(shù)式編程語言:高階函數(shù);

map,fold

map:把一個(gè)任務(wù)映射為多個(gè)任務(wù)

fold:折疊

示例:map(f()} //map將把f函數(shù)運(yùn)行為多份,分別運(yùn)行在多個(gè)節(jié)點(diǎn)上。

map:接受一個(gè)函數(shù)為參數(shù),并將其應(yīng)用于列表中的所有元素;

示例列表為:1,2,3,4,5

要獲取每個(gè)人age,分別在1,2,3,4,5上執(zhí)行

例如map后的結(jié)果為:22,33,44,12,34

fold:接受兩個(gè)參數(shù) 1:函數(shù),2:初始值

fold(g(),init) //

把第一個(gè)的處理結(jié)果替換為init,然后使用g()和第一個(gè)的處理結(jié)果處理第二個(gè)數(shù)據(jù),依次輪推

示例:22,33,44,12,34 // fold(g(1),init)=>foldg(g(2) 22)=>fold(g(g3),33),...

最后找出最大者。

MapReduce: //任何一個(gè)程序調(diào)用該APi之后,被分成兩段

mapper:在task tracker上運(yùn)行的一個(gè)實(shí)例,最后生成一個(gè)結(jié)果列表

reducer:從mapper得到的多個(gè)結(jié)果中

統(tǒng)計(jì)一本書中每個(gè)單詞出現(xiàn)的次數(shù):

mapper:每100頁一個(gè)單位,5個(gè)mapper用于拆分成為單詞;進(jìn)行計(jì)數(shù)

例如拆成了10000個(gè)單詞,其中不乏有重復(fù)的

mapper需要保證重復(fù)的單詞發(fā)送給同一個(gè)reducer

稱為:shuffle and sort //傳輸排序的過程

reducer

reducer1,reducer2//啟動了兩個(gè)reducer,mapper輪流發(fā)送給reducer1和2,重復(fù)的發(fā)送給同一個(gè)reducer,保證每個(gè)reducre統(tǒng)計(jì)的單詞是不一樣的

最后合并

reducer1: 

this:500

is:10

reducer2:

how: 30

do: 20

兩者合并以后成為結(jié)果

MapReducer統(tǒng)計(jì)的對象數(shù)據(jù)都是key-value數(shù)據(jù),不是kv數(shù)據(jù)需要先轉(zhuǎn)換為kv數(shù)據(jù)

mapper://轉(zhuǎn)換為kv數(shù)據(jù)

this 1,is 1, this 1,how 1 //出現(xiàn)一次標(biāo)記為1

同一個(gè)鍵的數(shù)據(jù)只能發(fā)往同一個(gè)reducer

reducer: //也是kv數(shù)據(jù)

例如把this 對應(yīng)的所有value相加

this:500

is:20 

mapper-reducer可能需要執(zhí)行多次,才能達(dá)到結(jié)果,只是每次的目標(biāo)不同而已。

也可以直接在mapper上統(tǒng)計(jì)本地的數(shù)據(jù),再發(fā)送給reducer的時(shí)候

this:500

is:20 

//reducer可以和mapper一起啟動,或者reducer在mapper之后運(yùn)行

相同的key發(fā)送給同一個(gè)reducer:誰來保證

由mapper reducer的框架決定的,//啟動幾個(gè)reducer是由程序員定義的

MapReduce:

1.開發(fā)API

2.運(yùn)行框架

3.提供運(yùn)行時(shí)環(huán)境

Hadoop能夠?qū)崿F(xiàn)并行處理,

HDFS + MapReduce = Hadoop 

         調(diào)用MapReduce API的程序

            |

[NameNode] [JobTracker]

    || ||

=====================================================================

taskTracker/DataNode1 taskTracker/DataNode2 taskTracker/DataNode3 ...

Hadoop典型應(yīng)用有:搜索、日志處理、推薦系統(tǒng)、數(shù)據(jù)分析、視頻圖像分析、數(shù)據(jù)保存等

圖1:MapReduce框架

Hadoop入門

五、MapReduce工作模型

MapReduce:工作模型

==================================================================================

[k1|m][k2|n][k3|r][k4|s][k5|m] [k6|t][k7|m]

   \/|    \/     \      /

 [mapper][mapper]  [mapper]     [mapper]

    |         |       |      |

    V         V       V      V

[ik1|3] [ik3|1]  [ik1|6] [ik3|2]   [ik1|1] [ik1|4]  [ik2|3] [ik2|6]

【partitioner】  【partitioner】【partitioner】  【partitioner】

+++++++++++++++++++++++++++++++++++++++++++++++++

//Shuffle & sort. aggressive values by keys //

++++++++++++++++++++++++++++++++++++++++++++++++

[ik1|3,6,1,4] [ik2|3,6] [ik3|1,2]

|                     |     |

V             V     V

    reducer reducer reducer

|     |     |

V     V     V

    [ok1|14] [ok2|9] [ok3|3]

====================================================================================

//mapper:讀取鍵值對,生成鍵值對

//combiner:負(fù)責(zé)在mapper之后,在mapper上把相同的鍵進(jìn)行合并,僅此而已,輸入和輸出的鍵必須一致。

//partitioner:負(fù)責(zé)分發(fā)同一個(gè)key到同一個(gè)reducer,所有的partioner都是一樣的

生成的鍵值如何進(jìn)行發(fā)送,由partitioner決定。

==================================================================================

[k1|m][k2|n][k3|r]      [k4|s]   [k5|m]     [k6|t][k7|m]

    \/  |         \     /       \ /

 [mapper][mapper][mapper] [mapper]

|           |     |                       |

V     V     V     V

    [ik1|3] [ik3|1][ik1|6] [ik3|2]   [ik1|1] [ik1|4]  [ik2|3] [ik2|6]

    【combiner】【combiner】 【combiner】  【combiner】

|    |     |      |

V    V     V      V

[ik1:3][ik3:1]   [ik1:6][ik3:2] [ik1:5]  [ik2:9]

【partitioner】  【partitioner】【partitioner】  【partitioner】

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//Shuffle & sort. aggressive values by keys //

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

[ik1|3,6,1,4] [ik2|3,6] [ik3|1,2]

|     |     |

V     V     V

    reducer reducer reducer

|             |     |

V     V     V

[ok1|14] [ok2|9] [ok3|3]

====================================================================================

//combiner和partitioner都是由程序員寫的

Maper啟動的節(jié)點(diǎn):可能沒有一個(gè)目標(biāo)分片,但是需要處理n個(gè)分片,需要從其他node復(fù)制分片到該節(jié)點(diǎn)執(zhí)行Maper程序


當(dāng)前文章:Hadoop入門
URL鏈接:http://weahome.cn/article/gihdgs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部