▲圖1-1 Hadoop的項(xiàng)目結(jié)構(gòu)圖
2)Avro:Avro是用于數(shù)據(jù)序列化的系統(tǒng)。它提供了豐富的數(shù)據(jù)結(jié)構(gòu)類(lèi)型、快速可壓縮的二進(jìn)制數(shù)據(jù)格式、存儲(chǔ)持久性數(shù)據(jù)的文件集、遠(yuǎn)程調(diào)用RPC的功能和簡(jiǎn)單的動(dòng)態(tài)語(yǔ)言集成功能。其中,代碼生成器既不需要讀寫(xiě)文件數(shù)據(jù),也不需要使用或?qū)崿F(xiàn)RPC協(xié)議,它只是一個(gè)可選的對(duì)靜態(tài)類(lèi)型語(yǔ)言的實(shí)現(xiàn)。
Avro系統(tǒng)依賴(lài)于模式(Schema),Avro數(shù)據(jù)的讀和寫(xiě)是在模式之下完成的。這樣就可以減少寫(xiě)入數(shù)據(jù)的開(kāi)銷(xiāo),提高序列化的速度并縮減其大小。同時(shí),也可以方便動(dòng)態(tài)腳本語(yǔ)言的使用,因?yàn)閿?shù)據(jù)連同其模式都是自描述的。
在RPC中,Avro系統(tǒng)的客戶(hù)端和服務(wù)端通過(guò)握手協(xié)議進(jìn)行模式的交換。因此當(dāng)客戶(hù)端和服務(wù)端擁有彼此全部的模式時(shí),不同模式下的相同命名字段、丟失字段和附加字段等信息的一致性問(wèn)題就得到了很好的解決。
3)MapReduce:MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。“映射”(map)、“化簡(jiǎn)” (reduce)等概念和它們的主要思想都是從函數(shù)式編程語(yǔ)言中借來(lái)的。它使得編程人員在不了解分布式并行編程的情況下也能方便地將自己的程序運(yùn)行在分布式系統(tǒng)上。MapReduce在執(zhí)行時(shí)先指定一個(gè)map(映射)函數(shù),把輸入鍵值對(duì)映射成一組新的鍵值對(duì),經(jīng)過(guò)一定的處理后交給 reduce,reduce對(duì)相同key下的所有value進(jìn)行處理后再輸出鍵值對(duì)作為最終的結(jié)果。
圖1-2是MapReduce的任務(wù)處理流程圖,它展示了MapReduce程序?qū)⑤斎雱澐值讲煌膍ap上,再將map的結(jié)果合并到reduce,然后進(jìn)行處理的輸出過(guò)程。
▲圖1-2 MapReduce的任務(wù)處理流程圖
4)HDFS:是一個(gè)分布式文件系統(tǒng)。由于HDFS具有高容錯(cuò)性(fault-tolerant)的特點(diǎn),所以可以設(shè)計(jì)部署在低廉(low-cost) 的硬件上。它可以通過(guò)提供高吞吐率(high throughput)來(lái)訪問(wèn)應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集的應(yīng)用程序。HDFS放寬了可移植操作系統(tǒng)接口(POSIX,Portable Operating System Interface)的要求,這樣就可以實(shí)現(xiàn)以流的形式訪問(wèn)文件系統(tǒng)中的數(shù)據(jù)。HDFS原本是開(kāi)源的Apache項(xiàng)目Nutch的基礎(chǔ)結(jié)構(gòu),最后它成為了Hadoop的基礎(chǔ)架構(gòu)之一。
以下是HDFS的設(shè)計(jì)目標(biāo):
檢測(cè)和快速恢復(fù)硬件故障。硬件故障是常見(jiàn)的問(wèn)題,整個(gè)HDFS系統(tǒng)由數(shù)百臺(tái)或數(shù)千臺(tái)存儲(chǔ)著數(shù)據(jù)文件的服務(wù)器組成,而如此多的服務(wù)器意味著高故障率,因此,故障的檢測(cè)和自動(dòng)快速恢復(fù)是HDFS的一個(gè)核心目標(biāo)。
流式的數(shù)據(jù)訪問(wèn)。HDFS使應(yīng)用程序能流式地訪問(wèn)它們的數(shù)據(jù)集。HDFS被設(shè)計(jì)成適合進(jìn)行批量處理,而不是用戶(hù)交互式的處理。所以它重視數(shù)據(jù)吞吐量,而不是數(shù)據(jù)訪問(wèn)的反應(yīng)速度。
簡(jiǎn)化一致性模型。大部分的HDFS程序操作文件時(shí)需要一次寫(xiě)入,多次讀取。一個(gè)文件一旦經(jīng)過(guò)創(chuàng)建、寫(xiě)入、關(guān)閉之后就不需要修改了,從而簡(jiǎn)化了數(shù)據(jù)一致性問(wèn)題和高吞吐量的數(shù)據(jù)訪問(wèn)問(wèn)題。
通信協(xié)議。所有的通信協(xié)議都在TCP/IP協(xié)議之上。一個(gè)客戶(hù)端和明確配置了端口的名字節(jié)點(diǎn)(NameNode)建立連接之后,它和名稱(chēng)節(jié)點(diǎn) (NameNode)的協(xié)議便是客戶(hù)端協(xié)議(Client Protocal)。數(shù)據(jù)節(jié)點(diǎn)(DataNode)和名字節(jié)點(diǎn)(NameNode)之間則用數(shù)據(jù)節(jié)點(diǎn)協(xié)議(DataNode Protocal)。
5)Chukwa:Chukwa是開(kāi)源的數(shù)據(jù)收集系統(tǒng),用于監(jiān)控和分析大型分布式系統(tǒng)的數(shù)據(jù)。Chukwa是在Hadoop的HDFS和 MapReduce框架之上搭建的,它同時(shí)繼承了Hadoop的可擴(kuò)展性和健壯性。Chukwa通過(guò)HDFS來(lái)存儲(chǔ)數(shù)據(jù),并依賴(lài)于MapReduce任務(wù)處理數(shù)據(jù)。Chukwa中也附帶了靈活且強(qiáng)大的工具,用于顯示、監(jiān)視和分析數(shù)據(jù)結(jié)果,以便更好地利用所收集的數(shù)據(jù)。
6)Hive:Hive最早是由Facebook設(shè)計(jì)的,是一個(gè)建立在Hadoop基礎(chǔ)之上的數(shù)據(jù)倉(cāng)庫(kù),它提供了一些用于數(shù)據(jù)整理、特殊查詢(xún)和分析存儲(chǔ)在 Hadoop文件中的數(shù)據(jù)集的工具。Hive提供的是一種結(jié)構(gòu)化數(shù)據(jù)的機(jī)制,它支持類(lèi)似于傳統(tǒng)RDBMS中的SQL語(yǔ)言來(lái)幫助那些熟悉SQL的用戶(hù)查詢(xún) Hadoop中的數(shù)據(jù),該查詢(xún)語(yǔ)言稱(chēng)為Hive QL。與此同時(shí),那些傳統(tǒng)的MapReduce編程人員也可以在Mapper或Reducer中通過(guò)Hive QL查詢(xún)數(shù)據(jù)。Hive編譯器會(huì)把Hive QL編譯成一組MapReduce任務(wù),從而方便MapReduce編程人員進(jìn)行Hadoop應(yīng)用的開(kāi)發(fā)。
7)HBase:HBase是一個(gè)分布式的、面向列的開(kāi)源數(shù)據(jù)庫(kù),該技術(shù)來(lái)源于Google的論文“Bigtable:一個(gè)結(jié)構(gòu)化數(shù)據(jù)的分布式存儲(chǔ)系統(tǒng)”。如同Bigtable利用了Google文件系統(tǒng)(Google File System)提供的分布式數(shù)據(jù)存儲(chǔ)方式一樣,HBase在Hadoop之上提供了類(lèi)似于Bigtable的能力。HBase是Hadoop 項(xiàng)目的子項(xiàng)目。HBase不同于一般的關(guān)系數(shù)據(jù)庫(kù),其一,HBase是一個(gè)適合于存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)庫(kù);其二,HBase是基于列而不是基于行的模式。HBase和Bigtable使用相同的數(shù)據(jù)模型。用戶(hù)將數(shù)據(jù)存儲(chǔ)在一個(gè)表里,一個(gè)數(shù)據(jù)行擁有一個(gè)可選擇的鍵和任意數(shù)量的列。由于HBase表示疏松的,用戶(hù)可以給行定義各種不同的列。HBase主要用于需要隨機(jī)訪問(wèn)、實(shí)時(shí)讀寫(xiě)的大數(shù)據(jù)(Big Data)。
8)Pig:Pig是一個(gè)對(duì)大型數(shù)據(jù)集進(jìn)行分析和評(píng)估的平臺(tái)。Pig最突出的優(yōu)勢(shì)是它的結(jié)構(gòu)能夠經(jīng)受住高度并行化的檢驗(yàn),這個(gè)特性讓它能夠處理大型的數(shù)據(jù)集。目前,Pig的底層由一個(gè)編譯器組成,它在運(yùn)行的時(shí)候會(huì)產(chǎn)生一些MapReduce程序序列,Pig的語(yǔ)言層由一種叫做Pig Latin的正文型語(yǔ)言組成。
作者簡(jiǎn)介
陸嘉恒,《Hadoop實(shí)戰(zhàn)》作者,中國(guó)人民大學(xué)副教授,新加坡國(guó)立大學(xué)博士,美國(guó)加利福尼亞大學(xué)爾灣分校(University of California, Irvine) 博士后。