Hadoop的前世今生
什么是大數(shù)據(jù)
各行各業(yè)都會產(chǎn)生大量的數(shù)據(jù)储玫,比如社交網(wǎng)站的意見觀點,電商平臺人們?yōu)g覽網(wǎng)頁停留的時間萤皂,交通運輸每天產(chǎn)生的數(shù)據(jù)等等撒穷。這些數(shù)據(jù)大多不是結(jié)構(gòu)化的,一般來說都是半結(jié)構(gòu)化或者非結(jié)構(gòu)化的
在以前裆熙,我們的處理能力達不到端礼,所以很多數(shù)據(jù)要么沒有存起來,要么沒有利用起來入录。而現(xiàn)在數(shù)據(jù)越來越集中在云端的服務(wù)器上温赔,并且計算能力已經(jīng)今非昔比了,我們完全有能力對大數(shù)據(jù)進行存儲和分析霜第。
所以所謂的大數(shù)據(jù)指的就是丐怯,原有的計算能力無法處理的大批量的數(shù)據(jù),而大數(shù)據(jù)技術(shù)研究的是如何快速有效的處理這些結(jié)構(gòu)化贫奠、半結(jié)構(gòu)化數(shù)據(jù)的技術(shù)唬血。
處理大數(shù)據(jù)的架構(gòu)
下圖是傳統(tǒng)的集中式架構(gòu)
它的主要問題在于擴展性不強而且數(shù)據(jù)庫將成為很大的瓶頸。
所以谷歌提出了
MapReduce算法
BigTable
GFS
合稱“三劍客”唤崭。
那么相對于傳統(tǒng)的架構(gòu)拷恨,有什么樣的變化呢?
首先它可以使用大量的x86服務(wù)器谢肾,而不是使用性能強健的大型機來完成計算腕侄,也就是Scale-out的
-
另外它使用軟件方案來保證硬件故障容錯
我們知道x86服務(wù)器的穩(wěn)定性不如小型機,存在一定的故障的可能,但是小型機實在太貴了冕杠。我們完全可以讓x86服務(wù)器組成集群微姊,然后使用上層軟件來保障整體的硬件故障容錯。
簡化并行分布式計算分预,不需要再控制節(jié)點的同步和數(shù)據(jù)的交換兢交。
Hadoop模仿Google的實現(xiàn)方式,最終演變成一系列的開源項目笼痹。
總結(jié)一下:
大數(shù)據(jù)既是一個概念又是一門技術(shù)配喳,它是以Hadoop和Spark為代表的大數(shù)據(jù)基礎(chǔ)框架,可以實現(xiàn)數(shù)據(jù)分析凳干、挖掘晴裹、預(yù)測。
Hadoop
上面說到Hadoop是一種分布式計算解決方案救赐,含有若干組件涧团,其中最著名的當(dāng)屬
-
HDFS分布式文件系統(tǒng):存儲海量數(shù)據(jù)
存儲技術(shù)是大數(shù)據(jù)的基礎(chǔ),因為對于大量的數(shù)據(jù)经磅,我們希望能找的一種比較廉價的方式來保存我們的數(shù)據(jù)泌绣,那么分布式文件系統(tǒng)當(dāng)屬首選。
-
MapReduce編程模型:
并行處理框架馋贤,實現(xiàn)任務(wù)分解和調(diào)度
所以Hadoop的優(yōu)勢在于:
高擴展性赞别,也就是可以通過增加節(jié)點來活動性能提升,比如說性能不夠了配乓,就懟新的服務(wù)器上去仿滔。
低成本,可以基于便宜的x86服務(wù)器
成熟的生態(tài)圈犹芹,里面有大量的工具集可以使用
下面分別介紹一下HDFS和MapReduce
HDFS
在【大話存儲II】學(xué)習(xí)筆記(15章)崎页,文件級集群系統(tǒng)中我們介紹了分布式集群的基本概念。
分布式文件系統(tǒng)可以等價于非共享存儲集群文件系統(tǒng)腰埂,也就是說同一個文件系統(tǒng)下的文件是存放在不同的節(jié)點里面飒焦,而且Sharing-nothing
那么分布式文件系統(tǒng)應(yīng)該解決
-
統(tǒng)一的命名空間,也就是對外顯現(xiàn)同一個文件目錄屿笼。
這樣用戶不用管數(shù)據(jù)是如何存放的牺荠,分布式文件系統(tǒng)已經(jīng)幫它解決存放的問題了,用戶用起來就像使用本地文件一樣簡單驴一。
緩存一致休雌,因為數(shù)據(jù)都緩存在各自的節(jié)點,不存在不緩存不一致的情況肝断。
分布式鎖杈曲,也就是多個連接并發(fā)訪問的時候驰凛,如何控制文件的數(shù)據(jù)會出現(xiàn)不一致的情況。
若要理解HDFS担扑,我們需要知道如下的基本概念恰响。
基本概念
分布式設(shè)計
HDFS這樣的架構(gòu),非常類似于【大話存儲II】學(xué)習(xí)筆記(15章)涌献,塊級集群存儲系統(tǒng)中的XIV胚宦,當(dāng)然XIV是提供塊存儲的,不過XIV也利用了文件系統(tǒng)的思想洁奈,對每個塊像一個文件一樣间唉。
HDFS的基本存儲和操作單位是數(shù)據(jù)塊, 默認大小64MB利术,一般設(shè)置為128M。為什么要這么設(shè)計呢低矮?因為一個文件會比較大印叁,為了分布式存放,可以分成若干小塊军掂。那么最好就切成相同大小轮蜕,比如說64MB。
而且為了保證數(shù)據(jù)塊不丟失蝗锥,對每個數(shù)據(jù)塊會保存3副本跃洛,分布在兩個機架的三個節(jié)點中。 其中兩份在同一個機架终议,一份在另一個機架汇竭。
比如下圖中兩個A數(shù)據(jù)塊放在機架1,另一份副本放到了機架2 穴张。
角色
在【大話存儲II】學(xué)習(xí)筆記(15章)细燎,文件級集群系統(tǒng)我們介紹過,分布式文件系統(tǒng)有對稱和非對稱的兩種皂甘。
對稱集群中所有節(jié)點的地位相同玻驻,互相維護通信鏈接進行數(shù)據(jù)同步,也正因為如此偿枕,不適合擴展璧瞬。
而HDFS采用的是非對稱集群,所以有Master和Slave兩種角色渐夸。
Master就是HDFS中的NameNode嗤锉,它的作用是 存放元數(shù)據(jù),管理文件系統(tǒng)的命名空間捺萌。也就是一個注冊中心档冬,其他的Slave都要到它這邊注冊膘茎。
Master和Slave組成集群以后,可以自服務(wù)酷誓,也可以對外提供服務(wù)披坏。
它會記錄兩種信息:
文件與數(shù)據(jù)塊的映射關(guān)系
數(shù)據(jù)塊與服務(wù)器的對應(yīng)關(guān)系,也就是每個塊存放的節(jié)點的信息
Slave則是DataNode盐数,它的主要作用就是存放數(shù)據(jù)塊棒拂,是具體的執(zhí)行者。
當(dāng)塊存儲信息改變了以后玫氢,DataNode會向NameNode主動更新信息
另外帚屉,在這種主從架構(gòu)里面,NameNode的地位很超然漾峡,非常的重要攻旦,一旦他掛了則整個系統(tǒng)就宕了。
所以從HDFS 2x就可以為NameNode配置HA了生逸。
如下圖所示牢屋,出現(xiàn)了一個Secondary NameNode。
二級NameNode定期同步元數(shù)據(jù)鏡像文件和修改日志槽袄,當(dāng)NameNode發(fā)生故障時烙无,備胎轉(zhuǎn)正。
HDFS的讀與寫
寫
下面我們來看一下寫流程遍尺。
客戶端向NameNode發(fā)出請求截酷,表示自己要發(fā)送文件了,然后NameNode會返回現(xiàn)在空余存儲的信息
然后客戶端將文件分塊乾戏,
接著迂苛,客戶端將數(shù)據(jù)塊1以及相應(yīng)的元數(shù)據(jù)信息發(fā)給DataNode1
然后開啟流水線復(fù)制,將數(shù)據(jù)同步給另外的節(jié)點
寫完了以后歧蕉,DataNode才返回更新信息灾部,最后NameNode向客戶端返回成功。
讀文件
下圖展示了HDFS的讀流程
首先客戶端向NameNode發(fā)起讀請求惯退,將路徑+文件名發(fā)過去
NameNode返回元數(shù)據(jù)赌髓,告訴客戶端可以從哪些地方取
然后由客戶端自己向DataNode讀取數(shù)據(jù)
HDFS的特點
了解了HDFS的架構(gòu)以及讀寫流程以后,我們可以總結(jié)一下HDFS的特點催跪。
本質(zhì)上HDFS就是一個分布式文件系統(tǒng)锁蠕,它
通過三副本機制進行冗余,類似于的分布式的RAID10
它的寫比較的復(fù)雜懊蒸,需要復(fù)制2份荣倾,還要同步各種信息,而且修改也比較麻煩骑丸,只能刪除以后再寫舌仍。所以比較適合于一次寫入妒貌,多次讀取的場景,現(xiàn)在的OLAP就比較契合
因為每次寫或者讀都需要向NameNode發(fā)起請求铸豁,所以NameNode是整個系統(tǒng)的瓶頸灌曙,所以如果是小文件的話,NameNode壓力非常大节芥。
也就是說HDFS適合于批量讀在刺,這樣吞吐量高,因為可以并發(fā)讀嘛头镊。
但是不支持多用戶寫相同的文件蚣驼,因為沒有加鎖。
也就是不適合交互應(yīng)用以及那些實時性要求高的地方相艇。