大數(shù)據(jù)時代來了。當(dāng)所有人都爭吵著這件事情的時候,當(dāng)所有企業(yè)都看好大數(shù)據(jù)的發(fā)展前景的時候,卻都很少關(guān)注這些數(shù)據(jù)從哪兒來,我們有沒有足夠優(yōu)秀的技術(shù)能力處理這些數(shù)據(jù)。
聯(lián)網(wǎng)設(shè)備增加 數(shù)據(jù)量隨之上升
網(wǎng)絡(luò)的發(fā)展無疑為我們迎接大數(shù)據(jù)時代、智能計算時代鋪好了路。根據(jù)研究公司的預(yù)測,全球聯(lián)網(wǎng)設(shè)備正在增加,在部分國家,人均聯(lián)網(wǎng)設(shè)備早已超過2臺;如此大量的聯(lián)網(wǎng)設(shè)備和不斷提高的網(wǎng)絡(luò)速度都在讓社會的數(shù)據(jù)量快速增長,智慧城市、平安城市的實(shí)現(xiàn)也是以視頻監(jiān)控等視頻數(shù)據(jù)為基礎(chǔ),成為大數(shù)據(jù)時代的重要組成部分。
機(jī)器人、AI、機(jī)器學(xué)習(xí)的研究讓數(shù)據(jù)成為未來輔助我們生活的必要因素,無人車、機(jī)器人快遞等形式的出現(xiàn), 一方面體現(xiàn)了數(shù)據(jù)價值,另一方面也是在不斷收集數(shù)據(jù),反哺數(shù)據(jù)分析和應(yīng)用。
數(shù)據(jù)體量太大 誰來處理?
數(shù)據(jù)產(chǎn)生后,意味著數(shù)據(jù)的采集工作已經(jīng)完成,那么數(shù)據(jù)的輸入與有效輸出問題怎么破解?
自大數(shù)據(jù)時代到來之后,分布式存儲、大文件的讀寫都成為熱點(diǎn)話題,如何應(yīng)對越來越多的大文件存儲、分析與檢索,成為企業(yè)需要攻克的難題。
而Hadoop的原型要從2002年開始說起。Hadoop的雛形始于2002年的Apache的Nutch,Nutch是一個開源Java 實(shí)現(xiàn)的搜索引擎。而后根據(jù)谷歌發(fā)表的學(xué)術(shù)淪為谷歌文件系統(tǒng)(GFS),實(shí)現(xiàn)了分布式文件存儲系統(tǒng)名為NDFS。而后又根據(jù)Google發(fā)表的一篇技術(shù)學(xué)術(shù)論文MapReduce,在Nutch搜索引擎實(shí)現(xiàn)了用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行分析運(yùn)算。最后,雅虎雇用了Doug Cutting,Doug Cutting將NDFS和MapReduce升級命名為Hadoop,HDFS(Hadoop Distributed File System,Hadoop分布式文件系統(tǒng))就此形成。
應(yīng)該說Hadoop是針對大數(shù)據(jù)而存在的,HDFS能夠提供高吞吐量的數(shù)據(jù)訪問,適合有著超大規(guī)模數(shù)據(jù)集的應(yīng)用程序。我們可以在Hadoop的設(shè)計中看到三大特點(diǎn):適用于存儲超大文件、適合運(yùn)行在普通廉價的服務(wù)器上,同時,最搞笑的訪問模式是一次寫入、多次讀取。
當(dāng)然,HDFS也存在一些弊端,比如說不適用于有低延遲要求的應(yīng)用場景。因?yàn)镠adoop是針對大數(shù)據(jù)傳輸?shù)拇嬖?,是為高?shù)據(jù)吞吐量應(yīng)用而設(shè)計,這導(dǎo)致其必然要以高延遲作為代價。同時HDFS分布式存儲不適用于小文件傳輸,在大量小文件傳輸過程中,namenode的內(nèi)存就吃不消了。
Hadoop概念科普
在了解了Hadoop的身世和現(xiàn)在適合的應(yīng)用場景之后,筆者要跟大家科普一下Hadoop的基礎(chǔ)架構(gòu)和主要概念。
NameNode:namenode負(fù)責(zé)管理文件目錄、文件和block的對應(yīng)關(guān)系以及block和datanode的對應(yīng)關(guān)系。這是由唯一一臺主機(jī)專門保存,當(dāng)然這臺主機(jī)如果出錯,NameNode就失效了,需要啟動備用主機(jī)運(yùn)行NameNode。
DataNode:負(fù)責(zé)存儲,當(dāng)然大部分容錯機(jī)制都是在datanode上實(shí)現(xiàn)的。分布在廉價的計算機(jī)上,用于存儲Block塊文件。
MapReduce:通俗說MapReduce是一套從海量·源數(shù)據(jù)提取分析元素最后返回結(jié)果集的編程模型,將文件分布式存儲到硬盤是第一步,而從海量數(shù)據(jù)中提取分析我們需要的內(nèi)容就是MapReduce做的事了。
Block:也叫作數(shù)據(jù)塊,默認(rèn)大小為64MB。每一個block會在多個datanode上存儲多份副本,默認(rèn)是3份。
Rack:機(jī)柜,一個block的三個副本通常會保存到兩個或者兩個以上的機(jī)柜中。