Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。用戶能夠在不瞭解分佈式底層細節的狀況下,開發分佈式程序。充分利用集羣的威力進行高速運算和存儲。具備可靠、高效、可伸縮的特色。java
Hadoop的核心是YARN,HDFS和Mapreduce。node
優勢:web
缺點算法
優勢數據庫
缺點tomcat
源自於Google的GFS論文,發表於2003年10月,HDFS是GFS克隆版。安全
HDFS是Hadoop體系中存儲管理的基礎。他是高度容錯的系統,能檢測和應對硬件故障,用於在低成本的通用硬件上運行。服務器
HDFS簡化了文件的一致性模型,經過流式數據訪問,提升吞吐量應用程序數據訪問功能,適合帶有大型數據集的應用程序。架構
它提供了一次寫入屢次讀取的機制,數據以塊的形式,同時分佈式在集羣不一樣物理機上。框架
CS架構:分爲兩部分,NameNode(服務端)和DataNode(客戶端)
Client是第三方程序。
訪問數據:Client請求訪問NameNode,NameNode返回相應的元數據(告知client數據在哪一個DataNode上),client找對應的DataNode讀取數據。
NameNode負責數據存儲到哪一個節點上。
容錯機制(數據備份): NameNode將數據存儲到某個節點的同時,會根據配置建立對應副本到其餘(物理)節點上(能夠感知數據在哪一個物理節點上)。
源自於Google的MapReduce論文,發表於2004年12月,Hadoop MapReduce是Google MapReduce的克隆版。
MapReduce是一種分佈式計算模型,泳衣進行大數據量的計算。他屏蔽了分佈式計算框架細節,將計算抽象成map和reduce兩部分。
map對數據集上的獨立元素進行指定的操做,生成鍵-值對形式中間結果。reduce則對中間結果中相同「鍵」的全部「值」進行規約,以獲得最終結果。
MapReduce很是適合大量計算機組成的分佈式並行環境裏進行數據處理。
源自於Google的bigtable論文,發表於2006年11月,HBase是Google bigtable的克隆版。
HBase是一個開源的非關係型分佈式數據庫(NoSQL)。
HBase是一個創建在HDFS之上, 面向列的稀疏排序映射表(Key/value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。
在HBase中,列簇至關於關係型數據庫的表。而key-value這樣的鍵值對,至關於數據庫裏面的一行。
HBase提供了對大規模數據的隨機、實時讀寫訪問;同時,HBase中保存的數據可使用MapReduce來處理,它將數據和並行計算完美結合在一塊兒。
HBase具備高可靠性、高性能、面向列、可伸縮的特色
源自於Google的chubby論文,發表於2006年11月,zookeeper是chubby的克隆版。
zookeeper是一個分佈式應用程序協調服務。
它解決了分佈式環境下數據管理問題:統一命名,狀態同步,集羣管理,配置同步等。
Hadoop的許多組件依賴於zookeeper,它運行在計算集羣上面,用於管理Hadoop操做。
zookeeper名字空間的每一個節點都是以這樣一個路徑來標識的。這樣的節點統一稱爲znode。
分爲如下幾類(如下能夠組成)
由Facebook開源,最初用於解決海量結構化的日誌數據統計問題。
Hive定義了一種相似SQL的查詢語言(HQL),將SQL轉化爲MapReduce任務在Hadoop上執行。一般用於離線分析。
HQL用於運行存儲在Hadoop上的查詢語句,Hive讓部署MapReduce開發人員也能編寫數據查詢語句,而後這些語句被翻譯爲Hadoop上面的MapReduce任務。
Hadoop和MapReduce是hive架構的根基。
分爲兩大類:服務端組件和客戶端組件
有Yahoo開源,設計動機是提供一種基於MapReduce的ad-hoc(計算在query時發生)數據分析工具。
pig定義了一種數據流語言——pig latin,它是MapReduce變成的複雜性的抽象,pig平臺包括運行環境和用於Hadoop數據集的腳本語言(pig latin)。
實現:pig 編譯器將pig latin翻譯成MapReduce程序序列,將腳本轉換成MapReduce任務在Hadoop上執行,一般用於離線分析。(如今幾乎讓hive去掉)
sqoop是SQL-to-Hadoop的縮寫,主要用於傳統數據庫和Hadoop之間傳輸數據。數據的導入和導出本質是MapReduce程序,充分利用MR的並行化和容錯性。
sqoop利用數據庫計算描述數據架構,用在關係數據庫、數據倉庫和Hadoop之間轉移數據。
flume是cloudera開源的日誌收集系統,具備分佈式、高可靠、高容錯、易於定製和擴展的特色。
它將數據從產生、傳輸、處理並最終寫入目標路徑的過程抽象爲數據流,在具體的數據流中,數據源支持在flume中定製數據發送方,從而支持收集各類不一樣協議數據。(能夠直接寫到Hadoop中,傳輸到另一臺服務器中,或本地指定路徑)
flume數據流提供對日誌數據進行簡單處理的能力,如過濾、格式轉換等。此外flume還具備可以將日誌寫到各類數據目標(可定製)的能力。
總的來講,flume是一個可擴展、適合複雜環境的海量日誌收集系統,也能夠用於收集其餘類型數據。
Oozie是一個基於工做流引擎的服務器,能夠在上面運行Hadoop的MapReduce和pig任務。它實際上是一個運行在Java Servlet容器(好比tomcat)中的java web應用。
對於Oozie來講,工做流就是一系列的操做(好比Hadoop的MR,以及pig的任務),這些操做經過有向無環圖的機制控制。這種控制依賴是,一個操做的輸入依賴於前一個任務的輸出,只有前一個操做全完完成後,才能開始第二個。
Oozie工做流經過hPDL(hPDL是一種xml的流程定義語言)。工做流操做經過遠程系統啓動任務,當任務完成後,遠程系統會進行回調來通知任務已經結束,而後
再開始下一個操做。
控制流節點定義了工做流的開始和借宿(start、end以及fail的節點),寧控制工做流執行路徑(decision,fork,join節點)。操做節是工做流觸發計算/處理任務的執行,Oozie支持不一樣的任務類型Hadoop MapReduce,hdfs,pig,ssh,email,Oozie子工做流等等。Oozie能夠自動以擴展任務類型。
Oozie工做流能夠參數化的方式執行(使用變量${inputDir}定義)。當提交工做流任務時,就須要同時提供參數。若參數合適的話(使用不一樣的目錄)就能夠定義並行的工做流任務。
YARN是一代MapReduce,即MRv2。是在第一代MapReduce基礎上演變而來的,主要是爲了解決原始Hadoop擴展性查,不支持多計算框架而提出的。
YARN是下一代Hadoop計算平臺,是一個通用的運行框架,用戶能夠編寫本身計算框架,在該運行環境中運行。
用於本身編寫的框架做爲客戶端的一個lib,在運行提交做業時打包便可。
spark是一個Apache項目,它被標榜爲「快如閃電的集羣計算」。它擁有了一個繁榮的開源社區,而且是目前最活躍的Apache項目。
spark是分佈式批處理系統和分析挖掘引擎。
最先spark是UC berkeley AMP lab所開源的類Hadoop MapReduce的通用的並行計算框架。
快,內存計算;資源分配靈活,可基於Yarn或Mesos
spark提供了一個更快的、更通用的數據處理平臺。和Hadoop相比,spark可讓你的程序在內訓中運行時速度提高100倍,或者在磁盤時速度提升10倍。
kafka是LinkedIn與2010年12月開源的消息隊列系統,他主要用於處理活躍的流式數據。
活躍的流式數據在web網站應用中很是常見,這些數據包括:網站的PV,用戶訪問了什麼內容,搜索了什麼內容等等。這些動做一般以日誌的形式記錄下來,而後每一個一段時間進行一次統計處理。
storm是一個開源、分佈式、高容錯的實時計算系統,彌補了Hadoop批處理所不能知足的實時要求,常常用於在實時分析、在線機器學習、持續計算、分佈式遠程調用和EIL等領域。
https://blog.csdn.net/hxyerui/article/details/51179488
Hue(Hadoop user experience)是一個開源的Apache Hadoop UI系統,由Cloudera Desktop演化而來,它是基於Python Web框架Django實現的。
在streamsets推出前,flume,scribe等少數開源工具是流式採集日誌僅有的解決方案,flume的應用案例最多。streamsets是flume的良好替代品
streamsets的源和目標的支持特別豐富,還能夠對數據進行不落地處理,所以還能夠替代傳統ETL軟件的一部分功能
資源佔用率比flume略高,可是由於和flume同樣能夠分佈式部署,問題不大