天天看點

好程式員大資料教育訓練分享之Hadoop的生态系統

  好程式員大資料教育訓練分享之Hadoop的生态系統,這次,我整理了一下hadoop的生态系統。hadoop生态系統,意思就是以hadoop為平台的各種應用架構,互相相容,組成了一個獨立的應用體系,也可以稱之為生态圈。

通過以下的圖:

好程式員大資料教育訓練分享之Hadoop的生态系統

hadoop生态系統

我們可以可以總結如下常用的應用架構(圖中沒有的,我也列出了幾個):

1,HDFS(hadoop分布式檔案系統)

是hadoop體系中資料存儲管理的基礎。他是一個高度容錯的系統,能檢測和應對硬體故障。

client:切分檔案,通路HDFS,與那麼弄得互動,擷取檔案位置資訊,與DataNode互動,讀取和寫入資料。

namenode:master節點,在hadoop1.x中隻有一個,管理HDFS的名稱空間和資料塊映射資訊,配置副本政策,處理客戶 端請求。

DataNode:slave節點,存儲實際的資料,彙報存儲資訊給namenode。

secondary namenode:輔助namenode,分擔其工作量:定期合并fsimage和fsedits,推送給namenode;緊急情況下和輔助恢複namenode,但其并非namenode的熱備。

2,mapreduce(分布式計算架構)

mapreduce是一種計算模型,用于處理大資料量的計算。其中map對應資料集上的獨立元素進行指定的操作,生成鍵-值對形式中間,reduce則對中間結果中相同的鍵的所有值進行規約,以得到最終結果。

jobtracker:master節點,隻有一個,管理所有作業,任務/作業的監控,錯誤處理等,将任務分解成一系列任務,并分派給tasktracker。

tacktracker:slave節點,運作 map task和reducetask;并與jobtracker互動,彙報任務狀态。

map task:解析每條資料記錄,傳遞給使用者編寫的map()并執行,将輸出結果寫入到本地磁盤(如果為map—only作業,則直接寫入HDFS)。

reduce task:從map 它深刻地執行結果中,遠端讀取輸入資料,對資料進行排序,将資料分組傳遞給使用者編寫的reduce函數執行。

3, hive(基于hadoop的資料倉庫)

由Facebook開源,最初用于解決海量結構化的日志資料統計問題。

hive定于了一種類似sql的查詢語言(hql)将sql轉化為mapreduce任務在hadoop上執行。

4,hbase(分布式列存資料庫)

hbase是一個針對結構化資料的可伸縮,高可靠,高性能,分布式和面向列的動态模式資料庫。和傳統關系型資料庫不同,hbase采用了bigtable的資料模型:增強了稀疏排序映射表(key/value)。其中,鍵由行關鍵字,列關鍵字和時間戳構成,hbase提供了對大規模資料的随機,實時讀寫通路,同時,hbase中儲存的資料可以使用mapreduce來處理,它将資料存儲和并行計算完美結合在一起。

5,zookeeper(分布式協作服務)

解決分布式環境下的資料管理問題:統一命名,狀态同步,叢集管理,配置同步等。

6,sqoop(資料同步工具)

sqoop是sql-to-hadoop的縮寫,主要用于傳統資料庫和hadoop之間傳輸資料。資料的導入和導出本質上是mapreduce程式,充分利用了MR的并行化和容錯性。

7,pig(基于hadoop的資料流系統)

定義了一種資料流語言-pig latin,将腳本轉換為mapreduce任務在hadoop上執行。通常用于離線分析。

8,mahout(資料挖掘算法庫)

mahout的主要目标是建立一些可擴充的機器學習領域經典算法的實作,旨在幫助開發人員更加友善快捷地建立隻能應用程式。mahout現在已經包含了聚類,分類,推薦引擎(協同過濾)和頻繁集挖掘等廣泛使用的資料挖掘方法。除了算法是,mahout還包含了資料的輸入/輸出工具,與其他存儲系統(如資料庫,mongoDB或Cassandra)內建等資料挖掘支援架構。

9,flume(日志收集工具)

cloudera開源的日志收集系統,具有分布式,高可靠,高容錯,易于定制和擴充的特點。他将資料從産生,傳輸,處理并寫入目标的路徑的過程抽象為資料流,在具體的資料流中,資料源支援在flume中定制資料發送方,進而支援收集各種不同協定資料。

10,資料總管的簡單介紹(YARN和mesos)

随着網際網路的高速發展,基于資料 密集型應用 的計算架構不斷出現,從支援離線處理的mapreduce,到支援線上處理的storm,從疊代式計算架構到 流式處理架構s4,...,在大部分網際網路公司中,這幾種架構可能都會采用,比如對于搜尋引擎公司,可能的技術方法如下:網頁建索引采用mapreduce架構,自然語言處理/資料挖掘采用spark,對性能要求到的資料挖掘算法用mpi等。公司一般将所有的這些架構部署到一個公共的叢集中,讓它們共享叢集的資源,并對資源進行統一使用,這樣便誕生了資源統一管理與排程平台,典型的代表是mesos和yarn。

11,其他的一些開源元件:

1)cloudrea impala:

一個開源的查詢引擎。與hive相同的中繼資料,SQL文法,ODBC驅動程式和使用者接口,可以直接在HDFS上提供快速,互動式SQL查詢。impala不再使用緩慢的hive+mapreduce批處理,而是通過與商用并行關系資料庫中類似的分布式查詢引擎。可以直接從HDFS或者Hbase中用select,join和統計函數查詢資料,進而大大降低延遲。

2)spark:

spark是個開源的資料 分析叢集計算架構,最初由加州大學伯克利分校AMPLab,建立于HDFS之上。spark與hadoop一樣,用于建構大規模,延遲低的資料分析應用。spark采用Scala語言實作,使用Scala作為應用架構。

spark采用基于記憶體的分布式資料集,優化了疊代式的工作負載以及互動式查詢。

與hadoop不同的是,spark與Scala緊密內建,Scala象管理本地collective對象那樣管理分布式資料集。spark支援分布式資料集上的疊代式任務,實際上可以在hadoop檔案系統上與hadoop一起運作(通過YARN,MESOS等實作)。

3)storm

storm是一個分布式的,容錯的計算系統,storm屬于流處理平台,多用于實時計算并更新資料庫。storm也可被用于“連續計算”,對資料流做連續查詢,在計算時将結果一流的形式輸出給使用者。他還可被用于“分布式RPC”,以并行的方式運作昂貴的運算。

4)kafka

kafka是由Apache軟體基金會開發的一個開源流處理平台,由Scala和Java編寫。Kafka是一種高吞吐量的分布式釋出訂閱消息系統,它可以處理消費者規模的網站中的所有動作流資料。 這種動作(網頁浏覽,搜尋和其他使用者的行動)是在現代網絡上的許多社會功能的一個關鍵因素。 這些資料通常是由于吞吐量的要求而通過處理日志和日志聚合來解決。 對于像Hadoop的一樣的日志資料和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。Kafka的目的是通過Hadoop的并行加載機制來統一線上和離線的消息處理,也是為了通過叢集來提供實時的消息

5)redis