hive是基于Hadoop的一個(gè)數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供完整的sql查詢(xún)功能,可以將sql語(yǔ)句轉換為MapReduce任務(wù)進(jìn)行運行。 其優(yōu)點(diǎn)是學(xué)習成本低,可以通過(guò)類(lèi)SQL語(yǔ)句快速實(shí)現簡(jiǎn)單的MapReduce統計,不必開(kāi)發(fā)專(zhuān)門(mén)的MapReduce應用,十分適合數據倉庫的統計分析。
Hadoop是一個(gè)存儲計算框架,主要由兩部分組成:
1,存儲(Hadoop分布式文件系統-HDFS)
2,計算(MapReduce計算框架)
1,Hadoop分布式文件系統
這是一種文件系統實(shí)現,類(lèi)似于NTFS,ext3,ext4等等,不過(guò)它是建立在更高的層次之上的。在HDFS上存儲的文件被分成塊(每塊默認未64M,比一般的文件系統塊大小大的多,可調)分布在多臺機器上,其中的每塊又會(huì )有多塊的冗余備份(默認為3),以增強文件系統的容錯能力。這種存儲模式與后面將要說(shuō)明的MapReduce計算模型相得益彰。HDFS在具體實(shí)現中主要有以下幾個(gè)部分:
一、名稱(chēng)節點(diǎn)(NameNode):它的職責在于存儲整個(gè)文件系統的元數據,這是個(gè)非常重要的角色。元數據在集群?jiǎn)?dòng)時(shí)會(huì )加載到內存中,元數據的改變也會(huì )寫(xiě)到磁盤(pán)上的一個(gè)文件系統映像文件中(同時(shí)還會(huì )維護一個(gè)對元數據的編輯日志)。目前名稱(chēng)節點(diǎn)還是一個(gè)單點(diǎn)。因為HDFS存儲文件的時(shí)候是將文件劃分成邏輯上的塊來(lái)存儲的,模個(gè)文件對應那些塊都存儲在名稱(chēng)節點(diǎn)上,所以如果它有損壞整個(gè)集群的數據將不可用。當然我們可以采取一些措施來(lái)備份名稱(chēng)節點(diǎn)的元數據(文件系統映像文件),比如可以將名稱(chēng)節點(diǎn)目錄同時(shí)設置到本地目錄和一個(gè)NFS目錄,這樣任何元數據的改變將寫(xiě)入到兩個(gè)位置做冗余備份,向兩個(gè)目錄冗余寫(xiě)的過(guò)程是原子的。這樣,在使用中的名稱(chēng)節點(diǎn)宕機之后,我們可以使用NFS上的備份文件來(lái)恢復文件系統。
二、第二名稱(chēng)節點(diǎn)(SecondaryNameNode):這個(gè)角色的作用就是定期通過(guò)編輯日志合并命名空間映像,防止編輯日志過(guò)大。不過(guò)第二名稱(chēng)節點(diǎn)的狀態(tài)是滯后于主名稱(chēng)節點(diǎn)的,所以如果主名稱(chēng)節點(diǎn)掛掉,也必定會(huì )有一些文件損失。
三、數據節點(diǎn)(DataNode):這是HDFS中具體存儲數據的地方,一般有多臺機器。除了提供存儲服務(wù),它們還定時(shí)向名稱(chēng)節點(diǎn)發(fā)送它們存儲的塊的列表,所以名稱(chēng)節點(diǎn)沒(méi)有必要永久保存每個(gè)文件的每個(gè)塊所在的數據節點(diǎn),這些信息會(huì )在系統啟動(dòng)后由數據節點(diǎn)重建。
2,MapReduce計算框架
這是一種分布式計算模型,其核心就是將任務(wù)分解成小任務(wù)由不同的計算者同時(shí)參與計算,并將各個(gè)計算者的計算結果合并得出最終的結果。模型本身非常簡(jiǎn)單,一般只需要實(shí)現兩個(gè)接口即可;問(wèn)題的關(guān)鍵在于怎樣將實(shí)際問(wèn)題轉化為MapReduce任務(wù)。Hadoop的MapReduce部分主要由以下幾部分組成:
一、作業(yè)跟蹤節點(diǎn)(JobTracker):負責任務(wù)的調度(可以設置不同的調度策略)、狀態(tài)跟蹤。它的角色有點(diǎn)類(lèi)似于HDFS中的名稱(chēng)節點(diǎn),JobTracker也是一個(gè)單點(diǎn),在未來(lái)的版本中可能會(huì )有所改進(jìn)。
二、任務(wù)跟蹤節點(diǎn)(TaskTracker):負責具體的任務(wù)的執行。它通過(guò)“心跳”的方式告知JobTracker其狀態(tài),并由JobTracker根據其報告的狀態(tài)為其分配任務(wù),TaskTracker會(huì )啟動(dòng)一個(gè)新的JVM來(lái)運行一個(gè)任務(wù),當然JVM實(shí)例也可以被重用。
以上就是對于Hadoop最重要的兩個(gè)部分的簡(jiǎn)介,Hadoop存在的理由就是它適應于大數據的存儲計算。一個(gè)Hadoop集群可以看成是一個(gè)存儲、計算“數據”的“庫”。
Hive是一個(gè)構建于Hadoop集群之上的“數據倉庫”應用
Hive是Facebook開(kāi)發(fā)的構建于Hadoop集群之上的數據倉庫應用,它提供了類(lèi)似于SQL語(yǔ)法的HQL語(yǔ)句作為數據訪(fǎng)問(wèn)接口,這使得普通分析人員的應用Hadoop的學(xué)習曲線(xiàn)變緩。至于Facebook為什么使用Hadoop和Hive組建其數據倉庫,其內部人員分享了他們的一些經(jīng)歷,大致的過(guò)程是如下的:
1,Facebook的數據倉庫一開(kāi)始是構建于MySQL之上的,但是隨著(zhù)數據量的增加某些查詢(xún)需要幾個(gè)小時(shí)甚至幾天的時(shí)間才能完成。
2,當數據量接近1T的時(shí)候,mysqld后臺進(jìn)程宕掉,這時(shí)他們決定將他們數據倉庫轉移到Oracle。當然這次轉移的過(guò)程也是付出了很大的代價(jià)的,比如支持的SQL方言不同,修改以前的運行腳本等等。
3,Oracle應付幾T的數據還是沒(méi)有問(wèn)題的,但是在開(kāi)始收集用戶(hù)點(diǎn)擊流的數據(每天大約400G)之后,Oracle也開(kāi)始撐不住了,由此又要考慮新的數據倉庫方案。
4,內部開(kāi)發(fā)人員花了幾周的時(shí)間建立了一個(gè)并行日志處理系統Cheetah,這樣的話(huà)勉強可以在24小時(shí)之內處理完一天的點(diǎn)擊流數據。
5,Cheetah也存在許多缺點(diǎn)。后來(lái)發(fā)現了Hadoop項目,并開(kāi)始試著(zhù)將日志數據同時(shí)載入Cheetah和Hadoop做對比,Hadoop在處理大規模數據時(shí)更具優(yōu)勢,后來(lái)將所有的工作流都從Cheetah轉移到了Hadoop,并基于Hadoop做了很多有價(jià)值的分析。
6,后來(lái)為了使組織中的多數人能夠使用Hadoop,開(kāi)發(fā)了Hive,Hive提供了類(lèi)似于SQL的查詢(xún)接口,非常方便。與此同時(shí)還開(kāi)發(fā)了一些其它工具。
7,現在集群存儲2.5PB的數據,并且以每天15TB的數據在增長(cháng),每天提交3000個(gè)以上的作業(yè),大約處理55TB的數據...
現在很多大的互聯(lián)網(wǎng)公司出于成本考慮都在研究、使用Hadoop;數據的價(jià)值正得到越來(lái)越多的人的重視,而這種重視,又體現出Hadoop存在的巨大價(jià)值。
聯(lián)系客服