扣丁學(xué)堂大數(shù)據(jù)學(xué)習(xí)帶你了解Hadoop如何高效處理大數(shù)據(jù)
2018-06-28 14:19:56
1386瀏覽
Hadoop與Google一樣,都是小孩命名的,是一個(gè)虛構(gòu)的名字,沒(méi)有特別的含義。從計(jì)算機(jī)專業(yè)的角度看,Hadoop是一個(gè)分布式系統(tǒng)基礎(chǔ)架構(gòu),由Apache基金會(huì)開發(fā)。Hadoop的主要目標(biāo)是對(duì)分布式環(huán)境下的“大數(shù)據(jù)”以一種可靠、高效、可伸縮的方式處理。設(shè)想一個(gè)場(chǎng)景,假如您需要grep一個(gè)100TB的大數(shù)據(jù)文件,按照傳統(tǒng)的方式,會(huì)花費(fèi)很長(zhǎng)時(shí)間,而這正是Hadoop所需要考慮的效率問(wèn)題。
關(guān)于Hadoop的結(jié)構(gòu),有各種不同的說(shuō)法。我們這里簡(jiǎn)單的理解為大數(shù)據(jù)學(xué)習(xí)Hadoop主要由三部分組成:HDFS(HadoopDistributedFileSystem),MapReduce與Hbase。
1、Hadoop組件之一:HDFS分布式文件系統(tǒng)具有哪些優(yōu)點(diǎn)?
HDFS作為一種分布式文件系統(tǒng),它和現(xiàn)有的分布式文件系統(tǒng)有很多共同點(diǎn)。比如,Hadoop文件系統(tǒng)管理的物理存儲(chǔ)資源不一定直接連接在本地節(jié)點(diǎn)上,而是通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)與節(jié)點(diǎn)相連。對(duì)于Client端而言,HDFS就像一個(gè)傳統(tǒng)的分級(jí)文件系統(tǒng),可以創(chuàng)建、刪除、移動(dòng)或重命名文件等等。與此同時(shí),HDFS與其他的分布式文件系統(tǒng)的區(qū)別也是顯而易見(jiàn)的。
首先,HDFS設(shè)計(jì)目標(biāo)之一是適合運(yùn)行在通用硬件(commodityhardware)上的分布式文件系統(tǒng)。HDFS假設(shè)的硬件錯(cuò)誤不是異常,而是常態(tài)。因?yàn)镠DFS面向的是成百上千的服務(wù)器集群,每臺(tái)服務(wù)器上存儲(chǔ)著文件系統(tǒng)的部分?jǐn)?shù)據(jù),并且這些機(jī)器的價(jià)格都很低廉。這就意味著總是有一部分硬件因各種原因而無(wú)法工作。因此,錯(cuò)誤檢測(cè)和快速、自動(dòng)的恢復(fù)是HDFS最核心的架構(gòu)目標(biāo)。從這個(gè)角度說(shuō),HDFS具有高度的容錯(cuò)性。
第二,HDFS的另一個(gè)設(shè)計(jì)目標(biāo)是支持大文件存儲(chǔ)。與普通的應(yīng)用不同,HDFS應(yīng)用具有很大的數(shù)據(jù)集,一個(gè)典型HDFS文件大小一般都在G字節(jié)至T字節(jié)。這就意味著HDFS應(yīng)該能提供比較高的數(shù)據(jù)傳輸帶寬與數(shù)據(jù)訪問(wèn)吞吐量。相應(yīng)的,HDFS開放了一些POSIX的必須接口,容許流式訪問(wèn)文件系統(tǒng)的數(shù)據(jù)。
第三,HDFS還要解決的一個(gè)問(wèn)題是高數(shù)據(jù)吞吐量。HDFS采用的是“一次性寫,多次讀”這種簡(jiǎn)單的數(shù)據(jù)一致性模型。換句話說(shuō),文件一旦建立后寫入,就不需要再更改了。網(wǎng)絡(luò)爬蟲程序就很適合使用這樣的模型。
第四,移動(dòng)計(jì)算環(huán)境比移動(dòng)數(shù)據(jù)劃算。HDFS提供了API,以便把計(jì)算環(huán)境移動(dòng)到數(shù)據(jù)存儲(chǔ)的地方,而不是把數(shù)據(jù)傳輸?shù)接?jì)算環(huán)境運(yùn)行的地方。這對(duì)于數(shù)據(jù)大文件尤其適用,可以有效減少網(wǎng)絡(luò)的擁塞、提高系統(tǒng)的吞吐量。
HDFS的體系結(jié)構(gòu)與工作流程
下面簡(jiǎn)單看一下HDFS的結(jié)構(gòu)。圖1所示為HDFS的體系結(jié)構(gòu)圖。HDFS采用的是Master/Slave架構(gòu)。
NameNode節(jié)點(diǎn)作為Master服務(wù)器,有三部分功能。第一:處理來(lái)自客戶端的文件訪問(wèn)。第二:管理文件系統(tǒng)的命名空間操作,如'打開'、'關(guān)閉'、'重命名'等。第三:負(fù)責(zé)數(shù)據(jù)塊到數(shù)據(jù)節(jié)點(diǎn)之間的映射。從這個(gè)意義上說(shuō),它扮演中心服務(wù)器的角色。
DataNode節(jié)點(diǎn)作為Slave服務(wù)器,同樣有三部分功能。第一:管理掛載在節(jié)點(diǎn)上的存儲(chǔ)設(shè)備。第二:響應(yīng)客戶端的讀寫請(qǐng)求。第三:從內(nèi)部看,每個(gè)文件被分成一個(gè)或多個(gè)數(shù)據(jù)塊,被存放到一組DataNode,在Namenode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制。
HDFS采用Java語(yǔ)言開發(fā),因此任何支持Java的機(jī)器都可以部署Namenode或Datanode。相應(yīng)地,GNU/Linux操作系統(tǒng)支持Namenode與Datanode。一個(gè)典型的部署場(chǎng)景是,一臺(tái)GNU/Linux操作系統(tǒng)上運(yùn)行一個(gè)Namenode實(shí)例,作為Master中心服務(wù)器。而集群中的其它GNU/Linux操作系統(tǒng)分別運(yùn)行一個(gè)Datanode實(shí)例,作為Slave服務(wù)器集群。
2、Hadoop組件之二:什么是MapReduce編程模型,MapReduce的工作流程是什么?
MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。MapReduce的設(shè)計(jì)目標(biāo)是方便編程人員在不熟悉分布式并行編程的情況下,將自己的程序運(yùn)行在分布式系統(tǒng)上。
MapReduce的命名規(guī)則由兩個(gè)術(shù)語(yǔ)組成,分別是Map(映射)與Reduce(化簡(jiǎn))。這些術(shù)語(yǔ)來(lái)自于列表處理語(yǔ)言,如:LISP,Scheme,或ML。從概念上來(lái)講,MapReduce將輸入元素列表(InputList)轉(zhuǎn)換成輸出元素列表(OutputList),按照Map與Reduce規(guī)則各一次。
從MapReduce框架的實(shí)現(xiàn)角度看,MapReduce程序有著兩個(gè)組件:一個(gè)實(shí)現(xiàn)了Mapper,另一個(gè)實(shí)現(xiàn)了Reducer。
第一次叫Mapping,如圖2所示。MapReduce將InputList作為Mapping函數(shù)的輸入?yún)?shù),經(jīng)過(guò)處理,把結(jié)果返回給OutputList。舉例來(lái)說(shuō),有一個(gè)函數(shù)toUpper(str),用來(lái)返回輸入字符串的大寫版本。那么這里的InputList指的是轉(zhuǎn)換前的常規(guī)字符串列表,MappingFunction指的是toUpper函數(shù),而OutputList指的是轉(zhuǎn)換后的大寫字符串列表。值得注意的是,在這里Mapping并沒(méi)有改變輸入字符串列表,而是返回一個(gè)新的字符串列表。
第二次叫Reducing,如圖3所示。MapReduce將InputList作為Reducing函數(shù)的輸入?yún)?shù),經(jīng)過(guò)迭代處理,把這些數(shù)據(jù)匯集,返回一個(gè)輸出值給OutputValue。從這個(gè)意義上來(lái)說(shuō),Reducing一般用來(lái)生成”總結(jié)“數(shù)據(jù),把大規(guī)模的數(shù)據(jù)轉(zhuǎn)變成更小的總結(jié)數(shù)據(jù)。例如,+可以用來(lái)作一個(gè)reducing函數(shù),去返回輸入數(shù)據(jù)列表的值的總和。
從工作流程來(lái)講,MapReduce對(duì)應(yīng)的作業(yè)Job首先把輸入的數(shù)據(jù)集切分為若干獨(dú)立的數(shù)據(jù)塊,并由Map組件以Task的方式并行處理。處理結(jié)果經(jīng)過(guò)排序后,依次輸入給Reduce組件,并且以Task的形式并行處理。MapReduce對(duì)應(yīng)的輸入輸出數(shù)據(jù)由HDFS的DataNode存儲(chǔ)。MapReduce對(duì)應(yīng)的Job部署在Master服務(wù)器,由MasterJobTracker負(fù)責(zé)Task的調(diào)度,監(jiān)控,重新執(zhí)行失敗的任務(wù)等等。MapReduce對(duì)應(yīng)的Job部署在若干不同的Slave服務(wù)器,每個(gè)集群節(jié)點(diǎn)含一個(gè)slaveTaskTracker,負(fù)責(zé)執(zhí)行由master指派的任務(wù)。
Hadoop框架由Java實(shí)現(xiàn)的,它提供了兩種主要工具。HadoopStreaming是一種運(yùn)行作業(yè)的實(shí)用工具,它允許用戶創(chuàng)建和運(yùn)行任何可執(zhí)行程序(例如:Shell工具)來(lái)做為mapper和reducer。HadoopPipes是一個(gè)與SWIG兼容的C++API(沒(méi)有基于JNITM技術(shù)),它也可用于實(shí)現(xiàn)Map/Reduce應(yīng)用程序。這樣,開發(fā)人員就可以利用MapReduce框架,開發(fā)分布式應(yīng)用程序,運(yùn)行在由上千個(gè)商用機(jī)器組成的大型集群上,并以一種可靠容錯(cuò)的方式并行處理上T級(jí)別的數(shù)據(jù)集。
3.Hadoop組件之三:什么是面向列開源分布式數(shù)據(jù)庫(kù)Hbase?
HBase是一個(gè)分布式的、面向列的開源數(shù)據(jù)庫(kù),由Apache基金會(huì)開發(fā)。HBase不同于一般的關(guān)系數(shù)據(jù)庫(kù),它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)。它基于列的而不是基于行的模式。用戶存儲(chǔ)數(shù)據(jù)行在一個(gè)表里。一個(gè)數(shù)據(jù)行擁有一個(gè)可選擇的鍵和任意數(shù)量的列。用戶可根據(jù)鍵訪問(wèn)行,以及對(duì)于一系列的行進(jìn)行掃描和過(guò)濾。HBase一個(gè)可以橫向擴(kuò)張的表存儲(chǔ)系統(tǒng),能夠?yàn)榇笠?guī)模數(shù)據(jù)提供速度極快的低等級(jí)更新。主要用于需要隨機(jī)訪問(wèn),實(shí)時(shí)讀寫大數(shù)據(jù)(BigData)。這正是信息系統(tǒng)所需要的功能。
下面的例子演示的是將原來(lái)存放在MySQL中Blog中的數(shù)據(jù)遷移到HBase中的過(guò)程:
圖4為MySQL中現(xiàn)有的表結(jié)構(gòu):表Blogtable表示博客本身,包括5個(gè)字段,BlogId為每位用戶對(duì)應(yīng)的博客ID號(hào),類型為Int,作為主鍵字段;Author為該用戶的博客名稱,類型為Varchar;Title為該用戶的博客簽名,類型為Varchar;URL為博客網(wǎng)址鏈接,類型為Varchar;Text為博客的內(nèi)容,類型為Varchar。Comment表示博客評(píng)論,包括5個(gè)字段。ID為發(fā)表評(píng)論的用戶ID,類型為Int,作為主鍵字段;BlogId為博客的原文ID,類型為Varchar。其中,BlogId作為Comment表的外鍵,指向表Blogtable的主鍵。Title為評(píng)論標(biāo)題,類型為Varchar;Author為發(fā)表該評(píng)論的用戶名稱,類型為Varchar;Text字段為評(píng)論內(nèi)容,類型為Varchar。
遷移HBase中的表結(jié)構(gòu):HBase以表的形式存儲(chǔ)數(shù)據(jù)。表有行和列組成。列劃分為若干個(gè)列族(rowfamily)。表Blogtable表示博客本身。ID為RowKey,即Table的主鍵,用來(lái)檢索記錄。Table在水平方向有一個(gè)或者多個(gè)ColumnFamily組成。表BlogTable包含5個(gè)ColumnFamily,Info的數(shù)據(jù)結(jié)構(gòu)分為Info:Author,Info:Title,Info:URL。如果想添加其它屬性X,則對(duì)應(yīng)的結(jié)構(gòu)為Info:X。需要說(shuō)明的是,ColumnFamily支持動(dòng)態(tài)擴(kuò)展,無(wú)需預(yù)先定義Column的數(shù)量以及類型,但是,所有Column均以二進(jìn)制格式存儲(chǔ),用戶需要自行進(jìn)行類型轉(zhuǎn)換。
總之,Hbase目標(biāo)主要依靠橫向擴(kuò)展,通過(guò)不斷增加廉價(jià)的商用服務(wù)器,來(lái)增加計(jì)算和存儲(chǔ)能力。簡(jiǎn)單的理解,Hbase介于nosql和RDBMS之間。Hbase僅能通過(guò)主鍵(rowkey)和主鍵的range來(lái)檢索數(shù)據(jù),不支持條件查詢以及排序等,僅支持單行事務(wù)。Habase主要用來(lái)存儲(chǔ)非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。針對(duì)Hbase的不足,Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具Hive對(duì)此做出了彌補(bǔ)。Hive可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供完整的SQL查詢功能,并將SQL語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)運(yùn)行。針對(duì)Hbase單行事務(wù)的限制,Hive也提供了擴(kuò)展。據(jù)說(shuō),F(xiàn)acebook之所以選擇了Hbase,是因?yàn)樗麄僅Base適用于處理以下兩種類型的數(shù)據(jù)模式:1.一小組經(jīng)常變化的臨時(shí)數(shù)據(jù);2.一組不斷增加但很少訪問(wèn)的數(shù)據(jù)。
Hadoop為企業(yè)來(lái)帶了什么?
如今,“大數(shù)據(jù)”這一術(shù)語(yǔ)在IT經(jīng)理人中變得越來(lái)越流行。美國(guó)國(guó)家海洋與大氣管理局NOAA利用“大數(shù)據(jù)”進(jìn)行氣象、生態(tài)系統(tǒng)、天氣和商務(wù)研究?!都~約時(shí)報(bào)》使用“大數(shù)據(jù)”工具進(jìn)行文本分析和Web信息挖掘。迪斯尼則利用它們關(guān)聯(lián)和了解跨不同商店、主題公園和Web資產(chǎn)的客戶行為。
“大數(shù)據(jù)”不僅適用于大型企業(yè),而是適用于各種不同規(guī)模的企業(yè)。例如,通過(guò)評(píng)估某位客戶在網(wǎng)站上的行為,來(lái)更好地了解他們需要什么支持或?qū)ふ沂裁串a(chǎn)品,或者弄清當(dāng)前天氣和其他條件對(duì)于送貨路線和時(shí)間安排的影響。
面對(duì)“大數(shù)據(jù)”,Hadoop為揭示深?yuàn)W的企業(yè)與外部數(shù)據(jù)的關(guān)鍵內(nèi)幕提供了基礎(chǔ)。從技術(shù)上看,Hadoop分布式文件系統(tǒng)(HDFS)保證了大數(shù)據(jù)的可靠存儲(chǔ),而另一Hadoop核心組件MapReduce則提供高性能并行數(shù)據(jù)處理服務(wù)。這兩項(xiàng)服務(wù)提供了一個(gè)使對(duì)結(jié)構(gòu)化和復(fù)雜“大數(shù)據(jù)”的快速、可靠分析變?yōu)楝F(xiàn)實(shí)的基礎(chǔ)。
Hadoop已經(jīng)迅速成長(zhǎng)為首選的、適用于非結(jié)構(gòu)化數(shù)據(jù)的大數(shù)據(jù)分析解決方案?;贖adoop、利用商品化硬件對(duì)海量的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行批處理,給數(shù)據(jù)分析領(lǐng)域帶來(lái)了深刻的變化。通過(guò)挖掘機(jī)器產(chǎn)生的非結(jié)構(gòu)化數(shù)據(jù)中蘊(yùn)藏的知識(shí),企業(yè)可以做出更好的決策,促進(jìn)收入增長(zhǎng),改善服務(wù),降低成本。
Google與Hadoop有著千絲萬(wàn)縷的聯(lián)系。如前所述,Hadoop主要是由HDFS、MapReduce和Hbase組成。而HDFS是GoogleFileSystem(GFS)的開源實(shí)現(xiàn),MapReduce是GoogleMapReduce的開源實(shí)現(xiàn),HBase是GoogleBigTable的開源實(shí)現(xiàn)。Hadoop分布式框架很有創(chuàng)造性,而且有極大的擴(kuò)展性,使得Google在系統(tǒng)吞吐量上有很大的競(jìng)爭(zhēng)力。因此Apache基金會(huì)用Java實(shí)現(xiàn)了一個(gè)開源版本,支持Fedora、Ubuntu等Linux平臺(tái)。
考慮到Hadoop在應(yīng)對(duì)大規(guī)模非結(jié)構(gòu)型數(shù)據(jù)中所起到的重要作用,微軟也不得不放下架子,近日宣布開發(fā)一個(gè)兼容WindowsServer與WindowsAzure平臺(tái)的Hadoop開源版本。
IBM宣布在Hadoop上建立新的存儲(chǔ)架構(gòu),作為群集運(yùn)行DB2或Oracle數(shù)據(jù)庫(kù),目的是讓應(yīng)用程序,支持高性能分析,數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用程序和云計(jì)算的目的。
EMC也推出了世界上第一個(gè)定制的、高性能的Hadoop專用數(shù)據(jù)協(xié)同處理設(shè)備——GreenplumHD數(shù)據(jù)計(jì)算設(shè)備,為客戶提供了最強(qiáng)大、最高效率的方法,充分挖掘大數(shù)據(jù)的價(jià)值。
互聯(lián)網(wǎng)搜索巨頭百度也在考慮使用Hadoop。不過(guò),出于性能與安全的考慮,百度在采用Hadoop架構(gòu)的時(shí)候,將Hadoop計(jì)算層進(jìn)行了重新編寫。
Hadoop作為一種分布式基礎(chǔ)架構(gòu),可以使用戶在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序。最后想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢??鄱W(xué)堂是專業(yè)的大數(shù)據(jù)培訓(xùn)機(jī)構(gòu),扣丁學(xué)堂不僅有專業(yè)的老師和與時(shí)俱進(jìn)的課程體系,還有大量的大數(shù)據(jù)視頻教程供學(xué)員觀看學(xué)習(xí)哦。
【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】
查看更多關(guān)于“大數(shù)據(jù)培訓(xùn)資訊”的相關(guān)文章>>
標(biāo)簽:
大數(shù)據(jù)培訓(xùn)
大數(shù)據(jù)視頻教程
大數(shù)據(jù)開發(fā)工程師
大數(shù)據(jù)在線視頻
學(xué)習(xí)大數(shù)據(jù)
大數(shù)據(jù)學(xué)習(xí)路線