天天看點

《Hadoop實戰第2版》——1.2節Hadoop項目及其結構

1.2 hadoop項目及其結構

現在hadoop已經發展成為包含很多項目的集合。雖然其核心内容是mapreduce和hadoop分布式檔案系統,但與hadoop相關的common、avro、chukwa、hive、hbase等項目也是不可或缺的。它們提供了互補性服務或在核心層上提供了更高層的服務。圖1-1是hadoop的項目結構圖。

《Hadoop實戰第2版》——1.2節Hadoop項目及其結構

下面将對hadoop的各個關聯項目進行更詳細的介紹。

1)common:common是為hadoop其他子項目提供支援的常用工具,它主要包括filesystem、rpc和串行化庫。它們為在廉價硬體上搭建雲計算環境提供基本的服務,并且會為運作在該平台上的軟體開發提供所需的api。

2)avro:avro是用于資料序列化的系統。它提供了豐富的資料結構類型、快速可壓縮的二進制資料格式、存儲持久性資料的檔案集、遠端調用rpc的功能和簡單的動态語言內建功能。其中代碼生成器既不需要讀寫檔案資料,也不需要使用或實作rpc協定,它隻是一個可選的對靜态類型語言的實作。

avro系統依賴于模式(schema),資料的讀和寫是在模式之下完成的。這樣可以減少寫入資料的開銷,提高序列化的速度并縮減其大小;同時,也可以友善動态腳本語言的使用,因為資料連同其模式都是自描述的。

在rpc中,avro系統的用戶端和服務端通過握手協定進行模式的交換,是以當用戶端和服務端擁有彼此全部的模式時,不同模式下相同命名字段、丢失字段和附加字段等資訊的一緻性問題就得到了很好的解決。

3)mapreduce:mapreduce是一種程式設計模型,用于大規模資料集(大于1tb)的并行運算。映射(map)、化簡(reduce)的概念和它們的主要思想都是從函數式程式設計語言中借鑒而來的。它極大地友善了程式設計人員—即使在不了解分布式并行程式設計的情況下,也可以将自己的程式運作在分布式系統上。mapreduce在執行時先指定一個map(映射)函數,把輸入鍵值對映射成一組新的鍵值對,經過一定處理後交給reduce,reduce對相同key下的所有value進行處理後再輸出鍵值對作為最終的結果。

圖1-2是mapreduce的任務處理流程圖,它展示了mapreduce程式将輸入劃分到不同的map上、再将map的結果合并到reduce、然後進行處理的輸出過程。詳細介紹請參考本章1.3節。

《Hadoop實戰第2版》——1.2節Hadoop項目及其結構

4)hdfs:hdfs是一個分布式檔案系統。因為hdfs具有高容錯性(fault-tolerent)的特點,是以它可以設計部署在低廉(low-cost)的硬體上。它可以通過提供高吞吐率(high throughput)來通路應用程式的資料,适合那些有着超大資料集的應用程式。hdfs放寬了對可移植作業系統接口(posix,portable operating system interface)的要求,這樣可以實作以流的形式通路檔案系統中的資料。hdfs原本是開源的apache項目nutch的基礎結構,最後它卻成為了hadoop基礎架構之一。

以下幾個方面是hdfs的設計目标:

檢測和快速恢複硬體故障。硬體故障是計算機常見的問題。整個hdfs系統由數百甚至數千個存儲着資料檔案的伺服器組成。而如此多的伺服器則意味着高故障率,是以,故障的檢測和快速自動恢複是hdfs的一個核心目标。

流式的資料通路。hdfs使應用程式流式地通路它們的資料集。hdfs被設計成适合進行批量處理,而不是使用者互動式處理。是以它重視資料吞吐量,而不是資料通路的反應速度。

簡化一緻性模型。大部分的hdfs程式對檔案的操作需要一次寫入,多次讀取。一個檔案一旦經過建立、寫入、關閉就不需要修改了。這個假設簡化了資料一緻性問題和高吞吐量的資料通路問題。

通信協定。所有的通信協定都是在tcp/ip協定之上的。一個用戶端和明确配置了端口的名位元組點(namenode)建立連接配接之後,它和名位元組點的協定便是用戶端協定(client protocal)。資料節點(datanode)和名位元組點之間則用資料節點協定(datanode protocal)。

關于hdfs的具體介紹請參考本章1.3節。

5)chukwa:chukwa是開源的資料收集系統,用于監控和分析大型分布式系統的資料。chukwa是在hadoop的hdfs和mapreduce架構之上搭建的,它繼承了hadoop的可擴充性和健壯性。chukwa通過hdfs來存儲資料,并依賴mapreduce任務處理資料。chukwa中也附帶了靈活且強大的工具,用于顯示、監視和分析資料結果,以便更好地利用所收集的資料。

6)hive:hive最早是由facebook設計的,是一個建立在hadoop基礎之上的資料倉庫,它提供了一些用于對hadoop檔案中的資料集進行資料整理、特殊查詢和分析存儲的工具。hive提供的是一種結構化資料的機制,它支援類似于傳統rdbms中的sql語言的查詢語言,來幫助那些熟悉sql的使用者查詢hadoop中的資料,該查詢語言稱為hive ql。與此同時,傳統的mapreduce程式設計人員也可以在mapper或reducer中通過hive ql查詢資料。hive編譯器會把hive ql編譯成一組mapreduce任務,進而友善mapreduce程式設計人員進行hadoop系統開發。

7)hbase:hbase是一個分布式的、面向列的開源資料庫,該技術來源于google論文《bigtable:一個結構化資料的分布式存儲系統》。如同bigtable利用了google檔案系統(google file system)提供的分布式資料存儲方式一樣,hbase在hadoop之上提供了類似于bigtable的能力。hbase不同于一般的關系資料庫,原因有兩個:其一,hbase是一個适合于非結構化資料存儲的資料庫;其二,hbase是基于列而不是基于行的模式。hbase和bigtable使用相同的資料模型。使用者将資料存儲在一個表裡,一個資料行擁有一個可選擇的鍵和任意數量的列。由于hbase表是疏松的,使用者可以為行定義各種不同的列。hbase主要用于需要随機通路、實時讀寫的大資料(big data)。具體介紹請參考第12章。

8)pig:pig是一個對大型資料集進行分析、評估的平台。pig最突出的優勢是它的結構能夠經受住高度并行化的檢驗,這個特性使得它能夠處理大型的資料集。目前,pig的底層由一個編譯器組成,它在運作的時候會産生一些mapreduce程式序列,pig的語言層由一種叫做pig latin的正文型語言組成。有關pig的具體内容請參考第14章。

9)zookeeper:zookeeper是一個為分布式應用所設計的開源協調服務。它主要為使用者提供同步、配置管理、分組和命名等服務,減輕分布式應用程式所承擔的協調任務。zookeeper的檔案系統使用了我們所熟悉的目錄樹結構。zookeeper是使用java編寫的,但是它支援java和c兩種程式設計語言。有關zookeeper的具體内容請參考第15章。

上面讨論的9個項目在本書中都有相應的章節進行詳細的介紹。

繼續閱讀