Hadoop的起源
Lucene -> Lucene的微縮版Nutch -> GFS和Mapreduce的機制新翎,從而提高了Nutch的性能。由此Hadoop產(chǎn)生了
什么是Hadoop
Hadoop是一個開源框架,可編寫和運行分布式應(yīng)用處理大規(guī)模數(shù)據(jù)舰褪。 Hadoop框架的核心是HDFS和MapReduce羔砾。其中 HDFS 是分布式文件系統(tǒng)祝懂,MapReduce 是分布式數(shù)據(jù)處理模型和執(zhí)行環(huán)境
Hadoop1.0
Hadoop1.0的基礎(chǔ)模塊:
模塊名稱 | 作用 |
---|---|
Common | 支持其他模塊的公用工具包 |
HDFS | 一個可高吞吐訪問應(yīng)用數(shù)據(jù)的分布式文件系統(tǒng) |
MapReduce | 并行計算的系統(tǒng) |
HDFS
master/slave模式
NameNode記錄數(shù)據(jù)集的元數(shù)據(jù)
客戶端操作數(shù)據(jù)時扼菠,需向NameNode查詢元數(shù)據(jù)尼荆,在查詢到數(shù)據(jù)所在的DataNode后烛亦,直接與DataNode交互诈泼,執(zhí)行讀/寫操作。不同的數(shù)據(jù)塊Block會有多個副本(主要是為了數(shù)據(jù)安全)煤禽。
MapReduce
MapReduce的調(diào)度框架
MapReduce的調(diào)度框架铐达,主要有這幾個角色:JobClient、JobTracker(JT)檬果、TaskTracker(TT)瓮孙,這里面的JT是一個單Master節(jié)點,TT是部署在每臺計算節(jié)點上的一個Service选脊。
其中JobClient負責(zé)根據(jù)用戶指定的參數(shù)杭抠,生成一個MapReduce作業(yè),然后把作業(yè)提交到JT恳啥,JT負責(zé)把Job所有的Task調(diào)度到TT上偏灿。
MapReduce的執(zhí)行過程
這個圖展示了一個Mapreduce的執(zhí)行過程,是一個具體的執(zhí)行單元內(nèi)(Task)發(fā)生的事情角寸。左邊是Map Task菩混,map task的輸入是一個數(shù)據(jù)分片,叫一個split扁藕。
輸入數(shù)據(jù)由 MapReduce 框架解析成一條條記錄沮峡,這是一個按照用戶指定的規(guī)則(或者是默認規(guī)則)讀取數(shù)據(jù)的過程。
讀取出的數(shù)據(jù)亿柑,將他們一條條的傳給map處理邢疙,就是大家寫的mapper函數(shù)
經(jīng)過mapper 處理后,又生成一條新記錄望薄,寫在mapper所在機器的本地磁盤疟游,分Partition寫入,不同Partition數(shù)據(jù)會交由不同reduce處理痕支;
右邊是Reduce Task颁虐,Rt運行起來后先做的事情就是把屬于自己的那一份份數(shù)據(jù)給拉到自己本地來,這個過程叫shuffle卧须,shuffle的具體過程很復(fù)雜另绩,其中包括各種異常處理儒陨,性能優(yōu)化點也比較多。
數(shù)據(jù)shuffle到reduce本地之后笋籽,和map類似蹦漠,一條條交給reduce函數(shù)處理,然后按照用戶指定的格式寫到HDFS指定目錄车海。
Hadoop1.0生態(tài)系統(tǒng)圖譜
為什么需要Hadoop2.0?
Hadoop1存在的問題笛园,主要有這么幾方面:
1、可用性侍芝,JobTracker是單點研铆,升級中斷服務(wù),正在運行的作業(yè)會失斀叻贰蚜印;
2、擴展性留量,因為NameNode單點性能瓶頸窄赋,單機群最大規(guī)模也就是幾千臺
3、按槽位分task楼熄,集群整體資源利用率不高忆绰,因為每臺機器上運行多少個Task是固定的,但是每個Task消耗的資源可岂,其實差異很大错敢。
4、Hadoop1.0難以支持MR以外的計算
Hadoop1.0 Vs Hadoop2.0
Hadoop2.0
HDFS
Hadoop1.0中的NameNode為單節(jié)點缕粹,而second NameNode并非是NameNode的熱備機稚茅。因此在2.0中增加了stand-by NameNode(SNN),而主節(jié)點稱為active NameNode(ANN)平斩。ANN和SNN共享第三方存儲亚享,是熱備方案,可自動failover绘面。
YARN
Hadoop2把單點的JobTracker角色做了分布式化,分布式化成ResourceManager欺税、NodeManager、ApplicationMaster揭璃,其中RM是單點晚凿,而AM是每個job一個,不同job之間是獨立的AM瘦馍。作業(yè)級別的調(diào)度在RM歼秽,Task級別的調(diào)度在AM,大大減輕了RM的壓力
英文名稱 | 中文名稱 | 作用 |
---|---|---|
Resource Manager(RM) | 資源管理器 | 管理全局資源與調(diào)度情组,為第一級調(diào)度器哲银,負責(zé)對各個NodeManager上的資源進行統(tǒng)一管理和調(diào)度扛吞,處理客戶端請求 |
Application Master(AM) | 應(yīng)用管理器 | 對應(yīng)一個作業(yè)(job)第二級調(diào)度器,負責(zé)單個應(yīng)用程序的管理荆责,為應(yīng)用程序申請資源并分配給內(nèi)部任務(wù),任務(wù)監(jiān)控和容錯 |
Node Manager(NM) | 節(jié)點管理器 | 對應(yīng)一臺機器亚脆,單個節(jié)點上的資源管理做院,處理來自RM和AM的命令 |
Container | 節(jié)點管理器 | Container是YARN中的資源抽象,當(dāng)AM向RM申請資源時,RM為AM返回的資源便是用Container表示的;YARN會為每個任務(wù)分配一個Container;且該任務(wù)只能使用該Container中描述的資源濒持。 |
RM由調(diào)度器(Scheduler)和應(yīng)用程序管理器(Applications Manager,ASM)組成
Yarn的工作流程:
步驟1 用戶向YARN中提交應(yīng)用程序键耕,其中包括ApplicationMaster程序、啟動ApplicationMaster的命令柑营、用戶程序等屈雄。
步驟2 ResourceManager為該應(yīng)用程序分配第一個Container,并與對應(yīng)的Node-Manager通信官套,要求它在這個Container中啟動應(yīng)用程序的ApplicationMaster酒奶。
步驟3 ApplicationMaster首先向ResourceManager注冊,這樣用戶可以直接通過ResourceManager查看應(yīng)用程序的運行狀態(tài)奶赔,然后它將為各個任務(wù)申請資源惋嚎,并監(jiān)控它的運行狀態(tài),直到運行結(jié)束站刑,即重復(fù)步驟4~7另伍。
步驟4 ApplicationMaster采用輪詢的方式通過RPC協(xié)議向ResourceManager申請和領(lǐng)取資源。
步驟5 一旦ApplicationMaster申請到資源后绞旅,便與對應(yīng)的NodeManager通信摆尝,要求它啟動任務(wù)。
步驟6 NodeManager為任務(wù)設(shè)置好運行環(huán)境(包括環(huán)境變量因悲、JAR包堕汞、二進制程序等)后,將任務(wù)啟動命令寫到一個腳本中囤捻,并通過運行該腳本啟動任務(wù)臼朗。
步驟7 各個任務(wù)通過某個RPC協(xié)議向ApplicationMaster匯報自己的狀態(tài)和進度,以讓ApplicationMaster隨時掌握各個任務(wù)的運行狀態(tài)蝎土,從而可以在任務(wù)失敗時重新啟動任務(wù)视哑。
在應(yīng)用程序運行過程中,用戶可隨時通過RPC向ApplicationMaster查詢應(yīng)用程序的當(dāng)前運行狀態(tài)誊涯。
步驟8 應(yīng)用程序運行完成后挡毅,ApplicationMaster向ResourceManager注銷并關(guān)閉自己。
Yarn的好處
- 計算資源按需伸縮
- 不同負載應(yīng)用混搭暴构,集群使用率高
- 共享底層存儲跪呈,避免數(shù)據(jù)跨集群遷移
Hadoop2.0生態(tài)系統(tǒng)圖譜
Nutch段磨,互聯(lián)網(wǎng)數(shù)據(jù)及Nutch搜索引擎應(yīng)用
HDFS,Hadoop的分布式文件系統(tǒng)
MapReduce,分布式計算框架
Flume,Scribe,Chukwa非結(jié)構(gòu)化數(shù)據(jù)收集工具
Hiho、Sqoop關(guān)系數(shù)據(jù)庫導(dǎo)入HDFS的工具
Oozie作業(yè)流調(diào)度引擎
Hue耗绿,Hadoop自己的監(jiān)控管理工具
mahout數(shù)據(jù)挖掘工具
Hbase分布式的面向列的開源數(shù)據(jù)庫
Avro 數(shù)據(jù)序列化工具
參考資料:
Hadoop
技術(shù)分享丨關(guān)于 Hadoop 的那些事兒
Hadoop2.0架構(gòu)
Hadoop2.0 Yarn框架原理及運作機制
聊聊Hadoop:圖解HDFS是個啥