隨著智能化、萬物互聯(lián)時(shí)代的快速發(fā)展,數(shù)據(jù)量開始暴增,一方面我們需要開始思考如何高效可靠地存儲(chǔ)海量的數(shù)據(jù),另一方面我們還需要對(duì)這些數(shù)據(jù)進(jìn)行分析處理,以獲得更多有價(jià)值的信息。這時(shí)期我們就需要用到Hadoop了。
Hadoop是Apache軟件基金會(huì)下一個(gè)開源分布式計(jì)算平臺(tái),以hdfs(Hadoop Distributed File System)、MapReduce(Hadoop2.0加入了YARN,Yarn是資源調(diào)度框架,能夠細(xì)粒度的管理和調(diào)度任務(wù),還能夠支持其他的計(jì)算框架,比如spark)為核心的Hadoop為用戶提供了系統(tǒng)底層細(xì)節(jié)透明的分布式基礎(chǔ)架構(gòu)。hdfs的高容錯(cuò)性、高伸縮性、高效性等優(yōu)點(diǎn)讓用戶可以將Hadoop部署在低廉的硬件上,形成分布式系統(tǒng)。
除了基礎(chǔ)Hadoop,發(fā)展到今天Hadoop已經(jīng)擁有非常完善和龐大的開源生態(tài)圈:HDFS提供文件存儲(chǔ),YARN提供資源管理,在此基礎(chǔ)上,進(jìn)行各種處理,包括mapreduce、Tez、Sprak、Storm等等,以滿足不同要求的數(shù)據(jù)使用場(chǎng)景。
HDFS架構(gòu)圖
HDFS采用了主從結(jié)構(gòu)模型,一個(gè)HDFS集群是由一個(gè)NameNode和若干個(gè)DataNode組成,其中NameNode作為主服務(wù)器管理文件系統(tǒng)的命名空間和客戶端對(duì)文件的訪問操作,而DataNode則負(fù)責(zé)管理存儲(chǔ)的數(shù)據(jù)。HDFS底層數(shù)據(jù)被切割成了多個(gè)Block,而這些Block又被復(fù)制后存儲(chǔ)在不同的DataNode上,以達(dá)到容錯(cuò)容災(zāi)的目的。
MapReduce是谷歌公司的核心計(jì)算模型,它將運(yùn)行于在規(guī)模集群上的復(fù)雜并行計(jì)算過程高度地抽象為兩個(gè)函數(shù)過程:Map和Reduce("Map(映射)"和"Reduce(歸約)")。map函數(shù)以 key/value 對(duì)作為輸入,產(chǎn)生另外一系列 key/value 對(duì)作為中間輸出寫入本地 磁盤。MapReduce 框架會(huì)自動(dòng)將這些中間數(shù)據(jù)按照 key 值進(jìn)行聚集,且 key 值相同的數(shù)據(jù)被統(tǒng)一交給 reduce函數(shù)處理。reduce函數(shù)則以 key 及對(duì)應(yīng)的 value 列表作為輸入,經(jīng)合并 key 相同的 value 值后,產(chǎn) 生另外一系列 key/value 對(duì)作為最終輸出寫入HDFS。
在Hadoop基本生態(tài)中,有兩個(gè)組件得說說他們的區(qū)別,它們就是hive和hbase。Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供簡(jiǎn)單的sql查詢功能,可以將sql語句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。HBase是Hadoop的數(shù)據(jù)庫,一個(gè)分布式、可擴(kuò)展、大數(shù)據(jù)的存儲(chǔ)。
Hive本身不存儲(chǔ)和計(jì)算數(shù)據(jù),它完全依賴于HDFS和MapReduce,Hive中的表純邏輯。hive需要用到hdfs存儲(chǔ)文件,需要用到MapReduce計(jì)算框架。
hive可認(rèn)為是map-reduce的一個(gè)包裝。hive的意義就是把好寫的hive的sql轉(zhuǎn)換為復(fù)雜難寫的map-reduce程序。
hbase是物理表,不是邏輯表,提供一個(gè)超大的內(nèi)存hash表,搜索引擎通過它來存儲(chǔ)索引,方便查詢操作。
hbase可以認(rèn)為是hdfs的一個(gè)包裝。他的本質(zhì)是數(shù)據(jù)存儲(chǔ),是個(gè)NoSql(not only sql)數(shù)據(jù)庫;hbase部署于hdfs之上,并且克服了hdfs在隨機(jī)讀寫方面的缺點(diǎn)。
聯(lián)系客服