▲圖1-1 Hadoop的項目結構圖

2)Avro:Avro是用于數據序列化的系統(tǒng)。它提供了豐富的數據結構類型、快速可壓縮的二進制數據格式、存儲持久性數據的文件集、遠程調用RPC的功能和簡單的動態(tài)語言集成功能。其中,代碼生成器既不需要讀寫文件數據,也不需要使用或實現RPC協議,它只是一個可選的對靜態(tài)類型語言的實現。

Avro系統(tǒng)依賴于模式(Schema),Avro數據的讀和寫是在模式之下完成的。這樣就可以減少寫入數據的開銷,提高序列化的速度并縮減其大小。同時,也可以方便動態(tài)腳本語言的使用,因為數據連同其模式都是自描述的。

在RPC中,Avro系統(tǒng)的客戶端和服務端通過握手協議進行模式的交換。因此當客戶端和服務端擁有彼此全部的模式時,不同模式下的相同命名字段、丟失字段和附加字段等信息的一致性問題就得到了很好的解決。

3)MapReduce:MapReduce是一種編程模型,用于大規(guī)模數據集(大于1TB)的并行運算。“映射”(map)、“化簡” (reduce)等概念和它們的主要思想都是從函數式編程語言中借來的。它使得編程人員在不了解分布式并行編程的情況下也能方便地將自己的程序運行在分布式系統(tǒng)上。MapReduce在執(zhí)行時先指定一個map(映射)函數,把輸入鍵值對映射成一組新的鍵值對,經過一定的處理后交給 reduce,reduce對相同key下的所有value進行處理后再輸出鍵值對作為最終的結果。

圖1-2是MapReduce的任務處理流程圖,它展示了MapReduce程序將輸入劃分到不同的map上,再將map的結果合并到reduce,然后進行處理的輸出過程。

▲圖1-2 MapReduce的任務處理流程圖

4)HDFS:是一個分布式文件系統(tǒng)。由于HDFS具有高容錯性(fault-tolerant)的特點,所以可以設計部署在低廉(low-cost) 的硬件上。它可以通過提供高吞吐率(high throughput)來訪問應用程序的數據,適合那些有著超大數據集的應用程序。HDFS放寬了可移植操作系統(tǒng)接口(POSIX,Portable Operating System Interface)的要求,這樣就可以實現以流的形式訪問文件系統(tǒng)中的數據。HDFS原本是開源的Apache項目Nutch的基礎結構,最后它成為了Hadoop的基礎架構之一。

以下是HDFS的設計目標:

檢測和快速恢復硬件故障。硬件故障是常見的問題,整個HDFS系統(tǒng)由數百臺或數千臺存儲著數據文件的服務器組成,而如此多的服務器意味著高故障率,因此,故障的檢測和自動快速恢復是HDFS的一個核心目標。

流式的數據訪問。HDFS使應用程序能流式地訪問它們的數據集。HDFS被設計成適合進行批量處理,而不是用戶交互式的處理。所以它重視數據吞吐量,而不是數據訪問的反應速度。

簡化一致性模型。大部分的HDFS程序操作文件時需要一次寫入,多次讀取。一個文件一旦經過創(chuàng)建、寫入、關閉之后就不需要修改了,從而簡化了數據一致性問題和高吞吐量的數據訪問問題。

通信協議。所有的通信協議都在TCP/IP協議之上。一個客戶端和明確配置了端口的名字節(jié)點(NameNode)建立連接之后,它和名稱節(jié)點 (NameNode)的協議便是客戶端協議(Client Protocal)。數據節(jié)點(DataNode)和名字節(jié)點(NameNode)之間則用數據節(jié)點協議(DataNode Protocal)。

5)Chukwa:Chukwa是開源的數據收集系統(tǒng),用于監(jiān)控和分析大型分布式系統(tǒng)的數據。Chukwa是在Hadoop的HDFS和 MapReduce框架之上搭建的,它同時繼承了Hadoop的可擴展性和健壯性。Chukwa通過HDFS來存儲數據,并依賴于MapReduce任務處理數據。Chukwa中也附帶了靈活且強大的工具,用于顯示、監(jiān)視和分析數據結果,以便更好地利用所收集的數據。

6)Hive:Hive最早是由Facebook設計的,是一個建立在Hadoop基礎之上的數據倉庫,它提供了一些用于數據整理、特殊查詢和分析存儲在 Hadoop文件中的數據集的工具。Hive提供的是一種結構化數據的機制,它支持類似于傳統(tǒng)RDBMS中的SQL語言來幫助那些熟悉SQL的用戶查詢 Hadoop中的數據,該查詢語言稱為Hive QL。與此同時,那些傳統(tǒng)的MapReduce編程人員也可以在Mapper或Reducer中通過Hive QL查詢數據。Hive編譯器會把Hive QL編譯成一組MapReduce任務,從而方便MapReduce編程人員進行Hadoop應用的開發(fā)。

7)HBase:HBase是一個分布式的、面向列的開源數據庫,該技術來源于Google的論文“Bigtable:一個結構化數據的分布式存儲系統(tǒng)”。如同Bigtable利用了Google文件系統(tǒng)(Google File System)提供的分布式數據存儲方式一樣,HBase在Hadoop之上提供了類似于Bigtable的能力。HBase是Hadoop 項目的子項目。HBase不同于一般的關系數據庫,其一,HBase是一個適合于存儲非結構化數據的數據庫;其二,HBase是基于列而不是基于行的模式。HBase和Bigtable使用相同的數據模型。用戶將數據存儲在一個表里,一個數據行擁有一個可選擇的鍵和任意數量的列。由于HBase表示疏松的,用戶可以給行定義各種不同的列。HBase主要用于需要隨機訪問、實時讀寫的大數據(Big Data)。

8)Pig:Pig是一個對大型數據集進行分析和評估的平臺。Pig最突出的優(yōu)勢是它的結構能夠經受住高度并行化的檢驗,這個特性讓它能夠處理大型的數據集。目前,Pig的底層由一個編譯器組成,它在運行的時候會產生一些MapReduce程序序列,Pig的語言層由一種叫做Pig Latin的正文型語言組成。

作者簡介

陸嘉恒,《Hadoop實戰(zhàn)》作者,中國人民大學副教授,新加坡國立大學博士,美國加利福尼亞大學爾灣分校(University of California, Irvine) 博士后。

分享到

hanrui

相關推薦