一些概念

【什么是大數(shù)據(jù)嫩实、大數(shù)據(jù)技術(shù)】

大數(shù)據(jù)刽辙,又稱(chēng)巨量資料,指的是所涉及的數(shù)據(jù)資料量規(guī)模巨大到無(wú)法在合理時(shí)間內(nèi)通過(guò)傳統(tǒng)的應(yīng)用軟件工具進(jìn)行抓取甲献、收集宰缤、管理、分析處理晃洒。簡(jiǎn)單來(lái)說(shuō)慨灭,大數(shù)據(jù)就是海量數(shù)據(jù)的高效處理
大數(shù)據(jù)技術(shù),從本質(zhì)上講是從類(lèi)型各異球及、內(nèi)容龐大的數(shù)據(jù)中快速獲得有價(jià)值信息的技術(shù)氧骤。目前,隨著大數(shù)據(jù)領(lǐng)域被廣泛關(guān)注吃引,大量新的技術(shù)已經(jīng)開(kāi)始涌現(xiàn)出來(lái)筹陵,而這些技術(shù)將成為大數(shù)據(jù)采集、存儲(chǔ)镊尺、分析朦佩、表現(xiàn)的重要工具。
大數(shù)據(jù)處理的關(guān)鍵技術(shù)主要包括:數(shù)據(jù)采集鹅心、數(shù)據(jù)預(yù)處理(數(shù)據(jù)清理吕粗、數(shù)據(jù)集成、數(shù)據(jù)變換等)旭愧、大數(shù)據(jù)存儲(chǔ)颅筋、數(shù)據(jù)分析和挖掘、數(shù)據(jù)的呈現(xiàn)與應(yīng)用(數(shù)據(jù)可視化输枯、數(shù)據(jù)安全與隱私等)议泵。

【大數(shù)據(jù)的4V特征(Volume、Variety桃熄、Value先口、Velocity)】

1、數(shù)據(jù)體量巨大(Volume)瞳收。包括采集碉京、存儲(chǔ)和計(jì)算的量都非常大。大數(shù)據(jù)的起始計(jì)量單位至少是P(1000個(gè)T)螟深、E(100萬(wàn)個(gè)T)或Z(10億個(gè)T)谐宙。
2、數(shù)據(jù)類(lèi)型繁多(Variety)界弧。這種類(lèi)型的多樣性也讓數(shù)據(jù)被分為結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)凡蜻。相對(duì)于以往便于存儲(chǔ)的以文本為主的結(jié)構(gòu)化數(shù)據(jù)搭综,非結(jié)構(gòu)化數(shù)據(jù)越來(lái)越多,包括網(wǎng)絡(luò)日志划栓、音頻兑巾、視頻、圖片忠荞、地理位置信息等蒋歌,這些多類(lèi)型的數(shù)據(jù)對(duì)數(shù)據(jù)的處理能力提出了更高要求。
3钻洒、價(jià)值密度低(Value)奋姿。價(jià)值密度的高低與數(shù)據(jù)總量的大小成反比。以視頻為例素标,一部1小時(shí)的視頻称诗,在連續(xù)不間斷的監(jiān)控中,有用數(shù)據(jù)可能僅有一二秒头遭。如何通過(guò)強(qiáng)大的機(jī)器算法更迅速地完成數(shù)據(jù)的價(jià)值“提純”成為目前大數(shù)據(jù)背景下亟待解決的難題寓免。
4、處理速度快(Velocity)计维。數(shù)據(jù)增長(zhǎng)速度快袜香,處理速度也快,時(shí)效性要求高鲫惶。比如搜索引擎要求幾分鐘前的新聞能夠被用戶(hù)查詢(xún)到蜈首,個(gè)性化推薦算法盡可能要求實(shí)時(shí)完成推薦。這是大數(shù)據(jù)區(qū)別于傳統(tǒng)數(shù)據(jù)挖掘的顯著特征欠母。

【什么是云計(jì)算】

云計(jì)算(Cloud Computing)是分布式計(jì)算(Distributed Computing)欢策、并行計(jì)算(Parallel Computing)、效用計(jì)算(Utility Computing)赏淌、 網(wǎng)絡(luò)存儲(chǔ)(Network Storage Technologies)踩寇、虛擬化(Virtualization)、負(fù)載均衡(Load Balance)六水、熱備冗余(High Available)等傳統(tǒng)計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)發(fā)展融合的產(chǎn)物俺孙。
云計(jì)算中的“云”是指通過(guò) Internet(“云”)交付計(jì)算服務(wù)器、存儲(chǔ)和帶寬資源等服務(wù)掷贾【﹂“云”將計(jì)算資源集中起來(lái),并通過(guò)專(zhuān)門(mén)軟件實(shí)現(xiàn)自動(dòng)管理想帅。用戶(hù)可以動(dòng)態(tài)申請(qǐng)部分資源懈费,支持各種業(yè)務(wù)的運(yùn)轉(zhuǎn),無(wú)需自己搭建服務(wù)器而從“云”獲取計(jì)算和存儲(chǔ)能力博脑,從而提高效率憎乙、降低成本,可以更專(zhuān)注于重要的業(yè)務(wù)目標(biāo)以及創(chuàng)新叉趣。提供這些計(jì)算服務(wù)的公司稱(chēng)為云提供商泞边,他們通常基于用戶(hù)使用對(duì)云計(jì)算服務(wù)進(jìn)行收費(fèi)疗杉,類(lèi)似于家用水電的計(jì)費(fèi)方式墩邀。
云計(jì)算早期启昧,就是簡(jiǎn)單一點(diǎn)的分布式計(jì)算,解決任務(wù)分發(fā),將計(jì)算結(jié)果合并速警,也叫網(wǎng)格計(jì)算。很多大企業(yè)早期可能也只是想解決自己的效率與計(jì)算問(wèn)題沉馆,到后來(lái)這個(gè)能力也可以提供給外部使用汰扭,所以就出現(xiàn)了公共云(public cloud)計(jì)算 ,把計(jì)算機(jī)的計(jì)算能力直接放在網(wǎng)上賣(mài)出去冀痕。未來(lái)的云計(jì)算荔睹,就像我們使用水電煤氣一樣,我們從來(lái)不會(huì)想著去建電廠(chǎng)言蛇,也不關(guān)心電廠(chǎng)在哪里僻他,只要插上插頭,就能用電腊尚。簡(jiǎn)單來(lái)說(shuō)吨拗,云計(jì)算是硬件資源的虛擬化

【云計(jì)算有哪些特點(diǎn)】

1.超大規(guī)模
“云”具有相當(dāng)?shù)囊?guī)模婿斥,Google的云計(jì)算擁有100多萬(wàn)臺(tái)服務(wù)器劝篷,Amazon、Microsoft受扳、Yahoo等擁有幾十萬(wàn)臺(tái)服務(wù)器携龟。所以“云”可以為用戶(hù)提供超強(qiáng)的計(jì)算和存儲(chǔ)能力。
2.費(fèi)用低
“云”就是一個(gè)龐大的資源池勘高,用戶(hù)可以按需購(gòu)買(mǎi)資源峡蟋,像水電煤那樣計(jì)費(fèi)。無(wú)需在購(gòu)買(mǎi)硬件和軟件以及設(shè)置和運(yùn)行現(xiàn)場(chǎng)數(shù)據(jù)中心(包括服務(wù)器機(jī)架华望、用于供電和冷卻的全天不間斷電力蕊蝗、管理基礎(chǔ)結(jié)構(gòu)的 IT 專(zhuān)家)上進(jìn)行額外的資金投入。
3.高伸縮性
“云”的規(guī)睦抵郏可以動(dòng)態(tài)伸縮蓬戚,具備彈性擴(kuò)展能力,以滿(mǎn)足應(yīng)用或者用戶(hù)增長(zhǎng)的需要宾抓。例如更多或更少的計(jì)算能力子漩、存儲(chǔ)空間豫喧、帶寬。因此通常只需點(diǎn)擊幾下鼠標(biāo)幢泼,即可在數(shù)分鐘內(nèi)調(diào)配海量計(jì)算資源紧显,賦予企業(yè)非常大的靈活性,并消除了容量規(guī)劃的壓力缕棵。
4.通用性
“云”不是針對(duì)特定的服務(wù)孵班,同一片“云”可以支撐各種各樣的服務(wù)。
5.虛擬化
云計(jì)算支持用戶(hù)在任意位置招驴、使用各種終端獲取應(yīng)用服務(wù)篙程。所請(qǐng)求的資源來(lái)自“云”,而不是固定的有形的實(shí)體别厘。應(yīng)用在“云”中某處運(yùn)行虱饿,但實(shí)際上用戶(hù)無(wú)需了解、也不用擔(dān)心應(yīng)用運(yùn)行的具體位置丹允。只需要一臺(tái)筆記本或者一個(gè)手機(jī)郭厌,就可以通過(guò)網(wǎng)絡(luò)服務(wù)來(lái)實(shí)現(xiàn)我們需要的一切,甚至包括超級(jí)計(jì)算這樣的任務(wù)雕蔽。
6.可靠性
“云”采用數(shù)據(jù)多副本容錯(cuò)折柠、計(jì)算節(jié)點(diǎn)同構(gòu)可互換等多種手段保障服務(wù)可靠性。

【云服務(wù)類(lèi)型:IaaS批狐、PaaS扇售、SaaS】

1、基礎(chǔ)結(jié)構(gòu)即服務(wù) (IaaS)
云計(jì)算服務(wù)的最基本類(lèi)別嚣艇。使用 IaaS 時(shí)承冰,以即用即付的方式從服務(wù)提供商處租用IT基礎(chǔ)結(jié)構(gòu),如服務(wù)器和虛擬機(jī)(VM)食零、存儲(chǔ)空間困乒、網(wǎng)絡(luò)和操作系統(tǒng)。
2贰谣、平臺(tái)即服務(wù) (PaaS)
平臺(tái)即服務(wù) (PaaS) 是指云計(jì)算服務(wù)娜搂,它們可以按需提供開(kāi)發(fā)、測(cè)試吱抚、交付和管理軟件應(yīng)用程序所需的環(huán)境百宇。PaaS 旨在讓開(kāi)發(fā)人員能夠更輕松地快速創(chuàng)建 Web 或移動(dòng)應(yīng)用,而無(wú)需考慮對(duì)開(kāi)發(fā)所必需的服務(wù)器秘豹、存儲(chǔ)空間携御、網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)基礎(chǔ)結(jié)構(gòu)進(jìn)行設(shè)置或管理。
3、軟件即服務(wù) (SaaS)
軟件即服務(wù) (SaaS) 是通過(guò) Internet 交付軟件應(yīng)用程序的方法啄刹,通常以訂閱為基礎(chǔ)按需提供涮坐。使用 SaaS 時(shí),云提供商托管并管理軟件應(yīng)用程序和基礎(chǔ)結(jié)構(gòu)鸵膏,并負(fù)責(zé)軟件升級(jí)和安全修補(bǔ)等維護(hù)工作膊升。用戶(hù)(通常使用電話(huà)、平板電腦或 PC 上的 Web 瀏覽器)通過(guò) Internet 連接到應(yīng)用程序谭企。

【云部署類(lèi)型:公共、私有评肆、混合】

1债查、公有云
公有云為第三方云服務(wù)提供商所擁有和運(yùn)營(yíng),他們通過(guò) Internet 提供其計(jì)算資源(如服務(wù)器和存儲(chǔ)空間)瓜挽。Microsoft Azure 是公有云的一個(gè)示例盹廷。在公有云中,所有硬件久橙、軟件和其他支持性基礎(chǔ)結(jié)構(gòu)均為云提供商所擁有和管理俄占。使用 Web 瀏覽器訪(fǎng)問(wèn)這些服務(wù)和帳戶(hù)管理。
2淆衷、私有云
私有云是指專(zhuān)供一個(gè)企業(yè)或組織使用的云計(jì)算資源缸榄。私有云可以實(shí)際位于公司的現(xiàn)場(chǎng)數(shù)據(jù)中心之上。私有云對(duì)數(shù)據(jù)保密祝拯、數(shù)據(jù)安全甚带、服務(wù)質(zhì)量都能有效控制,其最大的特點(diǎn)是安全性與私有化佳头,是訂制化解決方案的根本鹰贵,對(duì)于對(duì)數(shù)據(jù)安全與穩(wěn)定有要求的企業(yè)來(lái)說(shuō)是非常好的選擇。
3康嘉、混合云
混合云組合了公有云的方便便捷與私有云的安全穩(wěn)定的特點(diǎn)碉输,企業(yè)出于安全考慮會(huì)希望將數(shù)據(jù)存放在私有云上面,同時(shí)又希望能使用公有云的資源亭珍,混合云為企業(yè)提供更大的靈活性和更多的部署選項(xiàng)敷钾。

【云計(jì)算的安全如何保證】

公有云的數(shù)據(jù)安全不是一個(gè)孤立的問(wèn)題,廣義的安全块蚌,也包括數(shù)據(jù)的完整性闰非、數(shù)據(jù)的私密性。
1峭范、網(wǎng)絡(luò)安全防護(hù):高吞吐量的 DDoS 外網(wǎng)防護(hù)更完善的防火墻财松,入侵檢測(cè),WAF更完善的流量清洗規(guī)則。
2辆毡、數(shù)據(jù)庫(kù)安全防護(hù):高可用:主備切換數(shù)據(jù)零丟失高可靠:同城雙活菜秦,異地備份安全性:訪(fǎng)問(wèn)控制,IP白名單舶掖。
3球昨、存儲(chǔ)安全防護(hù):高可靠:超大容量,三份備份眨攘,異地同步安全性:訪(fǎng)問(wèn)控制主慰,防盜鏈。
4鲫售、運(yùn)維安全:數(shù)據(jù)對(duì)運(yùn)維也是機(jī)密的共螺,需要流程保障不斷更新的虛擬機(jī)和容器鏡像建設(shè)漏洞不斷更新的病毒庫(kù)

【大數(shù)據(jù)與云計(jì)算的關(guān)系】

1、云計(jì)算為大數(shù)據(jù)提供了有力的工具和途徑情竹。云計(jì)算強(qiáng)大的計(jì)算能力和數(shù)據(jù)存儲(chǔ)能力能夠?yàn)榇髷?shù)據(jù)處理分析帶來(lái)豐富性和多元性藐不,使其能夠提供更為便捷的服務(wù)。
2秦效、大數(shù)據(jù)為云計(jì)算提供了很有價(jià)值的用武之地雏蛮。大數(shù)據(jù)本身帶來(lái)的多元化應(yīng)用使得云計(jì)算具有了強(qiáng)大的實(shí)際應(yīng)用能力。
3阱州、大數(shù)據(jù)為云計(jì)算深入到行業(yè)應(yīng)用提供了強(qiáng)有力的切入點(diǎn)挑秉。
4、大數(shù)據(jù)更靠近應(yīng)用贡耽,比云計(jì)算更容易落地衷模,大數(shù)據(jù)需求明顯,處在價(jià)值鏈的上游蒲赂,可有效利用已大量建設(shè)的云計(jì)算資源阱冶。
云計(jì)算作為計(jì)算資源的底層,支撐著上層的大數(shù)據(jù)處理滥嘴,而大數(shù)據(jù)的發(fā)展趨勢(shì)是木蹬,實(shí)時(shí)交互式的查詢(xún)效率和分析能力。云計(jì)算和大數(shù)據(jù)勢(shì)相輔相成若皱、優(yōu)勢(shì)相長(zhǎng)的關(guān)系镊叁,二者結(jié)合能夠提升對(duì)方的實(shí)用價(jià)值,并在對(duì)方的計(jì)算發(fā)展過(guò)程中相互促進(jìn)走触,實(shí)現(xiàn)了傳統(tǒng)信息處理和分析技術(shù)無(wú)法理解和比擬的功能和優(yōu)勢(shì)晦譬。

【大數(shù)據(jù)思維】

1、要分析所有數(shù)據(jù)互广,而不是少量的隨機(jī)數(shù)據(jù)樣本敛腌。在大數(shù)據(jù)時(shí)代的第一個(gè)轉(zhuǎn)變就是利用所有數(shù)據(jù)卧土,而不再僅僅依靠一小部分?jǐn)?shù)據(jù)。采樣分析的精確性隨著采樣隨機(jī)性的增加而大幅提高像樊,但與樣本數(shù)量的增加關(guān)系不大尤莺。因此樣本選擇的隨機(jī)性比樣本數(shù)量更加重要。大數(shù)據(jù)的方法不采用隨機(jī)分析法生棍,而是采用所有數(shù)據(jù)颤霎,即樣本=總體。
2涂滴、要追求數(shù)據(jù)的紛繁復(fù)雜友酱,而不是精確性。在“小數(shù)據(jù)”時(shí)代柔纵,最重要的就是減少測(cè)量的錯(cuò)誤粹污,因?yàn)槭占男畔⑤^少,所以必須保證記錄盡可能精確首量,否則細(xì)微的錯(cuò)誤會(huì)被放大。大數(shù)據(jù)為了擴(kuò)大數(shù)據(jù)規(guī)模允許不精確进苍。大數(shù)據(jù)的簡(jiǎn)單算法比小數(shù)據(jù)的復(fù)雜算法更加有效加缘。大數(shù)據(jù)要求我們接受紛繁性,放棄對(duì)精確性的追求觉啊,在大數(shù)據(jù)時(shí)代我們無(wú)法獲得精確性拣宏。
3、要關(guān)注事物的相關(guān)關(guān)系杠人,而不是因果關(guān)系勋乾。通過(guò)監(jiān)控一個(gè)現(xiàn)象的良好的關(guān)聯(lián)物,相關(guān)關(guān)系可以幫助我們捕捉現(xiàn)在和預(yù)測(cè)未來(lái)嗡善。大數(shù)據(jù)的相關(guān)關(guān)系分析法更加準(zhǔn)確辑莫、更快,而且不易受傳統(tǒng)思維模式和特定領(lǐng)域里隱含的固有偏見(jiàn)的影響罩引。建立在相關(guān)關(guān)系分析法上基礎(chǔ)上的預(yù)測(cè)是大數(shù)據(jù)的核心各吨。

【大數(shù)據(jù)的數(shù)據(jù)分類(lèi)】

1、結(jié)構(gòu)化數(shù)據(jù):即行數(shù)據(jù)袁铐,存儲(chǔ)在數(shù)據(jù)庫(kù)里揭蜒,可以用二維表結(jié)構(gòu)來(lái)邏輯表達(dá)實(shí)現(xiàn)的數(shù)據(jù)。任何一列遵循范式剔桨,數(shù)據(jù)項(xiàng)不可再分屉更,同一列數(shù)據(jù)具有相同的數(shù)據(jù)類(lèi)型。所有的關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)均為結(jié)構(gòu)化數(shù)據(jù)(如Oracle洒缀,DB2瑰谜,MySQL,SQLServer)
2、非結(jié)構(gòu)化數(shù)據(jù):不方便用數(shù)據(jù)庫(kù)二維邏輯表來(lái)表現(xiàn)的數(shù)據(jù)似舵,包括所有格式的辦公文檔脚猾、文本、圖片砚哗、XML龙助、HTML、各類(lèi)報(bào)表蛛芥、圖像和音頻/視頻信息等提鸟,沒(méi)有固定結(jié)構(gòu)的數(shù)據(jù),通常保存為不同類(lèi)型的文件仅淑。
3称勋、半結(jié)構(gòu)化數(shù)據(jù):介于完全結(jié)構(gòu)化數(shù)據(jù)(如關(guān)系型數(shù)據(jù)庫(kù)、面向?qū)ο髷?shù)據(jù)庫(kù)中的數(shù)據(jù))和完全無(wú)結(jié)構(gòu)的數(shù)據(jù)(如聲音涯竟、圖像文件等)之間的數(shù)據(jù)赡鲜。每條記錄可能會(huì)有預(yù)定義的規(guī)范,但是允許每條記錄包含不同的信息庐船、字段數(shù)银酬、字段名、字段類(lèi)型筐钟,也允許嵌套格式揩瞪。HTML文檔就屬于半結(jié)構(gòu)化數(shù)據(jù)。它一般是自描述的篓冲,數(shù)據(jù)的結(jié)構(gòu)和內(nèi)容混在一起李破,沒(méi)有明顯的區(qū)分。

【企業(yè)級(jí)大數(shù)據(jù)運(yùn)營(yíng)流程】

針對(duì)企業(yè)內(nèi)外部的各類(lèi)數(shù)據(jù)源壹将,通過(guò)數(shù)據(jù)采集嗤攻、預(yù)處理、數(shù)據(jù)存儲(chǔ)及數(shù)據(jù)加工處理瞭恰,為不同應(yīng)用及使用對(duì)象提供多種數(shù)據(jù)服務(wù)屯曹。
數(shù)據(jù)源:整合的業(yè)務(wù)數(shù)據(jù)來(lái)源于B/O/M三域支撐系統(tǒng)、業(yè)務(wù)平臺(tái)等內(nèi)部系統(tǒng)數(shù)據(jù)源惊畏,以及互聯(lián)網(wǎng)頁(yè)恶耽,政府?dāng)?shù)據(jù)等外部數(shù)據(jù)源。
數(shù)據(jù)采集:將不同來(lái)源颜启、不同特征的數(shù)據(jù)源通過(guò)不同的方式進(jìn)行抽取和收集偷俭。
數(shù)據(jù)處理:通過(guò)數(shù)處理對(duì)采集來(lái)的數(shù)據(jù)進(jìn)行必要的裁剪、整理缰盏、匯總計(jì)算涌萤。
數(shù)據(jù)存儲(chǔ):將經(jīng)過(guò)預(yù)處理的數(shù)據(jù)裝載到分析平臺(tái)淹遵、并根據(jù)處理需要進(jìn)行數(shù)據(jù)分層存儲(chǔ)。
數(shù)據(jù)治理:按照不同的數(shù)據(jù)架構(gòu)负溪、數(shù)據(jù)質(zhì)量規(guī)則透揣、安全規(guī)則等進(jìn)行數(shù)據(jù)治理。
數(shù)據(jù)挖掘:針對(duì)不同的應(yīng)用場(chǎng)景需求通過(guò)挖掘算法建立模型川抡,挖掘數(shù)據(jù)間的潛在關(guān)系與價(jià)值辐真。
數(shù)據(jù)應(yīng)用:面向不同應(yīng)用及使用對(duì)象,提供接口數(shù)據(jù)崖堤、頁(yè)面訪(fǎng)問(wèn)等多種數(shù)據(jù)服務(wù)侍咱。

【大數(shù)據(jù)的預(yù)處理及存儲(chǔ)管理技術(shù)】

數(shù)據(jù)預(yù)處理主要完成對(duì)已接收數(shù)據(jù)的辨析、抽取密幔、清洗等操作楔脯。
1、抽瓤杷Α:因獲取的數(shù)據(jù)可能具有多種結(jié)構(gòu)和類(lèi)型昧廷,數(shù)據(jù)抽取過(guò)程可以幫助我們將這些復(fù)雜的數(shù)據(jù)轉(zhuǎn)化為單一的或者便于處理的構(gòu)型,以達(dá)到快速分析處理的目的偎箫。
2麸粮、清洗:對(duì)于大數(shù)據(jù),并不全是有價(jià)值的镜廉,有些數(shù)據(jù)并不是我們所關(guān)心的內(nèi)容,而另一些數(shù)據(jù)則是完全錯(cuò)誤的干擾項(xiàng)愚战,因此要對(duì)數(shù)據(jù)通過(guò)過(guò)濾“去噪”從而提取出有效數(shù)據(jù)娇唯。
大數(shù)據(jù)存儲(chǔ)與管理要用存儲(chǔ)器把采集到的數(shù)據(jù)存儲(chǔ)起來(lái),建立相應(yīng)的數(shù)據(jù)庫(kù)寂玲,并進(jìn)行管理和調(diào)用塔插。重點(diǎn)解決復(fù)雜結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化大數(shù)據(jù)管理與處理技術(shù)拓哟。其中非關(guān)系型數(shù)據(jù)庫(kù)主要指的是NOSQL數(shù)據(jù)想许,分為鍵值庫(kù),列存儲(chǔ)數(shù)據(jù)庫(kù)断序,圖數(shù)據(jù)庫(kù)以及文檔數(shù)據(jù)庫(kù)等類(lèi)型流纹。關(guān)系型數(shù)據(jù)庫(kù)包含了傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)以及NewSQL數(shù)據(jù)庫(kù)。

【大數(shù)據(jù)的分析及挖掘技術(shù)】

數(shù)據(jù)挖掘就是從大量的违诗、不完全的漱凝、有噪聲的、模糊的诸迟、隨機(jī)的實(shí)際應(yīng)用數(shù)據(jù)中茸炒,提取隱含在其中的愕乎、人們事先不知道的、但又是潛在有用的信息和知識(shí)的過(guò)程壁公。根據(jù)挖掘方法分感论,可粗分為:機(jī)器學(xué)習(xí)方法、統(tǒng)計(jì)方法紊册、神經(jīng)網(wǎng)絡(luò)方法和數(shù)據(jù)庫(kù)方法比肄。機(jī)器學(xué)習(xí)中,可細(xì)分為:歸納學(xué)習(xí)方法(決策樹(shù)湿硝、規(guī)則歸納等)薪前、基于范例學(xué)習(xí)、遺傳算法等关斜。統(tǒng)計(jì)方法中示括,可細(xì)分為:回歸分析(多元回歸、自回歸等)痢畜、判別分析(貝葉斯判別垛膝、費(fèi)歇爾判別、非參數(shù)判別等)丁稀、聚類(lèi)分析(系統(tǒng)聚類(lèi)吼拥、動(dòng)態(tài)聚類(lèi)等)、探索性分析(主元分析法线衫、相關(guān)分析法等)等凿可。神經(jīng)網(wǎng)絡(luò)方法中,可細(xì)分為:前向神經(jīng)網(wǎng)絡(luò)(BP算法等)授账、自組織神經(jīng)網(wǎng)絡(luò)(自組織特征映射枯跑、競(jìng)爭(zhēng)學(xué)習(xí)等)等。數(shù)據(jù)庫(kù)方法主要是多維數(shù)據(jù)分析或OLAP方法白热,另外還有面向?qū)傩缘臍w納方法敛助。

【批處理與流處理的差異】

批處理與流處理的不同,主要是數(shù)據(jù)獲取的方式不同屋确。流處理的數(shù)據(jù)纳击,就像流水一樣,一直在系統(tǒng)中流動(dòng)處理攻臀。批處理的數(shù)據(jù)焕数,則是暫存于數(shù)據(jù)庫(kù)中的離線(xiàn)數(shù)據(jù),后期定時(shí)定量的一批一批的處理刨啸。
批處理的優(yōu)點(diǎn)是支持對(duì)歷史時(shí)序數(shù)據(jù)的處理百匆,實(shí)現(xiàn)簡(jiǎn)單。但是批處理具有查詢(xún)數(shù)據(jù)量大呜投,非實(shí)時(shí)的缺點(diǎn)加匈,因此批處理不適合對(duì)處理時(shí)間要求較高的場(chǎng)合存璃。流式處理的優(yōu)點(diǎn)是數(shù)據(jù)實(shí)時(shí)計(jì)算,無(wú)需查詢(xún)?cè)紨?shù)據(jù)雕拼,無(wú)需針對(duì)整個(gè)數(shù)據(jù)集執(zhí)行操作纵东,而是對(duì)通過(guò)系統(tǒng)傳輸?shù)拿總€(gè)數(shù)據(jù)項(xiàng)執(zhí)行操作。但是流式處理需要特殊處理寫(xiě)入的歷史數(shù)據(jù)啥寇,也需要處理運(yùn)算過(guò)程中崩潰的計(jì)算單元偎球。流處理很適合用來(lái)處理必須對(duì)變動(dòng)或峰值做出響應(yīng),并且關(guān)注一段時(shí)間內(nèi)變化趨勢(shì)的數(shù)據(jù)辑甜。

【什么是Hadoop】

Hadoop是一個(gè)由Apache基金會(huì)所開(kāi)發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)衰絮。用戶(hù)可以在不了解分布式底層細(xì)節(jié)的情況下,開(kāi)發(fā)分布式程序磷醋,充分利用集群的威力進(jìn)行高速運(yùn)算和存儲(chǔ)猫牡。Hadoop實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng)(Hadoop Distributed File System),簡(jiǎn)稱(chēng)HDFS邓线。HDFS有高容錯(cuò)性的特點(diǎn)淌友,并且設(shè)計(jì)用來(lái)部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來(lái)訪(fǎng)問(wèn)應(yīng)用程序的數(shù)據(jù)骇陈,適合那些有著超大數(shù)據(jù)集(large data set)的應(yīng)用程序震庭。Hadoop的框架最核心的設(shè)計(jì)就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲(chǔ)你雌,而MapReduce為海量的數(shù)據(jù)提供了計(jì)算器联。

【Hadoop的起源】

Hadoop起源于A(yíng)pache Nutch(一個(gè)開(kāi)源的網(wǎng)絡(luò)搜索引擎),是Apach Lucene(文本搜索引擎庫(kù),創(chuàng)始人Doug Cutting)的一部分。在2002-2004年間谷歌發(fā)布了三大論文介紹了其云計(jì)算的核心組成部分GFS(Google File System)鲤嫡、MapReduce以及BigTable。谷歌在自身多年的搜索引擎業(yè)務(wù)中構(gòu)建了突破性的GFS,從此文件系統(tǒng)進(jìn)入分布式時(shí)代苫昌。除此之外颤绕,Google在GFS上如何快速分析和處理數(shù)據(jù)方面開(kāi)創(chuàng)了MapReduce并行計(jì)算框架,讓以往的高端服務(wù)器計(jì)算變?yōu)榱畠r(jià)的x86集群計(jì)算祟身,也讓許多互聯(lián)網(wǎng)公司能夠從IOE(IBM小型機(jī)奥务、Oracle數(shù)據(jù)庫(kù)以及EMC存儲(chǔ))中解脫出來(lái),Google雖然沒(méi)有將其核心技術(shù)開(kāi)源袜硫,但是這三篇論文已經(jīng)向開(kāi)源社區(qū)指明了方向氯葬。得益于Google的啟發(fā),Doug Cutting使用Java語(yǔ)言對(duì)Google的云計(jì)算核心技術(shù)(主要是GFS和MapReduce)做了開(kāi)源的實(shí)現(xiàn)婉陷。后來(lái)帚称,Apache基金會(huì)整合Doug Cutting以及其他IT公司(如Facebook等)的貢獻(xiàn)成果官研,開(kāi)發(fā)并推出了Hadoop生態(tài)系統(tǒng)。

【Hadoop的四大特性】

1闯睹、 可擴(kuò)展(Scalable):hadoop的分布式存儲(chǔ)和分布式計(jì)算是在集群節(jié)點(diǎn)完成的戏羽,可以方便地?cái)U(kuò)展到數(shù)以千計(jì)的節(jié)點(diǎn)中。
2楼吃、 低成本(Economical):可以通過(guò)普通機(jī)器組成的服務(wù)器群來(lái)分發(fā)以及處理數(shù)據(jù)始花。這些服務(wù)器群總計(jì)可達(dá)數(shù)千個(gè)節(jié)點(diǎn)。而且每個(gè)節(jié)點(diǎn)都是運(yùn)行在開(kāi)源操作系統(tǒng)Linux上面的孩锡。
3酷宵、 高效率(Efficient):通過(guò)分發(fā)數(shù)據(jù),hadoop可以在數(shù)據(jù)所在的節(jié)點(diǎn)上并行地(parallel)處理它們躬窜,這使得數(shù)據(jù)處理非常的快速浇垦。
4、 高可靠性(Reliable):hadoop能自動(dòng)地維護(hù)數(shù)據(jù)的多份復(fù)制斩披,并且在任務(wù)失敗后能自動(dòng)地重新部署(redeploy)計(jì)算任務(wù)溜族。

【Hadoop生態(tài)圈主要項(xiàng)目】

Hadoop Common:一組分布式文件系統(tǒng)和通用I/O的組件與接口(序列化、Java RPC和持久化數(shù)據(jù)結(jié)構(gòu))垦沉,用于支持其他Hadoop模塊煌抒。
MapReduce:并行計(jì)算框架,非常適合在大量計(jì)算機(jī)組成的分布式并行環(huán)境里進(jìn)行數(shù)據(jù)處理厕倍。
HDFS:分布式文件系統(tǒng)寡壮,有著高容錯(cuò)性特點(diǎn),設(shè)計(jì)用來(lái)部署在低廉的硬件上讹弯,適合那些有著超大數(shù)據(jù)集的應(yīng)用程序况既。
Zookeeper:一個(gè)分布式、高性能的協(xié)調(diào)服務(wù)组民,提供分布式鎖之類(lèi)的基本服務(wù)用于構(gòu)建分布式應(yīng)用棒仍。
HBase:一個(gè)分布式、按列存儲(chǔ)數(shù)據(jù)庫(kù)臭胜,使用HDFS作為底層存儲(chǔ)莫其,同時(shí)支持MapReduce的批量式計(jì)算和點(diǎn)查詢(xún)(隨機(jī)讀取)耸三。
Pig:一種數(shù)據(jù)流語(yǔ)言和運(yùn)行環(huán)境乱陡,用以檢索非常大的數(shù)據(jù)集,運(yùn)行在MapReduce和HDFS的集群上仪壮。
Hive:數(shù)據(jù)倉(cāng)庫(kù)工具憨颠,提供基于SQL的查詢(xún)語(yǔ)言(運(yùn)行時(shí)翻譯成MapReduce作業(yè))用于數(shù)據(jù)的離線(xiàn)分析。
Mahout:一個(gè)在Hadoop上運(yùn)行的可擴(kuò)展的機(jī)器學(xué)習(xí)算法和數(shù)據(jù)挖掘類(lèi)庫(kù)积锅。
Avro:一種支持高效爽彤、跨語(yǔ)言的RPC以及永久存儲(chǔ)數(shù)據(jù)的序列化系統(tǒng)养盗。
Sqoop:在傳統(tǒng)數(shù)據(jù)庫(kù)和HDFS之間高效傳輸數(shù)據(jù)的工具。

【HDFS 概覽】

HDFS是一個(gè)Apache Software Foundation項(xiàng)目淫茵,是Apache Hadoop項(xiàng)目的一個(gè)子項(xiàng)目爪瓜。HDFS非常適于存儲(chǔ)和管理大型數(shù)據(jù)(GB、TB匙瘪、PB級(jí))铆铆,HDFS是一個(gè)高度容錯(cuò)性的系統(tǒng),適合部署在廉價(jià)的機(jī)器上丹喻。HDFS能提供高吞吐量的數(shù)據(jù)訪(fǎng)問(wèn)薄货,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。HDFS放寬了一部分POSIX約束碍论,來(lái)實(shí)現(xiàn)流式讀取文件系統(tǒng)數(shù)據(jù)的目的谅猾。
HDFS的設(shè)計(jì)思想“一次寫(xiě)入,多次讀洒⒂啤(write-once-read-many)”税娜,一個(gè)數(shù)據(jù)集一旦由數(shù)據(jù)源生成,就會(huì)被復(fù)制分發(fā)到不同的存儲(chǔ)節(jié)點(diǎn)中藏研,然后響應(yīng)各種各樣的數(shù)據(jù)分析任務(wù)請(qǐng)求敬矩。HDFS處理的應(yīng)用一般是批處理,而不是用戶(hù)交互式處理蠢挡,注重的是數(shù)據(jù)的吞吐量而不是數(shù)據(jù)的訪(fǎng)問(wèn)速度弧岳。
HDFS特點(diǎn):高容錯(cuò)性、高吞吐量业踏、故障的檢測(cè)和自動(dòng)快速恢復(fù)禽炬、流式的數(shù)據(jù)訪(fǎng)問(wèn)、大數(shù)據(jù)集勤家、一次寫(xiě)入腹尖,多次讀寫(xiě)
HDFS不適用的場(chǎng)景:不適合大量小文件的存儲(chǔ)、不適合隨機(jī)讀寫(xiě)伐脖、不支持對(duì)文件隨機(jī)修改热幔。

【Hadoop構(gòu)造模塊】

運(yùn)行Hadoop的意思其實(shí)就是運(yùn)行一組守護(hù)進(jìn)程(daemons),每個(gè)進(jìn)程都有各自的角色晓殊,有的僅運(yùn)行在單個(gè)服務(wù)器上,有的則運(yùn)行在集群多個(gè)服務(wù)器上伤提,包括:
NameNode:整個(gè)文件系統(tǒng)的管理節(jié)點(diǎn)巫俺,負(fù)責(zé)文件系統(tǒng)名字空間(NameSpace)的管理與維護(hù),同時(shí)負(fù)責(zé)客戶(hù)端文件操作的控制以及具體存儲(chǔ)任務(wù)的管理與分配肿男。
Secondary NameNode:負(fù)責(zé)監(jiān)控HDFS狀態(tài)的輔助后臺(tái)程序介汹,與NameNode通訊却嗡,定期保存HDFS元數(shù)據(jù)快照。
DataNode:提供真實(shí)文件數(shù)據(jù)的存儲(chǔ)服務(wù)嘹承,負(fù)責(zé)處理文件系統(tǒng)客戶(hù)端的讀寫(xiě)請(qǐng)求窗价。
JobTracker:每個(gè)集群只有一個(gè)JobTracker守護(hù)進(jìn)程,是用于處理作業(yè)的后臺(tái)程序叹卷,決定有哪些文件參與作業(yè)處理撼港,分配task執(zhí)行的節(jié)點(diǎn),監(jiān)控task并重啟失敗的task骤竹。
TaskTracker:管理各自所在節(jié)點(diǎn)上的task帝牡,與DataNode進(jìn)行數(shù)據(jù)交互負(fù)責(zé)執(zhí)行具體的任務(wù)。

【HDFS架構(gòu)】

HDFS采用master/slave架構(gòu)蒙揣。一個(gè)HDFS集群是由一個(gè)Namenode和一定數(shù)目的Datanodes組成靶溜。Namenode是一個(gè)中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的名字空間(namespace)以及客戶(hù)端對(duì)文件的訪(fǎng)問(wèn)懒震。集群中的Datanode一般是一個(gè)節(jié)點(diǎn)一個(gè)罩息,負(fù)責(zé)管理它所在節(jié)點(diǎn)上的存儲(chǔ)。HDFS暴露了文件系統(tǒng)的名字空間个扰,用戶(hù)能夠以文件的形式在上面存儲(chǔ)數(shù)據(jù)瓷炮。從內(nèi)部看,一個(gè)文件其實(shí)被分成一個(gè)或多個(gè)數(shù)據(jù)塊锨匆,這些塊存儲(chǔ)在一組Datanode上崭别。Namenode執(zhí)行文件系統(tǒng)的名字空間操作,比如打開(kāi)恐锣、關(guān)閉茅主、重命名文件或目錄。它也負(fù)責(zé)確定數(shù)據(jù)塊到具體Datanode節(jié)點(diǎn)的映射土榴。Datanode負(fù)責(zé)處理文件系統(tǒng)客戶(hù)端的讀寫(xiě)請(qǐng)求诀姚。在Namenode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制玷禽。


HDFS Architecture.png

【HDFS的高可用(HA)機(jī)制】

Hadoop2.X版本之前赫段,NameNode是HDFS集群的單點(diǎn)故障點(diǎn)(SPOF)
影響HDFS集群不可用主要包括兩種情況:1、類(lèi)似機(jī)器宕機(jī)這樣的意外情況將導(dǎo)致集群不可用矢赁,只有重啟NameNode之后才可使用糯笙。2、計(jì)劃內(nèi)的軟件或硬件升級(jí)(NameNode節(jié)點(diǎn))撩银,將導(dǎo)致集群在短時(shí)間范圍內(nèi)不可用
一個(gè)典型的HA(High Availability)集群给涕,兩個(gè)單獨(dú)的機(jī)器配置為NameNode,在任何時(shí)候,一個(gè)NameNode處于活動(dòng)狀態(tài)够庙,另一個(gè)處于待機(jī)狀態(tài)恭应,活動(dòng)NameNode負(fù)責(zé)處理集群中所有客戶(hù)端的操作,待機(jī)時(shí)僅僅作為一個(gè)Slave耘眨,保持足夠的狀態(tài)昼榛,如果有必要提供一個(gè)快速的故障轉(zhuǎn)移機(jī)制。
為了提供快速的故障轉(zhuǎn)移剔难,必須保證備用節(jié)點(diǎn)有最新的集群中塊的位置信息胆屿,為了達(dá)到這一點(diǎn),DataNode節(jié)點(diǎn)需要配置兩個(gè)NameNode的位置钥飞,同時(shí)發(fā)送塊的位置信息和心跳信息到兩個(gè)NameNode莺掠。
同時(shí)為了防止"腦裂場(chǎng)景"的出現(xiàn),必須為共享存儲(chǔ)配置至少一個(gè)fencing方法读宙。在宕機(jī)期間彻秆,如果不能確定之間的活動(dòng)節(jié)點(diǎn)已經(jīng)放棄活動(dòng)狀態(tài),fencing進(jìn)程負(fù)責(zé)中斷以前的活動(dòng)節(jié)點(diǎn)編輯存儲(chǔ)的共享訪(fǎng)問(wèn)结闸,這可以防止任何進(jìn)一步的修改名字空間唇兑,允許新的活動(dòng)節(jié)點(diǎn)安全地進(jìn)行故障轉(zhuǎn)移。

【HDFS的心跳機(jī)制】

主節(jié)點(diǎn)和從節(jié)點(diǎn)之間的通信是通過(guò)心跳機(jī)制(HeartBeat)實(shí)現(xiàn)的桦锄,如NameNode與DataNode之間扎附,JobTracker和TaskTracker之間。所謂“心跳”是一種形象化描述结耀,指的是持續(xù)的按照一定頻率在運(yùn)行留夜,類(lèi)似于心臟在永無(wú)休止的跳動(dòng)⊥继穑客戶(hù)端每隔幾分鐘發(fā)送一個(gè)固定信息給服務(wù)端碍粥,服務(wù)端收到后回復(fù)一個(gè)固定信息如果服務(wù)端幾分鐘內(nèi)沒(méi)有收到客戶(hù)端信息則視客戶(hù)端斷開(kāi)。Namenode周期性地從集群中的每個(gè)Datanode接收心跳信號(hào)和塊狀態(tài)報(bào)告(Blockreport)黑毅。接收到心跳信號(hào)意味著該Datanode節(jié)點(diǎn)工作正常嚼摩。Tasktracker周期性的向JobTracker發(fā)送心跳匯報(bào)節(jié)點(diǎn)和任務(wù)狀態(tài)信息,及時(shí)讓Jobtracker獲取各個(gè)節(jié)點(diǎn)上的資源使用情況和任務(wù)運(yùn)行狀態(tài)矿瘦。

【HDFS 聯(lián)邦(Federation)】

HDFS Federation是解決NameNode單點(diǎn)問(wèn)題的一種水平橫向擴(kuò)展方案枕面。主要解決幾個(gè)問(wèn)題:
1、命名空間的擴(kuò)展缚去。在HDFS Federation的情況下,元數(shù)據(jù)的管理與存放被分隔開(kāi),但真實(shí)數(shù)據(jù)的存儲(chǔ)還是共用潮秘。隨著集群使用時(shí)間的加長(zhǎng),HDFS上存放的數(shù)據(jù)也將會(huì)越來(lái)越多.這個(gè)時(shí)候如果還是將所有的數(shù)據(jù)都往一個(gè)NameNode上存放,這個(gè)文件系統(tǒng)會(huì)顯得非常的龐大。這時(shí)候可以進(jìn)行橫向擴(kuò)展易结,把一些大的目錄分離出去枕荞,使得每個(gè)NameNode下的數(shù)據(jù)看起來(lái)更加的精簡(jiǎn)稠通。
2、性能提升买猖。當(dāng)NameNode所持有的數(shù)據(jù)量達(dá)到了一個(gè)非常大規(guī)模的量級(jí)的時(shí)候(比如超過(guò)1億個(gè)文件),NameNode的處理效率會(huì)受到影響,比較容易會(huì)陷入繁忙的狀態(tài)滋尉。而整個(gè)集群將受限于一個(gè)單點(diǎn)NameNode的處理效率,從而影響集群整體的吞吐量玉控。采多NameNode機(jī)制可以減輕壓力。
3狮惜、資源的隔離高诺。通過(guò)多個(gè)命名空間,將關(guān)鍵數(shù)據(jù)文件目錄移到不同的NameNode上碾篡,避免這些關(guān)鍵數(shù)據(jù)的讀寫(xiě)操作受到其他普通文件讀寫(xiě)操作的影響虱而,也就是說(shuō)這些NameNode將會(huì)只處理特定的關(guān)鍵的任務(wù)所發(fā)來(lái)的請(qǐng)求,而屏蔽了其他普通任務(wù)的文件讀寫(xiě)請(qǐng)求,以此做到了資源的隔離开泽。

【HDFS安全模式】

安全模式主要是為了系統(tǒng)啟動(dòng)的時(shí)候檢查各個(gè)DataNode上數(shù)據(jù)塊的有效性牡拇,同時(shí)根據(jù)策略進(jìn)行必要的復(fù)制或者刪除部分?jǐn)?shù)據(jù)塊。
設(shè)計(jì)安全模式的目的在于:HDFS啟動(dòng)過(guò)程中穆律,NameNode還無(wú)法獲取DataNode上各數(shù)據(jù)塊的狀態(tài)惠呼,無(wú)法保證可以正常對(duì)外提供數(shù)據(jù)存儲(chǔ)服務(wù)。為保護(hù)系統(tǒng)安全和數(shù)據(jù)的完整峦耘,在此期間不對(duì)外提供服務(wù)(不允許對(duì)文件修改剔蹋、刪除)。待NameNode完全獲知各DataNode上各數(shù)據(jù)塊的狀態(tài)辅髓,并根據(jù)策略完成必要的復(fù)制或刪除數(shù)據(jù)塊后泣崩,再退出安全模式,對(duì)外開(kāi)始提供服務(wù)洛口。何時(shí)退出安全模式矫付?啟動(dòng)過(guò)程中,各DataNode向NameNode上報(bào)各個(gè)數(shù)據(jù)塊的狀態(tài)(含副本數(shù))绍弟。當(dāng)NameNode檢測(cè)到達(dá)到最小副本數(shù)(dfs.replication.min)的數(shù)據(jù)塊比率達(dá)到99.9%(可通過(guò)參數(shù)配置)時(shí)技即,自動(dòng)退出安全模式。

【Hadoop的三種運(yùn)行模式】

1樟遣、單機(jī)(本地)模式
這種模式在一臺(tái)單機(jī)上運(yùn)行而叼,沒(méi)有分布式文件系統(tǒng),而是直接讀寫(xiě)本地操作系統(tǒng)的文件系統(tǒng)豹悬。在單機(jī)模式(standalone)中不會(huì)存在守護(hù)進(jìn)程葵陵,所有東西都運(yùn)行在一個(gè)JVM上。單機(jī)模式適用于開(kāi)發(fā)過(guò)程中運(yùn)行MapReduce程序瞻佛,在單機(jī)模式下調(diào)試MR程序非常高效方便脱篙,這也是最少使用的一個(gè)模式娇钱。
2、偽分布式模式
這種模式在一臺(tái)單機(jī)上運(yùn)行绊困,但用不同的Java進(jìn)程模仿分布式運(yùn)行中的各類(lèi)節(jié)點(diǎn)文搂,模擬一個(gè)小規(guī)模的集群。偽分布式適用于開(kāi)發(fā)和測(cè)試環(huán)境秤朗,在這個(gè)模式中煤蹭,所有守護(hù)進(jìn)程都在同一臺(tái)機(jī)器上運(yùn)行。
3取视、完全分布式模式
這種模式通常被用于生產(chǎn)環(huán)境硝皂,使用N臺(tái)主機(jī)組成一個(gè)Hadoop集群,Hadoop守護(hù)進(jìn)程運(yùn)行在各臺(tái)主機(jī)之上作谭。這里會(huì)存在Namenode運(yùn)行的主機(jī)稽物,Datanode運(yùn)行的主機(jī),以及resourcemanager運(yùn)行的主機(jī)等折欠。在分布式環(huán)境下贝或,主節(jié)點(diǎn)和從節(jié)點(diǎn)會(huì)分開(kāi)。

【HDFS元數(shù)據(jù)】

NameNode在內(nèi)存中保存著整個(gè)文件系統(tǒng)的名字空間和文件數(shù)據(jù)塊映射等元數(shù)據(jù)锐秦。如果NameNode宕機(jī)傀缩,那么整個(gè)集群就癱瘓了,所以需要對(duì)這些元數(shù)據(jù)進(jìn)行持久化存儲(chǔ)农猬。
元數(shù)據(jù)赡艰,正所謂數(shù)據(jù)的數(shù)據(jù),包含有三類(lèi)重要信息:
第一類(lèi)是文件和目錄自身的屬性信息斤葱,例如文件名慷垮、目錄名、父目錄信息揍堕、文件大小料身、創(chuàng)建時(shí)間、修改時(shí)間等衩茸。
第二類(lèi)記錄文件內(nèi)容存儲(chǔ)相關(guān)信息芹血,例如文件塊情況、副本個(gè)數(shù)楞慈、每個(gè)副本所在的Data Node 信息等幔烛。
第三類(lèi)用來(lái)記錄HDFS中所有DataNode信息,用于DataNode管理囊蓝。
HDFS元數(shù)據(jù)存儲(chǔ)機(jī)制:內(nèi)存中有一份完整的元數(shù)據(jù)(內(nèi)存meta data)饿悬,磁盤(pán)有一個(gè)“準(zhǔn)完整”的元數(shù)據(jù)鏡像(fsimage)文件(在namenode的工作目錄中)、以及用于銜接內(nèi)存metadata和持久化元數(shù)據(jù)鏡像fsimage之間的操作日志(edits文件)聚霜,當(dāng)客戶(hù) 端對(duì)hdfs中的文件進(jìn)行新增或者修改操作狡恬,操作記錄首先被記入edits日志文件中珠叔,當(dāng)客戶(hù)端操作成功 后,相應(yīng)的元數(shù)據(jù)會(huì)更新到內(nèi)存meta.data中弟劲。

【HDFS元數(shù)據(jù)持久化原理】

上一篇說(shuō)到HDFS文件系統(tǒng)的命名空間等元數(shù)據(jù)是由NameNode來(lái)存儲(chǔ)的祷安,元數(shù)據(jù)保存著HDFS系統(tǒng)的重要信息。
NameNode用事務(wù)日志(EditsLog)來(lái)持久化每一個(gè)對(duì)文件系統(tǒng)的元數(shù)據(jù)的改變兔乞,即對(duì)元數(shù)據(jù)的每一步操作都會(huì)被記錄到EditsLog中.NameNode在本地文件系統(tǒng)中用一個(gè)文件來(lái)存儲(chǔ)這個(gè)EditsLog辆憔,完整的文件系統(tǒng)名字空間、文件塊的映射和文件系統(tǒng)的配置都存在一個(gè)叫Fsimage的文件中报嵌,F(xiàn)simage也是在NameNode的本地文件系統(tǒng)中。CheckPoint(檢查點(diǎn)):當(dāng)NameNode啟動(dòng)的時(shí)候熊榛,它會(huì)從磁盤(pán)中讀取Fsimage和EditsLog文件锚国,然后將新的元數(shù)據(jù)刷新到本地磁盤(pán)中,生成一個(gè)新的Fsimage文件,至此EditsLog文件已經(jīng)被處理并持久化的Fsimage中,任何對(duì)Fsimage和EditsLog的更新都會(huì)同步地更新每一個(gè)副本玄坦。如果NameNode宕機(jī)或是重啟血筑,內(nèi)存中沒(méi)有元數(shù)據(jù),那hdfs重新啟動(dòng)的時(shí)候煎楣,數(shù)據(jù)就從fsimage和edits這兩個(gè)文件中加載豺总,恢復(fù)系統(tǒng)之前的狀態(tài)。

【HDFS讀寫(xiě)流程】

HDFS采用master/slave架構(gòu)择懂。一個(gè)HDFS集群是由多個(gè)Namenode和一定數(shù)目的Datanodes組成喻喳。Namenode是一個(gè)中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的名字空間(namespace)以及客戶(hù)端對(duì)文件的訪(fǎng)問(wèn)困曙。集群中的Datanode一般是一個(gè)節(jié)點(diǎn)一個(gè)表伦,負(fù)責(zé)管理它所在節(jié)點(diǎn)上的存儲(chǔ)。HDFS中的文件是一次性寫(xiě)入的慷丽,并且嚴(yán)格要求在任何時(shí)候只能有一個(gè)寫(xiě)入者蹦哼。
文件寫(xiě)入過(guò)程:1.Client向NameNode發(fā)起文件寫(xiě)入的請(qǐng)求。2 .NameNode根據(jù)文件大小和文件塊配置情況要糊,返回給Client它所管理部分DataNode的信息纲熏。3. Client將文件劃分為多個(gè)Block,根據(jù)DataNode的地址信息,按順序?qū)懭氲矫恳粋€(gè)DataNode塊中。
文件讀取過(guò)程:1. Client向NameNode發(fā)起文件讀取的請(qǐng)求锄俄。2. NameNode返回文件存儲(chǔ)的DataNode的信息局劲。3. Client讀取文件信息。

【HDFS副本機(jī)制】

副本技術(shù)即分布式數(shù)據(jù)復(fù)制技術(shù)奶赠,是分布式計(jì)算的一個(gè)重要組成部分容握。該技術(shù)允許數(shù)據(jù)在多個(gè)服務(wù)器端共享,一個(gè)本地服務(wù)器可以存取不同物理地點(diǎn)的遠(yuǎn)程服務(wù)器上的數(shù)據(jù)车柠,也可以使所有的服務(wù)器均持有數(shù)據(jù)的拷貝剔氏。副本機(jī)制有一下優(yōu)點(diǎn):
1塑猖、提高系統(tǒng)可靠性,系統(tǒng)不可避免的會(huì)產(chǎn)生故障和錯(cuò)誤谈跛,擁有多個(gè)副本的文件系統(tǒng)不會(huì)導(dǎo)致無(wú)法訪(fǎng)問(wèn)的情況羊苟,從而提高了系統(tǒng)的可用性。另外感憾,系統(tǒng)可以通過(guò)其他完好的副本對(duì)發(fā)生錯(cuò)誤的副本進(jìn)行修復(fù)蜡励,從而提高了系統(tǒng)的容錯(cuò)性。2阻桅、負(fù)載均衡凉倚,副本可以對(duì)系統(tǒng)的負(fù)載量進(jìn)行擴(kuò)展。多個(gè)副本存放在不同的服務(wù)器上嫂沉,可有效的分擔(dān)工作量稽寒,從而將較大的工作量有效的分布在不同的站點(diǎn)上。
提高訪(fǎng)問(wèn)效率:將副本創(chuàng)建在訪(fǎng)問(wèn)頻度較大的區(qū)域趟章,即副本在訪(fǎng)問(wèn)節(jié)點(diǎn)的附近杏糙,相應(yīng)減小了其通信開(kāi)銷(xiāo),從而提高了整體的訪(fǎng)問(wèn)效率蚓土。
HDFS中的默認(rèn)三副本機(jī)制(三個(gè)以上的隨機(jī)存儲(chǔ)) 宏侍,第一副本:如果上傳節(jié)點(diǎn)是DN,則上傳該節(jié)點(diǎn)蜀漆;如果上傳節(jié)點(diǎn)是NN谅河,則隨機(jī)選擇DN ;第二副本:放置在不同機(jī)架的DN上 确丢;第三副本:放置在與第二副本相同機(jī)架的不同DN上

【Hadoop機(jī)架感知策略】

在分布式集群下旧蛾,由于機(jī)架的的槽位和交換機(jī)網(wǎng)口數(shù)量的限制,使得集群上的機(jī)器不得不跨越機(jī)架蠕嫁,通常一個(gè)大型的集群會(huì)跨越很多機(jī)架锨天。一般情況機(jī)架內(nèi)機(jī)器的通訊會(huì)快于跨機(jī)架機(jī)器之間的通訊,并且機(jī)架之間機(jī)器的網(wǎng)絡(luò)通信通常受到上層交換機(jī)間網(wǎng)絡(luò)帶寬的限制剃毒。通過(guò)機(jī)架感知病袄,可以帶來(lái)性能和安全性的提升。沒(méi)有配置機(jī)架信息時(shí)赘阀,所有的機(jī)器hadoop都默認(rèn)在同一個(gè)默認(rèn)的機(jī)架下益缠,名為/default-rack,這種情況下基公,任何一臺(tái) datanode機(jī)器幅慌,不管物理上是否屬于同一個(gè)機(jī)架,都會(huì)被認(rèn)為是在同一個(gè)機(jī)架下轰豆,此時(shí)就很容易出現(xiàn)增加機(jī)架間網(wǎng)絡(luò)負(fù)載的情況胰伍。當(dāng)配置了機(jī)架感知信息以后齿诞,hadoop在選擇三個(gè)datanode時(shí)就充分考慮副本機(jī)制存放策略,將副本分散在不同機(jī)架下骂租,盡量地減少網(wǎng)絡(luò)帶寬資源的消耗祷杈。

【MapReduce簡(jiǎn)介】

MapReduce是一種分布式計(jì)算模型,由Google提出渗饮,主要用于搜索領(lǐng)域但汞,解決海量數(shù)據(jù)的計(jì)算問(wèn)題。MapReduce的核心互站,就是對(duì)一個(gè)需要計(jì)算的任務(wù)進(jìn)行拆分私蕾,然后并行處理。MapReduce合并了兩種經(jīng)典函數(shù):映射(Mapping)對(duì)集合里的每個(gè)目標(biāo)應(yīng)用同一個(gè)操作胡桃〔劝龋化簡(jiǎn)歸約(Reducing)遍歷集合中的元素來(lái)返回一個(gè)綜合的結(jié)果。首先Client向JobTracker提交一個(gè)任務(wù)标捺。JobTracker將任務(wù)分配到一個(gè)或者多個(gè)TaskTracker進(jìn)行處理。不同的TaskTracker上揉抵,有的運(yùn)行的是Map階段的任務(wù)亡容,有的運(yùn)行是Reduce階段的任務(wù)。對(duì)于map階段冤今,首先對(duì)輸入的內(nèi)容進(jìn)行分割(InputSplit)闺兢,不同Mapper任務(wù)負(fù)責(zé)各自的分割后的內(nèi)容的映射。對(duì)于Reduce階段戏罢,接受多個(gè)Mapper的輸出屋谭,進(jìn)行歸一后,得到最終的輸出龟糕。

【MapReduce執(zhí)行步驟】

  1. map任務(wù)處理
    1.1讀取輸入文件內(nèi)容桐磁,對(duì)輸入文件的每一行,解析成key讲岁、value對(duì)我擂。每一個(gè)鍵值對(duì)調(diào)用一次map函數(shù)。
    1.2寫(xiě)自己的邏輯缓艳,對(duì)輸入的key校摩、value處理,轉(zhuǎn)換成新的key阶淘、value輸出。
    1.3對(duì)輸出的key、value進(jìn)行分區(qū)稳懒。
    1.4對(duì)不同分區(qū)的數(shù)據(jù),按照key進(jìn)行排序冯勉、分組。相同key的value放到一個(gè)集合中尺锚。
    1.5(可選)分組后的數(shù)據(jù)進(jìn)行歸約珠闰。
    2.reduce任務(wù)處理
    2.1對(duì)多個(gè)map任務(wù)的輸出,按照不同的分區(qū)瘫辩,通過(guò)網(wǎng)絡(luò)傳輸?shù)讲煌膔educe節(jié)點(diǎn)伏嗜。
    2.2對(duì)多個(gè)map任務(wù)的輸出進(jìn)行合并、排序伐厌。執(zhí)行reduce函數(shù)的具體數(shù)據(jù)處理邏輯承绸,對(duì)輸入的key、value處理挣轨,轉(zhuǎn)換成新的key军熏、value輸出。
    2.3將reduce的計(jì)算結(jié)果輸出保存到文件中卷扮。

【MapReduce的主要設(shè)計(jì)思想和特征】

1荡澎、向“外”橫向擴(kuò)展,而非向“上”縱向擴(kuò)展(Scale “out", not “up”)
即MapReduce集群的構(gòu)筑選用價(jià)格便宜晤锹、易于擴(kuò)展的大量低端商用服務(wù)器摩幔,而非價(jià)格昂貴、不易擴(kuò)展的高端服務(wù)器鞭铆。
對(duì)于大規(guī)模數(shù)據(jù)處理或衡,由于有大量數(shù)據(jù)存儲(chǔ)需要,基于低端服務(wù)器的集群遠(yuǎn)比基于高端服務(wù)器的集群優(yōu)越车遂。
2封断、失效被認(rèn)為是常態(tài)(Assume failures are common)
MapReduce集群中使用大量的低端服務(wù)器,因此節(jié)點(diǎn)硬件失效和軟件出錯(cuò)是常態(tài)舶担。
MapReduce并行計(jì)算軟件框架使用了多種有效的機(jī)制坡疼,如節(jié)點(diǎn)自動(dòng)重啟技術(shù),使集群和計(jì)算框架具有對(duì)付節(jié)點(diǎn)失效的健壯性衣陶,能有效處理失效節(jié)點(diǎn)的檢測(cè)和恢復(fù)回梧。當(dāng)失效節(jié)點(diǎn)恢復(fù)后能自動(dòng)無(wú)縫加入集群,不會(huì)因?yàn)楣?jié)點(diǎn)失效而影響計(jì)算服務(wù)的質(zhì)量祖搓。
3狱意、處理向數(shù)據(jù)遷移(Moving processing to the data)
MapReduce采用了數(shù)據(jù)/代碼互定位的技術(shù)方法,計(jì)算節(jié)點(diǎn)盡量負(fù)責(zé)計(jì)算其本地存儲(chǔ)的數(shù)據(jù)拯欧,以發(fā)揮數(shù)據(jù)本地化特點(diǎn)(locality),僅當(dāng)節(jié)點(diǎn)無(wú)法處理本地?cái)?shù)據(jù)時(shí)详囤,再采用就近原則尋找其它可用計(jì)算節(jié)點(diǎn),并把數(shù)據(jù)傳送到該可用計(jì)算節(jié)點(diǎn)。
4藏姐、順序處理數(shù)據(jù)隆箩、避免隨機(jī)訪(fǎng)問(wèn)數(shù)據(jù)(Process data sequentially and avoid random access)
5、為應(yīng)用開(kāi)發(fā)者隱藏系統(tǒng)層細(xì)節(jié)(Hide system-level details from the application developer)
大規(guī)模數(shù)據(jù)處理時(shí)程序員需要考慮諸如數(shù)據(jù)分布存儲(chǔ)管理羔杨、數(shù)據(jù)分發(fā)捌臊、數(shù)據(jù)通信和同步、計(jì)算結(jié)果收集等諸多細(xì)節(jié)問(wèn)題?兜材。MapReduce提供了一種抽象機(jī)制隔離系統(tǒng)層細(xì)節(jié)理澎,以致力于應(yīng)用本身的算法設(shè)計(jì)。

【MapReduce提供的主要功能】

1曙寡、任務(wù)調(diào)度:計(jì)算作業(yè)(job)被細(xì)分為多個(gè)計(jì)算任務(wù)(tasks), 為任務(wù)分配計(jì)算節(jié)點(diǎn); 同時(shí)負(fù)責(zé)監(jiān)控節(jié)點(diǎn)的執(zhí)行狀態(tài)和計(jì)算性能優(yōu)化處理, 如對(duì)最慢的計(jì)算任務(wù)采用多備份執(zhí)行糠爬、選最快完成者作為結(jié)果。
2举庶、數(shù)據(jù)/代碼互定位:減少數(shù)據(jù)通信执隧,本地化數(shù)據(jù)處理,即一個(gè)計(jì)算節(jié)點(diǎn)盡可能處理其本地磁盤(pán)上所分布存儲(chǔ)的數(shù)據(jù)户侥,實(shí)現(xiàn)了代碼向數(shù)據(jù)的遷移镀琉;當(dāng)無(wú)法進(jìn)行這種本地化數(shù)據(jù)處理時(shí),盡可能就近尋找數(shù)據(jù)以減少通信延遲蕊唐。
3屋摔、出錯(cuò)處理:MapReducer能檢測(cè)并隔離出錯(cuò)節(jié)點(diǎn),將調(diào)度分配新的節(jié)點(diǎn)接管出錯(cuò)節(jié)點(diǎn)的計(jì)算任務(wù)
?4刃泌、Combiner和Partitioner:為了減少數(shù)據(jù)通信開(kāi)銷(xiāo)凡壤,中間結(jié)果數(shù)據(jù)進(jìn)入reduce節(jié)點(diǎn)前需要進(jìn)行合并(combine)處理,把具有同樣主鍵的數(shù)據(jù)合并到一起避免重復(fù)傳送; 一個(gè)reducer節(jié)點(diǎn)所處理的數(shù)據(jù)可能會(huì)來(lái)自多個(gè)map節(jié)點(diǎn)署尤。因此, map節(jié)點(diǎn)輸出的中間結(jié)果需使用一定的策略進(jìn)行適當(dāng)?shù)膭澐?partitioner)處理耙替,保證相關(guān)數(shù)據(jù)發(fā)送到同一個(gè)reducer節(jié)點(diǎn)。

【Mapreduce之JobTracker】

JobTracker主要負(fù)責(zé)資源監(jiān)控和作業(yè)調(diào)度曹体。JobTracker監(jiān)控所有TaskTracker與作業(yè)的健康狀況俗扇,一旦發(fā)現(xiàn)失敗情況后,其會(huì)將相應(yīng)的任務(wù)轉(zhuǎn)移到其它節(jié)點(diǎn)箕别。同時(shí)铜幽,JobTracker會(huì)跟蹤任務(wù)的執(zhí)行進(jìn)度、資源使用量等信息串稀,并將這些信息告訴任務(wù)調(diào)度器除抛,而調(diào)度器會(huì)在資源出現(xiàn)空閑時(shí),選擇合適的任務(wù)使用這些資源母截。在Hadoop中到忽,任務(wù)調(diào)度器是一個(gè)可插拔的模塊,用戶(hù)可以根據(jù)自己的需要設(shè)計(jì)相應(yīng)的調(diào)度器。

【Mapreduce之TaskTracker】

TaskTracker會(huì)周期性地通過(guò)Heartbeat將本節(jié)點(diǎn)上資源的使用情況和任務(wù)的運(yùn)行進(jìn)度匯報(bào)給JobTracker喘漏,同時(shí)接收J(rèn)obTracker發(fā)送過(guò)來(lái)的命令并執(zhí)行相應(yīng)的操作(例如啟動(dòng)新任務(wù)护蝶、殺死任務(wù)等)。TaskTracker使用“slot”等量劃分本節(jié)點(diǎn)的數(shù)量翩迈,“slot”代表計(jì)算資源(CPU持灰、內(nèi)存等)。一個(gè)Task獲取到一個(gè)slot后才有機(jī)會(huì)運(yùn)行负饲,而Hadoop調(diào)度器的作用就是將各個(gè)TaskTracker上的空閑slot分配給Task使用堤魁。Slot分為Map slot和Reduce slot兩種,分別提供Map Task和Reduce Task绽族。TaskTracker通過(guò)slot數(shù)目限定Task的并發(fā)度姨涡。

【Mapreduce之Task】

Task分為Map Task和Reduce Task兩種,均由TaskTracker啟動(dòng)吧慢。HDFS以固定大小的block為基本單位存儲(chǔ)數(shù)據(jù)涛漂,而對(duì)于MapReduce而言,其處理基本單位是分片(split)检诗。split是一個(gè)邏輯概念匈仗,它只包含一些元數(shù)據(jù)信息,比如數(shù)據(jù)起始位置逢慌、數(shù)據(jù)長(zhǎng)度悠轩、數(shù)據(jù)所在節(jié)點(diǎn)等等。它的劃分方法完全由用戶(hù)自己決定攻泼,但是建議split的劃分大小與HDFS的block大小一致火架。但需要注意的是,split的多少?zèng)Q定Map Task的數(shù)目忙菠,因?yàn)槊總€(gè)split會(huì)交由一個(gè)Map Task處理何鸡。因此,合理地設(shè)置Job中Tasks數(shù)的大小能顯著的改善Hadoop執(zhí)行的性能牛欢。增加task的個(gè)數(shù)會(huì)增加系統(tǒng)框架的開(kāi)銷(xiāo)骡男,但同時(shí)也會(huì)增強(qiáng)負(fù)載均衡并降低任務(wù)失敗的開(kāi)銷(xiāo)。

【經(jīng)典MapReduce(MRv1)的局限性】

經(jīng)典MapReduce的最嚴(yán)重的限制主要在于可伸縮性傍睹、資源利用和對(duì)與MapReduce不同的工作負(fù)載的支持隔盛。在MapReduce框架中,作業(yè)執(zhí)行受JobTracker和TaskTracker進(jìn)程控制拾稳。大型的Hadoop集群會(huì)出現(xiàn)單個(gè)JobTracker導(dǎo)致的可伸縮性瓶頸吮炕。
此外,較小和較大的Hadoop集群都從未最高效地使用他們的計(jì)算資源访得。在HadoopMapReduce中龙亲,每個(gè)從屬節(jié)點(diǎn)上的計(jì)算資源由集群管理員分解為固定數(shù)量的map和reduceslot,這些slot不可替代。設(shè)定mapslot和reduceslot的數(shù)量后俱笛,節(jié)點(diǎn)在任何時(shí)刻都不能運(yùn)行比mapslot更多的map任務(wù)捆姜,即使沒(méi)有reduce任務(wù)在運(yùn)行。這影響了集群的利用率迎膜,因?yàn)樵谒衜apslot都被使用時(shí)泥技,無(wú)法再使用任何reduceslot,即使它們可用磕仅,反之亦然珊豹。并且Hadoop設(shè)計(jì)為僅運(yùn)行MapReduce作業(yè)。隨著替代性的編程模型的出現(xiàn)榕订,除MapReduce外店茶,越來(lái)越需要為可通過(guò)高效的、公平的方式在同一個(gè)集群上運(yùn)行并共享資源的其他編程模型提供支持劫恒。

【YARN:下一代Hadoop計(jì)算平臺(tái)】

YARN(YetAnotherResourceNegotiator)是Hadoop2.0版本為集群引入的一個(gè)資源管理層贩幻。基本思想是將JobTracker的兩個(gè)主要功能:資源管理作業(yè)調(diào)度和監(jiān)控分離两嘴,它將JobTracker守護(hù)進(jìn)程的職責(zé)分離了出來(lái)丛楚。其中資源管理器(ResourceManager,RM)用來(lái)代替集群管理器憔辫,ApplicationMaster(AM)代替一個(gè)專(zhuān)用且短暫的JobTracker趣些,節(jié)點(diǎn)管理器(NodeManager,NM)代替TaskTracker贰您,一個(gè)分布式應(yīng)用程序代替一個(gè)MapReduce作業(yè)坏平。與第一版Hadoop中經(jīng)典的MapReduce引擎相比,YARN在可伸縮性锦亦、效率和靈活性上有著明顯的優(yōu)勢(shì)舶替。小型和大型Hadoop集群都從YARN中受益匪淺。對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)這些更改幾乎也是透明的孽亲,因此可以使用相同的MapReduceAPI和CLI運(yùn)行未經(jīng)修改的MapReduce作業(yè)坎穿。

【YARN:Container】

Container是YARN中的資源抽象展父,它封裝了某個(gè)節(jié)點(diǎn)上的多維資源返劲,如CPU、內(nèi)存栖茉、磁盤(pán)篮绿、網(wǎng)絡(luò)等。當(dāng)ApplicationMaster向資源管理器RM申請(qǐng)資源時(shí)吕漂,RM向AM返回的資源便是用Container表示的亲配。YARN會(huì)為每個(gè)任務(wù)分配一個(gè)Container,且該任務(wù)只能使用該Container中描述的資源。Container是一個(gè)動(dòng)態(tài)資源劃分單位吼虎,是根據(jù)應(yīng)用程序的需求自動(dòng)生成的犬钢。目前,YARN僅支持CPU和內(nèi)存兩種資源思灰。既然一個(gè)Container指的是具體節(jié)點(diǎn)上的計(jì)算資源玷犹,這就意味著Container中必定含有計(jì)算資源的位置信息:計(jì)算資源位于哪個(gè)機(jī)架的哪臺(tái)機(jī)器上。所以應(yīng)用在請(qǐng)求某個(gè)Container時(shí)洒疚,其實(shí)是向某臺(tái)機(jī)器發(fā)起請(qǐng)求歹颓,請(qǐng)求這臺(tái)機(jī)器上的CPU和內(nèi)存資源。任何一個(gè)job或application必須運(yùn)行在一個(gè)或多個(gè)Container中油湖,在Yarn框架中巍扛,ResourceManager只負(fù)責(zé)告訴ApplicationMaster哪些Containers可以用,ApplicationMaster還需要去找NodeManager請(qǐng)求分配具體的Container乏德。

【YARN:ResourceManager(RM)】

RM是一個(gè)全局的資源管理器,負(fù)責(zé)整個(gè)系統(tǒng)的資源管理和分配撤奸。它主要由兩個(gè)組件構(gòu)成:調(diào)度器(Scheduler)和應(yīng)用程序管理器(Applications Manager,ASM)喊括。(1)調(diào)度器(分配Container)根據(jù)容量寂呛、隊(duì)列等限制條件,將系統(tǒng)中的資源分配給各個(gè)正在運(yùn)行的應(yīng)用程序瘾晃。它不再?gòu)氖氯魏闻c具體應(yīng)用程序相關(guān)的工作贷痪,比如不負(fù)責(zé)監(jiān)控或者跟蹤應(yīng)用的執(zhí)行狀態(tài)等,也不負(fù)責(zé)重新啟動(dòng)因應(yīng)用執(zhí)行失敗或者硬件故障而產(chǎn)生的失敗任務(wù)蹦误,這些均交由應(yīng)用程序相關(guān)的ApplicationMaster完成劫拢。調(diào)度器僅根據(jù)各個(gè)應(yīng)用程序的資源需求進(jìn)行資源分配。此外强胰,該調(diào)度器是一個(gè)可插拔的組件舱沧,用戶(hù)可根據(jù)自己的需要設(shè)計(jì)新的調(diào)度器,YARN提供了多種直接可用的調(diào)度器偶洋,比如Fair Scheduler和Capacity Scheduler等熟吏。(2)應(yīng)用程序管理器,負(fù)責(zé)管理整個(gè)系統(tǒng)中所有應(yīng)用程序玄窝,包括應(yīng)用程序提交牵寺、與調(diào)度器協(xié)商資源以啟動(dòng)ApplicationMaster、監(jiān)控ApplicationMaster運(yùn)行狀態(tài)并在失敗時(shí)重新啟動(dòng)等恩脂。

【YARN:ApplicationMaster(AM)和NodeManager(NM)】

在用戶(hù)提交一個(gè)應(yīng)用程序時(shí)帽氓,ApplicationMaster 作為輕量型進(jìn)程實(shí)例會(huì)啟動(dòng)來(lái)協(xié)調(diào)應(yīng)用程序內(nèi)的所有任務(wù)的執(zhí)行。這包括監(jiān)視任務(wù)俩块,重新啟動(dòng)失敗的任務(wù)黎休,推測(cè)性地運(yùn)行緩慢的任務(wù)浓领,以及計(jì)算應(yīng)用程序計(jì)數(shù)器值的總和。這些職責(zé)以前分配給所有作業(yè)的單個(gè) JobTracker势腮。ApplicationMaster 和屬于它的應(yīng)用程序的任務(wù)联贩,在受 NodeManager 控制的資源容器中運(yùn)行。NodeManager(NM)則是每個(gè)節(jié)點(diǎn)上的資源和任務(wù)管理器捎拯。一方面撑蒜,它定時(shí)地向RM匯報(bào)本節(jié)點(diǎn)的資源使用情況和Container運(yùn)行狀態(tài);另一方面玄渗,它接受并處理來(lái)自AM的Container啟動(dòng)/停止等各種請(qǐng)求座菠。NodeManager沒(méi)有固定數(shù)量的map和reduce slots,它是TaskTracker的一種更加普通和高效的版本藤树。

44. 【數(shù)據(jù)庫(kù) VS 數(shù)據(jù)倉(cāng)庫(kù)】

數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)其實(shí)是一樣的或者及其相似的浴滴,都是通過(guò)某個(gè)數(shù)據(jù)庫(kù)軟件,基于某種數(shù)據(jù)模型來(lái)組織岁钓、管理數(shù)據(jù)升略。數(shù)據(jù)庫(kù)通常更關(guān)注業(yè)務(wù)交易處理(OLTP),而數(shù)據(jù)倉(cāng)庫(kù)更關(guān)注數(shù)據(jù)分析層面(OLAP)屡限,由此產(chǎn)生的數(shù)據(jù)庫(kù)模型上也會(huì)有很大的差異品嚣。
數(shù)據(jù)庫(kù)通常追求交易的速度,交易完整性钧大,數(shù)據(jù)的一致性等翰撑,在數(shù)據(jù)庫(kù)模型上主要遵從范式模型,從而盡可能減少數(shù)據(jù)冗余啊央,保證引用完整性眶诈。數(shù)據(jù)倉(cāng)庫(kù)是一個(gè)面向主題的(Subject Oriented),集成的(Integrate)瓜饥,相對(duì)穩(wěn)定的(Non-volatile)逝撬,反映歷史變化(Time Variant)的數(shù)據(jù)集合,用于支持管理決策乓土。主要區(qū)別在于:數(shù)據(jù)庫(kù)是面向事務(wù)的設(shè)計(jì)宪潮,數(shù)據(jù)倉(cāng)庫(kù)是面向主題設(shè)計(jì)的;數(shù)據(jù)庫(kù)一般存儲(chǔ)在線(xiàn)交易數(shù)據(jù),數(shù)據(jù)倉(cāng)庫(kù)存儲(chǔ)的一般是歷史數(shù)據(jù);數(shù)據(jù)庫(kù)設(shè)計(jì)是盡量避免冗余趣苏,數(shù)據(jù)倉(cāng)庫(kù)在設(shè)計(jì)時(shí)有意引入冗余;數(shù)據(jù)庫(kù)是為了捕獲數(shù)據(jù)而設(shè)計(jì)狡相,數(shù)據(jù)倉(cāng)庫(kù)是為了分析數(shù)據(jù)而設(shè)計(jì);

45. 【Hive簡(jiǎn)介】

Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具。它提供了一系列的工具拦键,可以用來(lái)進(jìn)行數(shù)據(jù)提取轉(zhuǎn)化加載(ETL)谣光,這是一種可以存儲(chǔ)檩淋、查詢(xún)和分析存儲(chǔ)在 Hadoop 中的大規(guī)模數(shù)據(jù)的機(jī)制芬为,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表萄金。Hive 定義了簡(jiǎn)單的類(lèi)SQL查詢(xún)語(yǔ)言,稱(chēng)為HQL媚朦,可以將sql語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行氧敢,它允許熟悉SQL的用戶(hù)查詢(xún)數(shù)據(jù),其優(yōu)點(diǎn)是學(xué)習(xí)成本低询张,可以通過(guò)類(lèi)SQL語(yǔ)句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì)孙乖,不必開(kāi)發(fā)專(zhuān)門(mén)的MapReduce應(yīng)用,十分適合數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析份氧。同時(shí)唯袄,這個(gè)語(yǔ)言也允許熟悉MapReduce開(kāi)發(fā)者的開(kāi)發(fā)自定義的mapper 和reducer來(lái)處理內(nèi)建的mapper和reducer無(wú)法完成的復(fù)雜的分析工作。

46. 【Hive體系架構(gòu)】

Hive是客戶(hù)端服務(wù)器(C/S)模式蜗帜。
服務(wù)端組件:
Driver組件:該組件包括Complier恋拷、Optimizer和Executor,它的作用是將我們寫(xiě)的HiveQL(類(lèi)SQL)語(yǔ)句進(jìn)行解析厅缺、編譯優(yōu)化蔬顾,生成執(zhí)行計(jì)劃,然后調(diào)用底層的mapreduce計(jì)算框架湘捎。
Metastore組件:元數(shù)據(jù)服務(wù)組件诀豁,這個(gè)組件存儲(chǔ)hive的元數(shù)據(jù),hive的元數(shù)據(jù)存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)里窥妇,hive支持的關(guān)系數(shù)據(jù)庫(kù)有derby舷胜、mysql。元數(shù)據(jù)對(duì)于hive十分重要活翩,因此hive支持把metastore服務(wù)獨(dú)立出來(lái)逞带,安裝到遠(yuǎn)程的服務(wù)器集群里,從而解耦hive服務(wù)和metastore服務(wù)纱新,保證hive運(yùn)行的健壯性展氓。
Thrift服務(wù):thrift是facebook開(kāi)發(fā)的一個(gè)軟件框架,它用來(lái)進(jìn)行可擴(kuò)展且跨語(yǔ)言的服務(wù)的開(kāi)發(fā)脸爱,hive集成了該服務(wù)遇汞,能讓不同的編程語(yǔ)言調(diào)用hive的接口。
客戶(hù)端組件:
CLI:command line interface簿废,命令行接口空入。
Thrift客戶(hù)端:hive架構(gòu)的許多客戶(hù)端接口是建立在thrift客戶(hù)端之上,包括JDBC和ODBC接口族檬。
WEBGUI:hive客戶(hù)端提供了一種通過(guò)網(wǎng)頁(yè)的方式訪(fǎng)問(wèn)hive所提供的服務(wù)歪赢。這個(gè)接口對(duì)應(yīng)hive的hwi組件(hive web interface),使用前要啟動(dòng)hwi服務(wù)单料。

47. 【Hive特點(diǎn)】

1埋凯、Hive 通過(guò)類(lèi) SQL 來(lái)分析大數(shù)據(jù)点楼,而避免了寫(xiě) MapReduce 程序來(lái)分析數(shù)據(jù),這樣使得分析數(shù)據(jù)更容易
2白对、將數(shù)據(jù)映射成數(shù)據(jù)庫(kù)和一張張的表掠廓,庫(kù)和表的元數(shù)據(jù)信息一般存在關(guān)系型數(shù)據(jù)庫(kù)上(比如 MySQL)
3、本身并不提供數(shù)據(jù)的存儲(chǔ)功能甩恼,數(shù)據(jù)一般都是存儲(chǔ)在 HDFS 上的(對(duì)數(shù)據(jù)完整性蟀瞧、格式要求并不嚴(yán)格)
4、容易擴(kuò)展自己的存儲(chǔ)能力和計(jì)算能力条摸,這個(gè)是繼承自 hadoop (適用于大規(guī)模的并行計(jì)算)
5悦污、Hive支持用戶(hù)自定義函數(shù),用戶(hù)可以根據(jù)自己的需求來(lái)實(shí)現(xiàn)自己的函數(shù)
6钉蒲、良好的容錯(cuò)性塞关,節(jié)點(diǎn)出現(xiàn)問(wèn)題SQL仍可完成執(zhí)行
7、專(zhuān)為 OLAP(在線(xiàn)分析處理) 設(shè)計(jì)子巾,不支持事務(wù)

48. 【Hive數(shù)據(jù)模型】

Hive沒(méi)有專(zhuān)門(mén)的數(shù)據(jù)存儲(chǔ)格式帆赢,也沒(méi)有為數(shù)據(jù)建立索引,用戶(hù)可以非常自由的組織Hive中的表线梗,只需要在創(chuàng)建表的時(shí)候告訴
Hive數(shù)據(jù)中的列分隔符和行分隔符椰于,Hive就可以解析數(shù)據(jù)。Hive中所有的數(shù)據(jù)都存儲(chǔ)在HDFS中仪搔,Hive中包含以下數(shù)據(jù)模型:表(Table)瘾婿,外部表(ExternalTable),分區(qū)(Partition)烤咧,桶(Bucket)偏陪。
表:Hive中的Table和數(shù)據(jù)庫(kù)中的Table在概念上是類(lèi)似的,每一個(gè)Table在Hive中都有一個(gè)相應(yīng)的目錄存儲(chǔ)數(shù)據(jù)煮嫌。
外部表:指向已經(jīng)在HDFS中存在的數(shù)據(jù)笛谦,和Table在元數(shù)據(jù)的組織上是相同的,但實(shí)際數(shù)據(jù)的存儲(chǔ)則有較大的差異昌阿。當(dāng)刪除一個(gè)外部表時(shí)饥脑,僅刪除元數(shù)據(jù),表中的數(shù)據(jù)不會(huì)真正被刪懦冰。
分區(qū):在Hive中灶轰,表中的一個(gè)Partition對(duì)應(yīng)于表下的一個(gè)目錄,所有的Partition的數(shù)據(jù)都存儲(chǔ)在對(duì)應(yīng)的目錄中刷钢。方便對(duì)表的管理以及提高查詢(xún)效率笋颤。
桶:Buckets對(duì)指定列計(jì)算hash,根據(jù)hash值切分?jǐn)?shù)據(jù)内地,目的是為了并行伴澄,每一個(gè)Bucket對(duì)應(yīng)一個(gè)文件赋除。

49. 【Hive部署方式】

1、內(nèi)嵌模式:使用內(nèi)嵌的Derby數(shù)據(jù)庫(kù)作為存儲(chǔ)元數(shù)據(jù)秉版,Derby只能接受一個(gè)Hive會(huì)話(huà)的訪(fǎng)問(wèn)贤重,不能用于生產(chǎn)茬祷; hive服務(wù)清焕、metastore服務(wù)、derby服務(wù)運(yùn)行在同一個(gè)進(jìn)程中祭犯。
2秸妥、本地模式:本地安裝mysql,替代derby存儲(chǔ)元數(shù)據(jù)沃粗,是一個(gè)多用戶(hù)多客戶(hù)端的模式粥惧,作為公司內(nèi)部使用Hive;hive服務(wù)和metastore服務(wù)運(yùn)行在同一個(gè)進(jìn)程中最盅,mysql數(shù)據(jù)庫(kù)則是單獨(dú)的進(jìn)程突雪,可以同一臺(tái)機(jī)器,也可以在遠(yuǎn)程機(jī)器上涡贱。
3咏删、遠(yuǎn)程模式(Remote): 遠(yuǎn)程安裝mysql 替代derby存儲(chǔ)元數(shù)據(jù);Hive服務(wù)和metastore在不同的進(jìn)程內(nèi)问词,也可能是不同的機(jī)器督函;

50. 【Hive常用的文件存儲(chǔ)格式】

  1. textfile:文本文件
    Hive默認(rèn)格式,數(shù)據(jù)不做壓縮激挪,磁盤(pán)開(kāi)銷(xiāo)大辰狡,數(shù)據(jù)解析開(kāi)銷(xiāo)大。
  2. Sequencefile:二進(jìn)制文件
    SequenceFile是Hadoop API 提供的一種二進(jìn)制文件垄分,它將數(shù)據(jù)(key,value)的形式序列化到文件中宛篇。
    這種二進(jìn)制文件內(nèi)部使用Hadoop的標(biāo)準(zhǔn)的Writable接口實(shí)現(xiàn)序列化和反序列化。它與Hadoop API中的MapFile是互相兼容的薄湿。
    Hive中的SequenceFile繼承自Hadoop API 的SequenceFile些己,不過(guò)它的key為空,使用value 存放實(shí)際的值嘿般, 這樣是為了避免MR 在運(yùn)行map階段的排序過(guò)程段标。
  3. Rcfile:
    RCFile是Hive推出的一種專(zhuān)門(mén)面向列的數(shù)據(jù)格式。 它遵循“先按列劃分炉奴,再垂直劃分”的設(shè)計(jì)理念逼庞。
    當(dāng)查詢(xún)過(guò)程中,針對(duì)它并不關(guān)心的列時(shí)瞻赶,它會(huì)在IO上跳過(guò)這些列赛糟。但在讀取所有列的情況下派任,RCFile的性能反而沒(méi)有SequenceFile高。

51. 【Hive數(shù)據(jù)類(lèi)型】

  1. 基礎(chǔ)數(shù)據(jù)類(lèi)型璧南,與關(guān)系型數(shù)據(jù)庫(kù)類(lèi)似:
    TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,BINARY,TIMESTAMP,DECIMAL,CHAR,VARCHAR,DATE掌逛。
  2. 復(fù)雜數(shù)據(jù)類(lèi)型:
    包括ARRAY,MAP,STRUCT,UNION,這些復(fù)雜類(lèi)型是由基礎(chǔ)類(lèi)型組成的司倚。
    ARRAY:ARRAY類(lèi)型是由一系列相同數(shù)據(jù)類(lèi)型元素組成的豆混,這些元素可以通過(guò)下標(biāo)來(lái)訪(fǎng)問(wèn)。比如有一個(gè)ARRAY類(lèi)型的變量fruits动知,它是由[‘a(chǎn)pple’,’orange’,’mango’]組成皿伺,那么可以通過(guò)fruits[1]來(lái)訪(fǎng)問(wèn)orange;
    MAP:MAP包含key->value鍵值對(duì)盒粮,可以通過(guò)key來(lái)訪(fǎng)問(wèn)元素鸵鸥。比如"userlist"是一個(gè)map類(lèi)型(其中username是key,password是value)丹皱,那么我們可以通過(guò)userlist[‘username’]來(lái)得到這個(gè)用戶(hù)對(duì)應(yīng)的password妒穴;
    STRUCT:STRUCT可以包含不同數(shù)據(jù)類(lèi)型的元素。這些元素可以通過(guò)點(diǎn)的方式來(lái)得到摊崭,比如user是一個(gè)STRUCT類(lèi)型讼油,那么可以通過(guò)user.address得到這個(gè)用戶(hù)的地址。

52. 【Hive HQL】

hive中的HQL是一種SQL方言爽室,支持絕大部分SQL-92標(biāo)準(zhǔn)汁讼,并對(duì)其做了一些擴(kuò)展。
數(shù)據(jù)庫(kù)操作:
創(chuàng)建數(shù)據(jù)庫(kù):hive > CREATE DATABASE IF NOT EXISTS test;
查看某個(gè)已存在的數(shù)據(jù)庫(kù):hive> DESCRIBE DATABASE test;
表操作:
CREATE TABLE IF NOT EXISTS test.student(
name STRING COMMENT 'student name',
age INT COMMENT 'student age')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/user/hive/warehouse/test.db/student';
查看表:hive> DESC FORMATTED student
刪除表:hive> DROP TABLE IF EXISTS test
增加表分區(qū):hive> ALTER TABLE test ADD PARTITION(x=x1,y=y2) LOCATION '/USER/TEST/X1/Y1'
刪除表分區(qū):hive> ALTER TABLE test DROP PARTITION(x=x1,y=y2)
更多關(guān)于HQL詳細(xì)語(yǔ)法可參考Hive官方使用手冊(cè)說(shuō)明:https://cwiki.apache.org/confluence/display/Hive/LanguageManual

53. 【hive大表關(guān)聯(lián)查詢(xún)數(shù)據(jù)傾斜解決方案】

傾斜原因:
map輸出數(shù)據(jù)按key Hash的分配到reduce中阔墩,由于key分布不均勻嘿架、業(yè)務(wù)數(shù)據(jù)本身的特性、建表時(shí)考慮不周啸箫、以及SQL語(yǔ)句編寫(xiě)不當(dāng)?shù)仍蛟斐傻膔educe 上的數(shù)據(jù)量差異過(guò)大耸彪。
解決方案

  1. 參數(shù)調(diào)節(jié):
    hive.map.aggr = true
    hive.groupby.skewindata=true
    有數(shù)據(jù)傾斜的時(shí)候進(jìn)行負(fù)載均衡,當(dāng)選項(xiàng)設(shè)定位true,生成的查詢(xún)計(jì)劃會(huì)有兩個(gè)MR Job忘苛。第一個(gè)MR Job中蝉娜,Map的輸出結(jié)果集合會(huì)隨機(jī)分布到Reduce中,每個(gè)Reduce做部分聚合操作扎唾,并輸出結(jié)果召川,這樣處理的結(jié)果是相同的Group By Key有可能被分發(fā)到不同的Reduce中,從而達(dá)到負(fù)載均衡的目的胸遇;第二個(gè)MR Job再根據(jù)預(yù)處理的數(shù)據(jù)結(jié)果按照Group By Key 分布到 Reduce 中(這個(gè)過(guò)程可以保證相同的 Group By Key 被分布到同一個(gè)Reduce中)荧呐,最后完成最終的聚合操作。
  2. SQL 語(yǔ)句調(diào)節(jié):
    1)、選用join key分布最均勻的表作為驅(qū)動(dòng)表倍阐。做好列裁剪和filter操作概疆,以達(dá)到兩表做join 的時(shí)候,數(shù)據(jù)量相對(duì)變小的效果峰搪。
    2)岔冀、大小表Join:
    使用map join讓小的維度表(1000 條以下的記錄條數(shù))先進(jìn)內(nèi)存。在map端完成reduce.
    4)概耻、大表Join大表:
    把空值的key變成一個(gè)字符串加上隨機(jī)數(shù)使套,把傾斜的數(shù)據(jù)分到不同的reduce上,由于null 值關(guān)聯(lián)不上咐蚯,處理后并不影響最終結(jié)果童漩。
    5)弄贿、count distinct大量相同特殊值:
    采用sum() group by的方式來(lái)替換count(distinct)完成計(jì)算春锋。

【數(shù)據(jù)庫(kù)事務(wù)四要素】

原子性(Atomicity):一個(gè)事務(wù)要么全部執(zhí)行,要么全部不執(zhí)行硕盹。一個(gè)事務(wù)不可能只執(zhí)行了一半就停止了懈叹。比如一個(gè)事情分為兩步完成才可以完成文留,那么這兩步必須同時(shí)完成爸吮,要么一步也不執(zhí)行翁授,絕不會(huì)停留在某一個(gè)中間狀態(tài)抬旺。如果事物執(zhí)行過(guò)程中渗磅,發(fā)生錯(cuò)誤错沽,系統(tǒng)會(huì)將事物的狀態(tài)回滾到最開(kāi)始的狀態(tài)谊娇。
一致性(Consistency):事務(wù)的運(yùn)行并不改變數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性肺孤。無(wú)論并發(fā)事務(wù)有多少個(gè),必須保證數(shù)據(jù)從一個(gè)一致性的狀態(tài)轉(zhuǎn)換到另一個(gè)一致性的狀態(tài)济欢。例如有 a赠堵、b 兩個(gè)賬戶(hù),分別都是10法褥。當(dāng)a增加5時(shí)茫叭,b也會(huì)隨著改變,總值20是不會(huì)改變的半等。
隔離性(Isolation):指兩個(gè)以上的事務(wù)不會(huì)出現(xiàn)交錯(cuò)執(zhí)行(可能會(huì)導(dǎo)致數(shù)據(jù)不一致)的狀態(tài)揍愁。如果有多個(gè)事務(wù),運(yùn)行在相同的時(shí)間內(nèi)杀饵,執(zhí)行相同的功能莽囤,事務(wù)的隔離性將確保每一事務(wù)在系統(tǒng)中認(rèn)為只有該事務(wù)在使用系統(tǒng)。這種屬性有時(shí)稱(chēng)為串行化切距,為了防止事務(wù)操作間的混淆朽缎,必須串行化或序列化請(qǐng)求,使得在同一時(shí)間僅有一個(gè)請(qǐng)求用于同一數(shù)據(jù)。
持久性(Durability):事務(wù)執(zhí)行成功以后,該事務(wù)對(duì)數(shù)據(jù)庫(kù)所作的更改永久保存在數(shù)據(jù)庫(kù)中饵沧,不會(huì)無(wú)緣無(wú)故的回滾锨络。

【行存儲(chǔ)和列存儲(chǔ)】

行式存儲(chǔ)把一行中的數(shù)據(jù)值串在一起存儲(chǔ)起來(lái),然后再存儲(chǔ)下一行的數(shù)據(jù)狼牺,以此類(lèi)推羡儿。行存儲(chǔ)適合數(shù)據(jù)存儲(chǔ)寫(xiě)入、更新較多的場(chǎng)景是钥,比如OLTP掠归。當(dāng)數(shù)據(jù)量很大時(shí),查詢(xún)性能遠(yuǎn)不及列存儲(chǔ)悄泥。像SQLserver虏冻,Oracle,mysql等傳統(tǒng)數(shù)據(jù)庫(kù)屬于行式數(shù)據(jù)庫(kù)范疇弹囚。列式存儲(chǔ)把一列中的數(shù)據(jù)值串在一起存儲(chǔ)起來(lái)厨相,然后再存儲(chǔ)下一列的數(shù)據(jù),以此類(lèi)推鸥鹉。列存儲(chǔ)不適合數(shù)據(jù)頻繁寫(xiě)入蛮穿、更新的場(chǎng)景,主要適合頻繁查詢(xún)的場(chǎng)景毁渗,大數(shù)據(jù)環(huán)境下優(yōu)勢(shì)更明顯践磅,比如分布式實(shí)時(shí)查詢(xún)。由于查詢(xún)中的選擇規(guī)則是通過(guò)列來(lái)定義的灸异,因此整個(gè)數(shù)據(jù)庫(kù)是自動(dòng)索引化的府适。按列存儲(chǔ)每個(gè)字段的數(shù)據(jù)聚集存儲(chǔ),在查詢(xún)只需要少數(shù)幾個(gè)字段的時(shí)候肺樟,能大大減少讀取的數(shù)據(jù)量檐春,同字段的數(shù)據(jù)聚集存儲(chǔ),也容易為這種聚集存儲(chǔ)設(shè)計(jì)更好的壓縮儡嘶、解壓算法喇聊,降低系統(tǒng)IO。Greenplum蹦狂、Vertica誓篱、Hbase等屬于列式數(shù)據(jù)庫(kù)。

【HBase 簡(jiǎn)介】

Apache HBase是一個(gè)高可靠性凯楔、高性能窜骄、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng)摆屯,利用HBase技術(shù)可在廉價(jià)PC上搭建起大規(guī)模存儲(chǔ)集群邻遏。
HBase利用Hadoop HDFS作為其文件存儲(chǔ)系統(tǒng)糠亩,基于行鍵、列鍵和時(shí)間戳建立索引准验,是一個(gè)可以隨機(jī)訪(fǎng)問(wèn)存儲(chǔ)和檢索數(shù)據(jù)的"NoSQL" 數(shù)據(jù)庫(kù)赎线。HBase不限制存儲(chǔ)的數(shù)據(jù)的種類(lèi),允許動(dòng)態(tài)的糊饱、靈活的數(shù)據(jù)模型垂寥,不用SQL語(yǔ)言,也不強(qiáng)調(diào)數(shù)據(jù)之間的關(guān)系另锋。HBase被設(shè)計(jì)成在一個(gè)服務(wù)器集群上運(yùn)行滞项,可以非常方便地橫向擴(kuò)展。
適用場(chǎng)景于場(chǎng)景:存在高并發(fā)讀寫(xiě)夭坪、表結(jié)構(gòu)的列族經(jīng)常需要調(diào)整文判、存儲(chǔ)結(jié)構(gòu)化或半結(jié)構(gòu)化數(shù)據(jù)、高并發(fā)的key-value存儲(chǔ)室梅、key隨機(jī)寫(xiě)入戏仓,有序存儲(chǔ)、針對(duì)每個(gè)key對(duì)應(yīng)的值需要多版本保存竞惋。

【Hbase 特點(diǎn)】

1柜去、海量存儲(chǔ)
Hbase適合存儲(chǔ)PB級(jí)別的海量數(shù)據(jù)灰嫉,在PB級(jí)別的數(shù)據(jù)以及采用廉價(jià)PC存儲(chǔ)的情況下拆宛,能在幾十到百毫秒內(nèi)返回?cái)?shù)據(jù)。
2讼撒、列式存儲(chǔ)
數(shù)據(jù)在表中是按某列的數(shù)據(jù)聚集存儲(chǔ)浑厚,數(shù)據(jù)即索引,只訪(fǎng)問(wèn)查詢(xún)涉及的列時(shí)根盒,可以大量降低系統(tǒng)的I/O
3钳幅、易擴(kuò)展
HBase底層基于HDFS,支持?jǐn)U展炎滞,并且可以隨時(shí)添加或者減少節(jié)點(diǎn)敢艰。
4、高可靠:基于zookeeper的協(xié)調(diào)服務(wù)册赛,能夠保證服務(wù)的高可用行钠导。HBase使用WAL和replication機(jī)制,前者保證數(shù)據(jù)寫(xiě)入時(shí)不會(huì)因?yàn)榧寒惓6鴮?dǎo)致寫(xiě)入數(shù)據(jù)的丟失森瘪,后者保證集群出現(xiàn)嚴(yán)重問(wèn)題時(shí)牡属,數(shù)據(jù)不會(huì)發(fā)生丟失和損壞。
5扼睬、稀疏存儲(chǔ)
傳統(tǒng)行數(shù)存儲(chǔ)的數(shù)據(jù)存在大量NULL的列逮栅,也需要占用存儲(chǔ)空間,造成存儲(chǔ)空間的浪費(fèi),在列族中HBase為空的列并不占用空間措伐,因此表可以設(shè)計(jì)的很稀疏特纤。
6、高性能
底層的LSM數(shù)據(jù)結(jié)構(gòu)侥加、Region分區(qū)叫潦、RowKey有序排列、主鍵索引和緩存機(jī)制使得HBase支持高并發(fā)用戶(hù)數(shù)的高速讀寫(xiě)訪(fǎng)問(wèn)官硝。

【Hbase 表邏輯結(jié)構(gòu)】

表(table):劃分?jǐn)?shù)據(jù)集合的概念矗蕊,和傳統(tǒng)的db中的表的概念是一樣的。
行鍵(RowKey):一行數(shù)據(jù)的唯一標(biāo)示氢架,要想操作(read/write)一條數(shù)據(jù)傻咖,必須通過(guò)行鍵,任何字符串都可以作為行鍵岖研。表中的行根據(jù)行鍵進(jìn)行排序存儲(chǔ)卿操。
列族(columnFamily):簡(jiǎn)單的認(rèn)為是一系列“列”的集合。列族是以單獨(dú)的文件進(jìn)行存儲(chǔ)孙援。
列限定符(columnQualifier):列族中的數(shù)據(jù)定位通過(guò)列限定符害淤,每個(gè)列族可以有一個(gè)或多個(gè)列成員(ColumnQualifier),列成員不需要在表定義時(shí)給出拓售,新的列族成員可以隨后按需窥摄、動(dòng)態(tài)加入。
單元格(cell):由行鍵础淤,列族:限定符崭放,時(shí)間戳唯一決定,Cell中的數(shù)據(jù)是沒(méi)有類(lèi)型的鸽凶,全部以字節(jié)碼形式存貯币砂,主要用來(lái)存儲(chǔ)數(shù)據(jù)。
時(shí)間戳(Timestamp):每個(gè)值都會(huì)有一個(gè)timestamp玻侥,作為該值特定版本的標(biāo)識(shí)符决摧。默認(rèn)情況下,timestamp代表了當(dāng)數(shù)據(jù)被寫(xiě)入的時(shí)間凑兰,但也可以在把數(shù)據(jù)放到cell時(shí)指定不同的timestamp掌桩。

【HBase 相關(guān)模塊】

HBaseMaster:用于協(xié)調(diào)多個(gè)RegionServer,偵測(cè)各個(gè)RegionServer之間的狀態(tài)票摇,并平衡RegionServer之間的負(fù)載拘鞋。負(fù)責(zé)分配Region給RegionServer。HBase允許多個(gè)Master節(jié)點(diǎn)共存矢门,但只有一個(gè)Master是提供服務(wù)的盆色,其他的Master節(jié)點(diǎn)處于待命的狀態(tài)灰蛙。當(dāng)正在工作的Master節(jié)點(diǎn)宕機(jī)時(shí),其他的Master則會(huì)接管HBase的集群隔躲。
RegionServer:一個(gè)RegionServer包括了多個(gè)Region摩梧。RegionServer的作用只是管理表格,以及實(shí)現(xiàn)讀寫(xiě)操作宣旱。Client直接連接RegionServer獲取HBase中的數(shù)據(jù)仅父。Region是真實(shí)存放HBase數(shù)據(jù)的地方,Region是HBase并行化的基本單元浑吟。如果當(dāng)一個(gè)表格很大笙纤,并由多個(gè)CF組成時(shí),那么表的數(shù)據(jù)將存放在多個(gè)Region组力,并且在每個(gè)Region中會(huì)關(guān)聯(lián)多個(gè)存儲(chǔ)的單元(Store)省容。
Zookeeper:作為HBaseMaster的HA解決方案。保證了至少有一個(gè)HBaseMaster處于運(yùn)行狀態(tài)燎字。并且Zookeeper負(fù)責(zé)Region和RegionServer的注冊(cè)腥椒。

【HBase 使用建議】

首先一點(diǎn)必須謹(jǐn)記:HBase并不適合所有問(wèn)題,其設(shè)計(jì)目標(biāo)并不是替代RDBMS候衍,而是對(duì)RDBMS的一個(gè)重要補(bǔ)充笼蛛,尤其是對(duì)大數(shù)據(jù)的場(chǎng)景。首先蛉鹿,要有足夠多數(shù)據(jù)滨砍,如有上億或上千億行數(shù)據(jù),HBase才會(huì)是一個(gè)很好的備選榨为。其次惨好,需要確保業(yè)務(wù)上可以不依賴(lài)RDBMS的額外特性,例如随闺,列數(shù)據(jù)類(lèi)型,二級(jí)索引,SQL查詢(xún)語(yǔ)言等蔓腐。再而矩乐,需要確保有足夠硬件規(guī)模。比如集群小于5個(gè)節(jié)點(diǎn)時(shí)并不能發(fā)揮出應(yīng)有的性能回论。一個(gè)HBase數(shù)據(jù)庫(kù)是否高效散罕,很大程度會(huì)和Row-Key的設(shè)計(jì)有關(guān)。因此傀蓉,如何設(shè)計(jì)Row-key是使用HBase時(shí)一個(gè)非常重要的話(huà)題欧漱。隨著數(shù)據(jù)訪(fǎng)問(wèn)方式的不同,Row-Key的設(shè)計(jì)也會(huì)有所不同葬燎。概括起來(lái)宗旨只有一個(gè)误甚,那就是盡可能使數(shù)據(jù)均勻的分布在集群中缚甩。例如當(dāng)客戶(hù)端需要頻繁的寫(xiě)一張表,隨機(jī)的RowKey會(huì)獲得更好的性能窑邦。當(dāng)客戶(hù)端需要頻繁的讀一張表擅威,有序的RowKey則會(huì)獲得更好的性能。對(duì)于時(shí)間連續(xù)的數(shù)據(jù)(例如log)冈钦,有序的RowKey會(huì)能方便查詢(xún)一段時(shí)間的數(shù)據(jù)(Scan操作)郊丛。

【HBase與RDBMS的對(duì)比】

HBase適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)。與傳統(tǒng)數(shù)據(jù)庫(kù)主要區(qū)別如下:
數(shù)據(jù)類(lèi)型:HBase只有簡(jiǎn)單的字符類(lèi)型瞧筛,所有的類(lèi)型都是交由用戶(hù)自己處理厉熟,它只保存字符串。而關(guān)系數(shù)據(jù)庫(kù)有豐富的類(lèi)型和存儲(chǔ)方式较幌;
數(shù)據(jù)操作:HBase只有很簡(jiǎn)單的插入庆猫、查詢(xún)、刪除绅络、清空等操作月培,表和表之間是分離的,沒(méi)有復(fù)雜的表和表之間的關(guān)系恩急,而傳統(tǒng)數(shù)據(jù)庫(kù)通常有各式各樣的函數(shù)和連接操作杉畜;
存儲(chǔ)模式:HBase基于列存儲(chǔ),每個(gè)列族由幾個(gè)文件保存衷恭,不同列族的文件是分離的此叠。傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)是基于表格結(jié)構(gòu)和行模式保存的;
可伸縮性: HBase能夠容易的增加或者減少硬件數(shù)量随珠;
數(shù)據(jù)維護(hù):HBase更新操作時(shí)灭袁,舊的版本仍然保留,實(shí)際上時(shí)插入了新數(shù)據(jù)窗看。傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)是替換修改茸歧。

【HBase表的設(shè)計(jì)(RowKey的設(shè)計(jì))】

Rowkey的設(shè)計(jì)一般都是根據(jù)具體業(yè)務(wù)需求來(lái)的,總的來(lái)說(shuō)显沈,需要根據(jù)rowkey的字典序排列软瞎,唯一性特性設(shè)計(jì)出高效讀取和負(fù)載均衡的rowkey,以下是幾個(gè)大概的設(shè)計(jì)原則:
長(zhǎng)度原則:越小越好拉讯,最長(zhǎng)不能超過(guò)64kb涤浇,一般10-100個(gè)字節(jié);
個(gè)數(shù)原則:指列簇的個(gè)數(shù)魔慷,盡量控制在2個(gè)以?xún)?nèi)只锭;
散列原則:region是根據(jù)rowkey劃分的,那么rowkey的散列就可以使得數(shù)據(jù)的負(fù)載變得均衡院尔,一般來(lái)說(shuō)可以通過(guò) :
加隨機(jī)前綴蜻展、加hash值喉誊、rowkey反轉(zhuǎn)等方法;
rowkey唯一原則:必須在設(shè)計(jì)上保證其唯一性铺呵,rowkey是按照字典順序排序存儲(chǔ)的裹驰,因此設(shè)計(jì)rowkey的時(shí)候,要充分利用這個(gè)排序的特點(diǎn)片挂,將經(jīng)常讀取的數(shù)據(jù)存儲(chǔ)到一塊幻林,將最近可能會(huì)被訪(fǎng)問(wèn)的數(shù)據(jù)放到一塊。 比如:
我們需要某個(gè)時(shí)間端的數(shù)據(jù)進(jìn)行分析音念,那么以timestamp-key的形式沪饺,我們很容易就可以查詢(xún)到連續(xù)的時(shí)間段的數(shù)據(jù)。

【Hbase表的設(shè)計(jì)(預(yù)分區(qū))】

默認(rèn)的hbase會(huì)有一個(gè)region闷愤,當(dāng)數(shù)據(jù)越來(lái)越大整葡,那么這個(gè)region管理的數(shù)據(jù)越來(lái)越多,當(dāng)超過(guò)閾值就會(huì)發(fā)生split操作讥脐,而split操作會(huì)導(dǎo)致我們的hbase有一段不可用的時(shí)間遭居,那么為了盡量規(guī)避這個(gè)問(wèn)題,所以我們需要預(yù)分區(qū)旬渠。所謂預(yù)分區(qū)其實(shí)就是預(yù)先劃分好region俱萍,每個(gè)region都有一個(gè)startkey和一個(gè)endkey,這樣也就確定了這個(gè)region所管理的數(shù)據(jù)的范圍告丢。劃分原則:首先需要對(duì)數(shù)據(jù)的分布和數(shù)據(jù)量的增長(zhǎng)有一個(gè)預(yù)測(cè)枪蘑,根據(jù)數(shù)據(jù)量確定分區(qū)數(shù),然后再對(duì)數(shù)據(jù)進(jìn)行合理的rowkey設(shè)計(jì)岖免,以一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明:
假設(shè)預(yù)測(cè)數(shù)據(jù)會(huì)有50G岳颇,那么劃分為5個(gè)分區(qū),分別是:[-∞ - 1)颅湘,[1 - 2)话侧,[2 - 3),[3 - 4)栅炒,[4 - +∞)掂摔,
rowkey可以設(shè)計(jì)成 [0-5)的隨機(jī)數(shù) + key,這樣數(shù)據(jù)就會(huì)均勻的分布在預(yù)先設(shè)計(jì)好的分區(qū)上赢赊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市级历,隨后出現(xiàn)的幾起案子释移,更是在濱河造成了極大的恐慌,老刑警劉巖寥殖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玩讳,死亡現(xiàn)場(chǎng)離奇詭異涩蜘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)熏纯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)同诫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人樟澜,你說(shuō)我怎么就攤上這事误窖。” “怎么了秩贰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵霹俺,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我毒费,道長(zhǎng)丙唧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任觅玻,我火速辦了婚禮想际,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溪厘。我一直安慰自己胡本,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布桩匪。 她就那樣靜靜地躺著打瘪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪傻昙。 梳的紋絲不亂的頭發(fā)上闺骚,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音妆档,去河邊找鬼僻爽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贾惦,可吹牛的內(nèi)容都是我干的胸梆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼须板,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碰镜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起习瑰,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绪颖,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后甜奄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體柠横,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窃款,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牍氛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晨继。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖搬俊,靈堂內(nèi)的尸體忽然破棺而出紊扬,到底是詐尸還是另有隱情,我是刑警寧澤悠抹,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布珠月,位于F島的核電站,受9級(jí)特大地震影響楔敌,放射性物質(zhì)發(fā)生泄漏啤挎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一卵凑、第九天 我趴在偏房一處隱蔽的房頂上張望庆聘。 院中可真熱鬧,春花似錦勺卢、人聲如沸伙判。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宴抚。三九已至,卻和暖如春甫煞,著一層夾襖步出監(jiān)牢的瞬間菇曲,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工抚吠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留常潮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓楷力,卻偏偏與公主長(zhǎng)得像喊式,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萧朝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容