Hadoop Common
Hadoop Common是在Hadoop0.2版本之后分離出來的HDFS和MapReduce獨立子項目的內容,是Hadoop的核心部分,能為其他模塊提供一些常用工具集,如序列化機制、Hadoop抽象文件系統FileSystem、系統配置工具Configuration,并且在為其平臺上的軟件開發提供KPI等。其他Hadoop子項目都是以此為基礎而建立來的。
HDFS
HDFS(Hadoop分布式文件系統)源自于Google的GFS論文,發表于2003年10月,HDFS是GFS的實現版。HDFS是Hadoop體系中數據存儲管理的基礎,它是一個高度容錯的系統,能檢測和應對硬件故障,在低成本的通用硬件上運行。HDFS簡化了文件的一次性模型,通過流式數據訪問,提供高吞吐量應用程序數據訪問功能,適用帶有數據集的應用程序。HDFS提供一次寫入多次讀取的機制,數據以塊的形式,同時分布存儲在不同的物理機器上。
HDFS默認的最基本的存儲單位是64MB的數據塊,和普通文件系統一樣,HDFS中的文件被分成64MB一塊的數據塊存儲。它的開發是基于流數據模式訪問和處理超大文件的需求。
超大文件
超大文件:是指進行存儲的文件達到MB、GB、TB級的大文件。
流式數據訪問
流式數據訪問:一次寫入、多次讀取的訪問模式。
商用硬件
在節點出現故障時,HDFS會繼續運行,用戶不會察覺到明顯的中斷情況。這是由于HDFS的高可用性和容錯性是通過軟件來實現的,也由此使得它不需要價格高的設備來保障,大街小巷能買到的普通硬件就能用作搭建HDFS。
HDFS并不是所有場景都適用。
1)由于HDFS的優勢是海量數據傳輸,在低延遲的數據訪問中就并不適用,10ms以下的訪問可以無視HDFS。HDFS會用延遲來換取數據的高吞吐量。
2)存在的小文件較多時,HDFS也不適用。這主要是由于HDFS的整個文件存儲在NameNode中,它能對數據庫的存儲位置進行定位,因此NameNode的內存量是被文件的數量限制的。而大量的小文件會占用很大一部分內存,在進行數據處理時會合并這些小文件。
3)在多處寫和隨機修改的場景中,由于HDFS的文件不支持多個寫入或任意位置的修改,所以HDFS也不適用。
MapReduce
Mapduce(分布式計算框架)源自于Google的MapReduce論文,發表于2004年12月,Hadoop MapReduce是Google Reduce 克隆版。MapReduce是一種分布式計算模型,用以進行海量數據的計算。它屏蔽了分布式計算框架細節,將計算抽象成Map 和Reduce兩部分,其中Map對數據集上的獨立元素進行指定的操作,生成鍵-值對形式中間結果。Reduce則對中間結果中相同“鍵”的所有“值”進行規約,以得到最終結果。MapReduce非常適合在大量計算機組成的分布式并行環境里進行數據處理。
HBase
Hbase(分布式列存數據庫)源自Google的BigTable論文,發表于2006年11月,HBase是Google Table的實現。HBase是一個建立在HDFS之上,面向結構化數據的可伸縮、高可靠、高性能、分布式和面向列的動態模式數據庫。HBase采用了BigTable的數據模型,即增強的稀疏排序映射表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。HBase提供了對大規模數據的隨機、實時讀寫訪問,同時,HBase中保存的數據可以使用MapReduce來處理,它將數據存儲和并行計算完美地結合在一起。
Zookeeper
Zookeeper(分布式協作服務)源自Google的Ghubby論文,發表于2006年11月,Zookeeper是CHubby實現版。Zookeeper的主要目標是解決分布式環境下的數據管理問題,如統一命名、狀態同步、集群管理、配置同步等。Hadoop的許多組件依賴于Zookeeper,它運行在計算機集群上面,用于Hadoop管理操作。
Hive
Hive(數據倉庫)由Facebook開源,最初用于解決海量結構化的日志數據統計問題。Hive定義了一種類似SQL的查詢語言(HQL),將HQL轉化為MapReduce任務在Hadoop上執行,通常用于離線分析。HQL用于運行存儲在Hadoop上的查詢語句,Hive使不熟悉MapReduce開發人員也能編寫數據查詢語句,然后這些數據被翻譯成Hadoop上面的MapReduce任務。
Pig
Pig(ad-hoc腳本)由yahoo開源,其設計動機是提供一種基于MapReduce的ad-hoc(計算query時發生)數據分析工具。Pig定義了一種數據流語言——Pig Latin,它是MapReduce編程的復雜性抽象,Pig平臺包括運行環境和用于分析Hadoop數據集的腳本語言(Pig Lain)。其編譯器將Pig Lain翻譯成MapReduce程序序列,將腳本轉換為MapReduce任務在Hadoop任務在Hadoop上執行,通常用于進行離線分析。
Sqoop
Sqoop(數據ETL/同步工具)是SQL-to-Hadoop的縮寫,主要用于傳統數據和Hadoop之前傳輸數據。數據的導入和導出本質上是MapReduce程序,充分利用了MR的并行化和容錯性,Sqoop利用數據庫技術描述數據架構,用于關系數據庫、數據倉庫和Hadoop之間轉移數據。
Flume
Flume(日志收集工具)是Cloudera開源的日志系統收集系統,具有分布式、高可靠、高容錯、易于定制和擴展的特點。它將數據從產生、傳輸、處理并最終寫入目標的路徑的過程抽象為數據流,在具體的數據流中,數據源支持在Flume中定制數據發送方,從而支持收集各種不同協議數據。同時,Flume數據流提供對日志數據進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具有能夠將日志寫往各種數據目標(可定制)的能力。總的來說,Flume是一個可擴展、適合復雜環境的海量日志收集系統,當然也可以用于收集其他類型數據。
Mahout
Mahout(數據挖掘算法庫)起源于2008年,最初是Apache Lucent的子項目,它在極端的時間內取得了長足的發展,現在是Apache的頂級項目。Mahout的主要目標是創建一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便、快捷地創建智能應用程序。Mahout現在已經包含了聚類、分類、推薦引擎(協同過濾)和頻繁集挖掘等廣大使用的數據挖掘算法。除了算法,Mahout還包含數據的輸入/輸出工具、與其他存儲系統(如數據庫、MangoDB或Cassadra)集成的數據挖掘支持架構。
YARN
YARN(分布式資源管理器)是下一代MapReduce,即MRv2,是在第一代MapReduce基礎上演變而來的,主要是為了解決原始Hadoop擴展性差,不支持多計算框架而提出的。YARN是下一代Hadoop計算平臺,是一個通用的運行時框架,用戶可以編寫自己的極端框架,在該運行環境中運行。
Mesos
Mesos(分布式資源管理器)是一個誕生于UC Berkeley的研究項目,現已成為Apache項目,當前有一些公司使用Masos管理集群資源,如Twitter。與YARN類似,Mesos是一個資源統一管理和調度平臺重點內容,同樣支持諸如MR、steaming等多種運算框架。
Tachyon
Tachyon(意為超光速粒子)是以內存為中心的分布式文件系統,擁有高性能和容錯能力,能夠為集群框架(如Spark、Mapre)提供可靠的內存級速度的文件共享服務。Tachyon誕生于UC Berkeley的AMPLab。
Spark
Spark(內存DAG計算模型)是一個Apche項目,被標榜為“快如閃電的集群計算”,它擁有一個繁榮的開源社區,并且是目前最活躍的Apache項目。最早Spark是UC Berkeley AMP Lab所開源的類Hadoop MapReduce的通用計算框架,Spark提供了一個更快、更通用的數據處理平臺。和Hadoop相比,Spark平臺可以讓你的程序在內存中運行時速度提升100倍,或者在磁盤上運行時速度提升10倍。
Spark GraphX
Spark GraphX最先是伯克利AMP Lab的一個分布式圖計算框架項目,目前整合在Spark運行框架中,為其提供BSP大規模并行圖計算能力。
Spark MLlib
Spark MLlib是一個機器學習庫,它提供了各種各樣的算法,這些算法用來在集群上針對分類、回歸、聚類、協同過濾等。
Kafka
Kafka是Linkedin于2010年12月開源的消息系統,主要用于處理活躍的流式數據。活躍的流失數據在Web網站應用中非常常見,這些數據包括網站的PV(Page View),用戶訪問了什么內容,搜索了什么內容等,這些數據通常以日志的形式保存下來,然后每隔一段時間進行一次統計處理。
Apache Pheonix
Apache Pheonix是HBase的SQL驅動(HBase SQL接口),Pheonix使得HBase支持通過JDBC的方式進行訪問,并將你的SQL查詢換成HBase的掃描和相應的動作。