一、Hadoop 1.0的模型:
|
split 0->map-[sort]->[1,3..] | /merge
| ==> reducer-->part 0 =>HDFS replication
split 1->map-[sort]->[2,6..] |—————————————
| ==> reducre--->part 1 =>HDFS replication
split 2->map-[sort]->[4,2..] |
|
//INPUT HDFS | //output HDFS
//啟動有3個map,reducer隻啟動了2個,sort:本地排序後發送給reducer
相同的key發送到同一個reducer
//merge:把多個資料流整合為一個資料流
工作流程:
Client--->Job--->Hadoop MapReduce master
|
|
V
/ \
Job parts Job parts
| |
V V
[Input] -- map1 reduceA---->[Output]
[Data ] ---map2 =》 reduceB---->[Data ]
\__map3
//其中map1,2,3和reduceA,B是交叉使用的。也就是說map1可以同時對應reduceA和reduceB,其他的也都可以
//MapReduce将需要處理的任務分成兩個部分,Map和Reduce
Client App
(MapReduce Client)----> Job Tracker
|
____________________|_____________________________
[task tracker1] [task tracker1] [task tracker1]
map reduce reduce reduce map map reduce map
JobTracker:有任務清單,以及狀态資訊
JobA----> [map task1]
JobB [map task2]
JobC [map task3]
... [reduce task 1]
[reduce task 2]
//任何一個task tracker能夠運作的任務數量是有限的,可以進行定義
//任務槽:決定可以運作多少個job
Jobtracker:
1.負責任務分發
2.檢查Task tracker狀态,tracker故障重新開機等
3.監控任務的狀态
Job tracker存在單點故障的問題,在hadoop2.0後這幾個功能分别實作了
Mapreduce 2.0之後切割為兩部分
二、HadooP 1.0 和 2.0
1.0: pig:data flow,Hive:sql ,
2.0: MR:batch批處理,Pig:data flow,Hive:sql
RT:stream graph:實時流式圖形處理
Tez:execution engine//執行引擎
MRv1:cluster resouce manager,Data procession
MRV2:
1.YARN:Cluster resource manager
Yet Another Resource Negotiator,另一種資源協調者
2.MRv2:Data procession
MR:batch作業
Tez:execution engine //提供運作時環境
可以直接在YARN之上的程式有:
MapReduce:Batch,Tez,HBase,Streaming,Graph,SPark,HPC MPI[高性能],Weave
Hadoop2.0
clinet-->RM--->node1/node2/node n...
Resouce Manager: RM是獨立的
node上運作的有[node manager+App Master+ Container]
Node manager:NM,運作在各node上,周期向RM報告node資訊,
clinet請求作業:node上的Application master決定要啟動幾個mapper幾個 reducer
mapper和reducer 稱為 Container //作業都在容器内運作。
Application master隻有一個,且同一個任務的APP M隻在一個節點上,但是Container會分别運作在多個節點上,并周期向APP M報告其處理狀态
APP M向RM報告任務運作狀況,在任務執行完畢後,RM會把APP M關閉
某一個任務故障後,由App M進行管理,而不是RM管理
2.0工作模型
A 【NM/Container 1 /APP M(B)】
\ /
【RM】 -- 【NM/Container 2 /APP M(A)】
/ \
B 【NM/Container 3 /A&A 】
//任務 A運作了3個container,在兩個節點上
//任務B運作了1個container,在一個節點上
Mapreduce status:container向APP M報告 //container包括map和reducer任務
Job submission:
node status:NM周期向RM報告
Resouce Request :由App M向RM申請,然後APP M就可以使用其他node 的container
client請求-->RM查找空閑node,空閑node上運作APP M-->APP M向RM申請運作container資源,RM向NM提請container,RM配置設定好coantainer後,告訴給APP M
APP M使用container運作任務。Container在運作過程中,不斷向APP M回報自己的狀态和進度,APP M向RM報告運作狀态。
APP M報告運作完成,RM收回container和關閉APP M
RM:resource manager
NM:node manager
AM:application master
container:mr任務運作
Hadoop 發展路線:
2003 nutch //蜘蛛程式
2004-2006:Mapreduce + GFS,論文
2011:hadoop 1.0.0
2013:hadoop 2.0
http://hadoop.apache.org/
三、Hadoop 2.0生态系統與基本元件
<a href="https://s5.51cto.com/wyfs02/M00/9A/B5/wKiom1lZvznzmNEGAAInWEkSyYU479.png" target="_blank"></a>
//在YARN之上是依賴于YARN的,其他的都是可以獨立使用的
源自于Google的GFS論文,發表于2003年10月,HDFS是GFS克隆版。
HDFS是Hadoop體系中資料存儲管理的基礎。它是一個高度容錯的系統,能檢測和應對硬體故障,用于在低成本的通用硬體上運作。
HDFS簡化了檔案的一緻性模型,通過流式資料通路,提供高吞吐量應用程式資料通路功能,适合帶有大型資料集的應用程式。
它提供了一次寫入多次讀取的機制,資料以塊的形式,同時分布在叢集不同實體機器上。
源自于google的MapReduce論文,發表于2004年12月,Hadoop MapReduce是google MapReduce 克隆版。
MapReduce是一種分布式計算模型,用以進行大資料量的計算。它屏蔽了分布式計算架構細節,将計算抽象成map和reduce兩部分,
其中Map對資料集上的獨立元素進行指定的操作,生成鍵-值對形式中間結果。Reduce則對中間結果中相同“鍵”的所有“值”進行規約,以得到最終結果。
MapReduce非常适合在大量計算機組成的分布式并行環境裡進行資料處理。
源自Google的Bigtable論文,發表于2006年11月,HBase是Google Bigtable克隆版
HBase是一個建立在HDFS之上,面向列的針對結構化資料的可伸縮、高可靠、高性能、分布式和面向列的動态模式資料庫。
HBase采用了BigTable的資料模型:增強的稀疏排序映射表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。
HBase提供了對大規模資料的随機、實時讀寫通路,同時,HBase中儲存的資料可以使用MapReduce來處理,它将資料存儲和并行計算完美地結合在一起。
HBase:山寨版的BitTable,列式存儲,SQL為行式存儲。
列祖:把多個常用的列存放在一個中。
cell:行和列的交叉位置,每個cell在存儲時,可以多版本共存,之前的版本不會被删除,可以追溯老版本。
可以指定儲存幾個版本。每個cell都是鍵值對,任何一個行多一個字段或者少一個字段,都是可以的,沒有強schema限制
HBASE是工作在HDFS之上,轉化為chunk的
需要用到大資料塊時,讀取到HBase中,進行讀取和修改,然後覆寫或者寫入HDFS
進而實作随機讀寫。HDFS是不支援随機讀寫的
HBase接口:
HBase基于分布式實作:需要另起一套叢集,嚴重依賴于ZooKeeper解決腦裂
HDFS本身就有備援功能,每個chunk存儲為了多個副本
HBase作為面向列的資料庫運作在HDFS之上,HDFS缺乏随即讀寫操作,HBase正是為此而出現。
HBase以Google BigTable為藍本,以鍵值對的形式存儲。項目的目标就是快速在主機内數十億行資料中定位所需的資料并通路它。
HBase是一個資料庫,一個NoSql的資料庫,像其他資料庫一樣提供随即讀寫功能,Hadoop不能滿足實時需要,HBase正可以滿足。
如果你需要實時通路一些資料,就把它存入HBase。
你可以用Hadoop作為靜态資料倉庫,HBase作為資料存儲,放那些進行一些操作會改變的資料
源自Google的Chubby論文,發表于2006年11月,Zookeeper是Chubby克隆版
解決分布式環境下的資料管理問題:統一命名,狀态同步,叢集管理,配置同步等。
Hadoop的許多元件依賴于Zookeeper,它運作在計算機叢集上面,用于管理Hadoop操作。
由facebook開源,最初用于解決海量結構化的日志資料統計問題。
Hive定義了一種類似SQL的查詢語言(HQL),将SQL轉化為MapReduce任務在Hadoop上執行。通常用于離線分析。
HQL用于運作存儲在Hadoop上的查詢語句,Hive讓不熟悉MapReduce開發人員也能編寫資料查詢語句,然後這些語句被翻譯為Hadoop上面的MapReduce任務。
Hive:幫忙轉換成MapReduce任務//MapReduce:是bat程式,速度較慢
HQ與SQl語句接近,适合在離線下進行資料的操作,在真實的生産環境中進行實時的線上查詢或操作很“慢”
Hive在Hadoop中扮演資料倉庫的角色。
你可以用 HiveQL進行select,join,等等操作。
如果你有資料倉庫的需求并且你擅長寫SQL并且不想寫MapReduce jobs就可以用Hive代替。
熟悉SQL的朋友可以使用Hive對離線的進行資料處理與分析工作
由yahoo!開源,設計動機是提供一種基于MapReduce的ad-hoc(計算在query時發生)資料分析工具
Pig定義了一種資料流語言—Pig Latin,它是MapReduce程式設計的複雜性的抽象,Pig平台包括運作環境和用于分析Hadoop資料集的腳本語言(Pig Latin)。
其編譯器将Pig Latin翻譯成MapReduce程式序列将腳本轉換為MapReduce任務在Hadoop上執行。通常用于進行離線分析。
Pig:腳本程式設計語言接口 一種操作hadoop的輕量級腳本語言,最初又雅虎公司推出,不過現在正在走下坡路了。
不過個人推薦使用Hive
Sqoop是SQL-to-Hadoop的縮寫,主要用于傳統資料庫和Hadoop之前傳輸資料。資料的導入和導出本質上是Mapreduce程式,充分利用了MR的并行化和容錯性。
Sqoop利用資料庫技術描述資料架構,用于在關系資料庫、資料倉庫和Hadoop之間轉移資料。
Cloudera開源的日志收集系統,具有分布式、高可靠、高容錯、易于定制和擴充的特點。
它将資料從産生、傳輸、處理并最終寫入目标的路徑的過程抽象為資料流,在具體的資料流中,資料源支援在Flume中定制資料發送方,進而支援收集各種不同協定資料。
同時,Flume資料流提供對日志資料進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具有能夠将日志寫往各種資料目标(可定制)的能力。
總的來說,Flume是一個可擴充、适合複雜環境的海量日志收集系統。當然也可以用于收集其他類型資料
Mahout起源于2008年,最初是Apache Lucent的子項目,它在極短的時間内取得了長足的發展,現在是Apache的頂級項目。
Mahout的主要目标是建立一些可擴充的機器學習領域經典算法的實作,旨在幫助開發人員更加友善快捷地建立智能應用程式。
Mahout現在已經包含了聚類、分類、推薦引擎(協同過濾)和頻繁集挖掘等廣泛使用的資料挖掘方法。
除了算法,Mahout還包含資料的輸入/輸出工具、與其他存儲系統(如資料庫、MongoDB 或Cassandra)內建等資料挖掘支援架構。
Oozie是一個可擴充的工作體系,內建于Hadoop的堆棧,用于協調多個MapReduce作業的執行。它能夠管理一個複雜的系統,基于外部事件來執行,外部事件包括資料的定時和資料的出現。
Oozie工作流是放置在控制依賴DAG(有向無環圖 Direct Acyclic Graph)中的一組動作(例如,Hadoop的Map/Reduce作業、Pig作業等),其中指定了動作執行的順序。
Oozie使用hPDL(一種XML流程定義語言)來描述這個圖。
- 資源管理:包括應用程式管理和機器資源管理
- 資源雙層排程
- 容錯性:各個元件均有考慮容錯性
- 擴充性:可擴充到上萬個節點
Mesos誕生于UC Berkeley的一個研究項目,現已成為Apache項目,目前有一些公司使用Mesos管理叢集資源,比如Twitter。
與yarn類似,Mesos是一個資源統一管理和排程的平台,同樣支援比如MR、steaming等多種運算架構。
Tachyon(/'tki:n/ 意為超光速粒子)是以記憶體為中心的分布式檔案系統,擁有高性能和容錯能力,
能夠為叢集架構(如Spark、MapReduce)提供可靠的記憶體級速度的檔案共享服務。
Tachyon誕生于UC Berkeley的AMPLab。
Tez是Apache最新開源的支援DAG作業的計算架構,它直接源于MapReduce架構,核心思想是将Map和Reduce兩個操作進一步拆分,
即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,
這樣,這些分解後的元操作可以任意靈活組合,産生新的操作,這些操作經過一些控制程式組裝後,可形成一個大的DAG作業。
目前hive支援mr、tez計算模型,tez能完美二進制mr程式,提升運算性能。
Spark是一個Apache項目,它被标榜為“快如閃電的叢集計算”。它擁有一個繁榮的開源社群,并且是目前最活躍的Apache項目。
最早Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的并行計算架構。
Spark提供了一個更快、更通用的資料處理平台。和Hadoop相比,Spark可以讓你的程式在記憶體中運作時速度提升100倍,或者在磁盤上運作時速度提升10倍
Apache Giraph是一個可伸縮的分布式疊代圖處理系統, 基于Hadoop平台,靈感來自 BSP (bulk synchronous parallel) 和 Google 的 Pregel。
最早出自雅虎。雅虎在開發Giraph時采用了Google工程師2010年發表的論文《Pregel:大規模圖表處理系統》中的原理。後來,雅虎将Giraph捐贈給Apache軟體基金會。
目前所有人都可以下載下傳Giraph,它已經成為Apache軟體基金會的開源項目,并得到Facebook的支援,獲得多方面的改進。
Spark GraphX最先是伯克利AMPLAB的一個分布式圖計算架構項目,目前整合在spark運作架構中,為其提供BSP大規模并行圖計算能力。
Spark MLlib是一個機器學習庫,它提供了各種各樣的算法,這些算法用來在叢集上針對分類、回歸、聚類、協同過濾等。
Spark Streaming支援對流資料的實時處理,以微批的方式對實時資料進行計算
Kafka是Linkedin于2010年12月份開源的消息系統,它主要用于處理活躍的流式資料。
活躍的流式資料在web網站應用中非常常見,這些資料包括網站的pv、使用者通路了什麼内容,搜尋了什麼内容等。
這些資料通常以日志的形式記錄下來,然後每隔一段時間進行一次統計處理。
Apache Phoenix 是HBase的SQL驅動,Phoenix 使得Hbase 支援通過JDBC的方式進行通路,并将你的SQL查詢轉換成Hbase的掃描和相應的動作。
Apache ranger是一個hadoop叢集權限架構,提供操作、監控、管理複雜的資料權限,它提供一個集中的管理機制,管理基于yarn的hadoop生态圈的所有資料權限。
Apache knox是一個通路hadoop叢集的restapi網關,它為所有rest通路提供了一個簡單的通路接口點,能完成3A認證(Authentication,Authorization,Auditing)和SSO(單點登入)等
Apache Falcon 是一個面向Hadoop的、新的資料處理和管理平台,設計用于資料移動、資料管道協調、生命周期管理和資料發現。它使終端使用者可以快速地将他們的資料及其相關的處理和管理任務“上載(onboard)”到Hadoop叢集。
Apache Ambari 的作用來說,就是建立、管理、監視 Hadoop 的叢集,是為了讓 Hadoop 以及相關的大資料軟體更容易使用的一個web工具。
注意:Hadoop盡量不要運作在虛拟機上,因為對IO影響比較大
Hadoop Distribution:
社群版:Apache Hadoop
第三方發行版:
Cloudera:hadoop源創始人:CDH //iso鏡像,最成型的
Hortonworks:原有的hadoop人員:HDP //iso鏡像,非開源
Intel:IDH
MapR:
Amazon Elastic Map Reduce(EMR)
推薦使用Apache hadoop或者CDH
本文轉自MT_IT51CTO部落格,原文連結:http://blog.51cto.com/hmtk520/1944004,如需轉載請自行聯系原作者