java大數(shù)據(jù)之hadoop

一台谢、Hadoop簡介

1.1 Hadoop是什么

The Apache Hadoop project develops open-source software for reliable, scalable, distributed computing.

1.2 Hadoop官網(wǎng)

http://hadoop.apache.org/

1.3 Hadoop特點

(1)擴容能力(Scalable):能可靠地(reliably)存儲和處理千兆字節(jié)(PB)數(shù)據(jù)朋沮。

(2)成本低(Economical):可以通過普通機器組成的服務(wù)器群來分發(fā)以及處理數(shù)據(jù)樊拓。這些服務(wù)器群總計可達(dá)數(shù)千個節(jié)點筋夏。

(3)高效率(Efficient):通過分發(fā)數(shù)據(jù)条篷,hadoop可以在數(shù)據(jù)所在的節(jié)點上并行地(parallel)處理它們蛤织,這使得處理非常的快速指蚜。

(4)可靠性(Reliable):hadoop能自動地維護數(shù)據(jù)的多份副本摊鸡,并且在任務(wù)失敗后能自動地重新部署(redeploy)計算任務(wù)柱宦。

1.4 Hadoop主要解決的問題

海量數(shù)據(jù)的存儲(HDFS)

海量數(shù)據(jù)的分析(MapReduce)

資源管理調(diào)度(YARN)

1.5 Hadoop生態(tài)圈

1.6 Hadoop1.0和Hadoop2.0的對比

1.7 Hadoop系統(tǒng)結(jié)構(gòu)圖

1.8 Hadoop適用場景

1,大數(shù)據(jù)量存儲:分布式存儲

2忧侧,日志處理:Hadoop擅長這個

3蚓炬,海量計算:并行計算

4躺屁,ETL:數(shù)據(jù)抽取到oracle、mysql烁兰、DB2沪斟、mongdb及主流數(shù)據(jù)庫

5主之,使用HBase做數(shù)據(jù)分析:用擴展性應(yīng)對大量的寫操作—Facebook構(gòu)建了基于HBase的實時數(shù)據(jù)分析系統(tǒng)

6槽奕,機器學(xué)習(xí):比如Apache Mahout項目

7史翘,搜索引擎:hadoop + lucene實現(xiàn)

8琼讽,數(shù)據(jù)挖掘:目前比較流行的廣告推薦,9钻蹬,用戶細(xì)分特征建模

10凭需,個性化廣告推薦,

11粒蜈,智能儀器推薦


二枯怖、Hadoop生態(tài)圈組件

2.1 HDFS(分布式文件系統(tǒng))

HDFS(hadoop分布式文件系統(tǒng))是hadoop體系中數(shù)據(jù)存儲管理的基礎(chǔ)度硝。他是一個高度容 錯的系統(tǒng)蕊程,能檢測和應(yīng)對硬件故障藻茂。

client:切分文件,訪問HDFS纽窟,與那么弄得交互臂港,獲取文件位置信息审孽,與DataNode交互佑力, 讀取和寫入數(shù)據(jù)打颤。

namenode:master節(jié)點编饺,在hadoop1.x中只有一個透且,管理HDFS的名稱空間和數(shù)據(jù)塊映射信 息秽誊,配置副本策略锅论,處理客戶端請求最易。

DataNode:slave節(jié)點耘纱,存儲實際的數(shù)據(jù),匯報存儲信息給namenode憎亚。

secondary namenode:輔助namenode第美,分擔(dān)其工作量:定期合并fsimage和fsedits什往,推送給 namenode别威;緊急情況下和輔助恢復(fù)namenode省古,但其并非namenode的熱備豺妓。

2.2 mapreduce(分布式計算框架)

mapreduce是一種計算模型琳拭,用于處理大數(shù)據(jù)量的計算白嘁。其中map對應(yīng)數(shù)據(jù)集上的獨立元 素進行指定的操作权薯,生成鍵-值對形式中間盟蚣,reduce則對中間結(jié)果中相同的鍵的所 有值進行規(guī)約屎开,以得到最終結(jié)果奄抽。

jobtracker:master節(jié)點额划,只有一個俊戳,管理所有作業(yè)抑胎,任務(wù)/作業(yè)的監(jiān)控阿逃,錯誤處理等恃锉,將任 務(wù)分解成一系列任務(wù)淡喜,并分派給tasktracker炼团。

tacktracker:slave節(jié)點瘟芝,運行 map task和reducetask锌俱;并與jobtracker交互贸宏,匯報任務(wù)狀態(tài)诫龙。

map task:解析每條數(shù)據(jù)記錄签赃,傳遞給用戶編寫的map()并執(zhí)行锦聊,將輸出結(jié)果寫入到本地 磁盤(如果為map—only作業(yè)孔庭,則直接寫入HDFS)史飞。

reduce task:從map 它深刻地執(zhí)行結(jié)果中构资,遠(yuǎn)程讀取輸入數(shù)據(jù)吐绵,對數(shù)據(jù)進行排序,將數(shù)據(jù) 分組傳遞給用戶編寫的reduce函數(shù)執(zhí)行纹笼。

2.3 hive(基于hadoop的數(shù)據(jù)倉庫)

由Facebook開源廷痘,最初用于解決海量結(jié)構(gòu)化的日志數(shù)據(jù)統(tǒng)計問題笋额。

hive定于了一種類似sql的查詢語言(hql)將sql轉(zhuǎn)化為mapreduce任務(wù)在hadoop上執(zhí)行兄猩。

2.4 hbase(分布式列存數(shù)據(jù)庫)

hbase是一個針對結(jié)構(gòu)化數(shù)據(jù)的可伸縮,高可靠掏导,高性能趟咆,分布式和面向列的動態(tài)模式數(shù)據(jù)庫值纱。和傳統(tǒng)關(guān)系型數(shù)據(jù)庫不同虐唠,hbase采用了bigtable的數(shù)據(jù)模型:增強了稀疏排序映射表(key/value)咱筛。其中迅箩,鍵由行關(guān)鍵字饲趋,列關(guān)鍵字和時間戳構(gòu)成奕塑,hbase提供了對大規(guī)模數(shù)據(jù)的隨機,實時讀寫訪問换棚,同時圃泡,hbase中保存的數(shù)據(jù)可以使用mapreduce來處理颇蜡,它將數(shù)據(jù)存儲和并行計算完美結(jié)合在一起风秤。

2.5 zookeeper(分布式協(xié)作服務(wù))

解決分布式環(huán)境下的數(shù)據(jù)管理問題:統(tǒng)一命名,狀態(tài)同步碍沐,集群管理累提,配置同步等斋陪。

2.6 sqoop(數(shù)據(jù)同步工具)

sqoop是sql-to-hadoop的縮寫缔赠,主要用于傳統(tǒng)數(shù)據(jù)庫和hadoop之間傳輸數(shù)據(jù)嗤堰。數(shù)據(jù)的導(dǎo)入和導(dǎo)出本質(zhì)上是mapreduce程序梁棠,充分利用了MR的并行化和容錯性凫海。

2.7 pig(基于hadoop的數(shù)據(jù)流系統(tǒng))

定義了一種數(shù)據(jù)流語言-pig latin行贪,將腳本轉(zhuǎn)換為mapreduce任務(wù)在hadoop上執(zhí)行建瘫。通常用于離線分析殷蛇。

2.8 mahout(數(shù)據(jù)挖掘算法庫)

mahout的主要目標(biāo)是創(chuàng)建一些可擴展的機器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實現(xiàn)粒梦,旨在幫助開發(fā)人員更加方便快捷地創(chuàng)建只能應(yīng)用程序匀们。mahout現(xiàn)在已經(jīng)包含了聚類,分類祖灰,推薦引擎(協(xié)同過濾)和頻繁集挖掘等廣泛使用的數(shù)據(jù)挖掘方法夫植。除了算法是详民,mahout還包含了數(shù)據(jù)的輸入/輸出工具由捎,與其他存儲系統(tǒng)(如數(shù)據(jù)庫狞玛,mongoDB或Cassandra)集成等數(shù)據(jù)挖掘支持架構(gòu)。

2.9 Oozie(工作流調(diào)度器)

Oozie是一個可擴展的工作體系硬鞍,集成于Hadoop的堆棧固该,用于協(xié)調(diào)多個MapReduce作業(yè)的執(zhí)行。它能夠管理一個復(fù)雜的系統(tǒng)桦沉,基于外部事件來執(zhí)行永部,外部事件包括數(shù)據(jù)的定時和數(shù)據(jù)的出現(xiàn)。

Oozie工作流是放置在控制依賴DAG(有向無環(huán)圖 Direct Acyclic Graph)中的一組動作(例如组橄,Hadoop的Map/Reduce作業(yè)、Pig作業(yè)等)遵班,其中指定了動作執(zhí)行的順序狭郑。

Oozie使用hPDL(一種XML流程定義語言)來描述這個圖脏答。

2.10 flume(日志收集工具)

cloudera開源的日志收集系統(tǒng)殖告,具有分布式,高可靠宝与,高容錯,易于定制和擴展的特點。他將數(shù)據(jù)從產(chǎn)生飞蛹,傳輸,處理并寫入目標(biāo)的路徑的過程抽象為數(shù)據(jù)流霉囚,在具體的數(shù)據(jù)流中盈罐,數(shù)據(jù)源支持在flume中定制數(shù)據(jù)發(fā)送方,從而支持收集各種不同協(xié)議數(shù)據(jù)票顾。

2.11 Yarn(分布式資源管理器)

YARN是下一代MapReduce霸旗,即MRv2诱告,是在第一代MapReduce基礎(chǔ)上演變而來的,主要是為了解決原始Hadoop擴展性較差靴姿,不支持多計算框架而提出的。

Yarn是下一代 Hadoop 計算平臺磁滚,yarn是一個通用的運行時框架佛吓,用戶可以編寫自己的計算框架,在該運行環(huán)境中運行垂攘。

用于自己編寫的框架作為客戶端的一個lib维雇,在運用提交作業(yè)時打包即可晒他。該框架為提供了以下幾個組件:

-資源管理:包括應(yīng)用程序管理和機器資源管理

-資源雙層調(diào)度

-容錯性:各個組件均有考慮容錯性

-擴展性:可擴展到上萬個節(jié)點

2.12 Mesos(分布式資源管理器)

Mesos誕生于UC Berkeley的一個研究項目吱型,現(xiàn)已成為Apache項目,當(dāng)前有一些公司使用Mesos管理集群資源陨仅,比如Twitter津滞。

與yarn類似,Mesos是一個資源統(tǒng)一管理和調(diào)度的平臺灼伤,同樣支持比如MR触徐、steaming等多種運算框架。

2.13 cloudrea impala(查詢引擎)

一個開源的查詢引擎狐赡。與hive相同的元數(shù)據(jù)撞鹉,SQL語法,ODBC驅(qū)動程序和用戶接口猾警,可以直接在HDFS上提供快速孔祸,交互式SQL查詢。impala不再使用緩慢的hive+mapreduce批處理发皿,而是通過與商用并行關(guān)系數(shù)據(jù)庫中類似的分布式查詢引擎崔慧。可以直接從HDFS或者Hbase中用select穴墅,join和統(tǒng)計函數(shù)查詢數(shù)據(jù)惶室,從而大大降低延遲温自。

2.14 Tachyon(分布式內(nèi)存文件系統(tǒng))

Tachyon(/’tki:n/ 意為超光速粒子)是以內(nèi)存為中心的分布式文件系統(tǒng),擁有高性能和容錯能力皇钞,

能夠為集群框架(如Spark悼泌、MapReduce)提供可靠的內(nèi)存級速度的文件共享服務(wù)。

Tachyon誕生于UC Berkeley的AMPLab夹界。

2.15 Tez(DAG計算模型)

Tez是Apache最新開源的支持DAG作業(yè)的計算框架馆里,它直接源于MapReduce框架,核心思想是將Map和Reduce兩個操作進一步拆分可柿,


即Map被拆分成Input鸠踪、Processor、Sort复斥、Merge和Output营密, Reduce被拆分成Input、Shuffle目锭、Sort评汰、Merge、Processor和Output等痢虹,


這樣被去,這些分解后的元操作可以任意靈活組合,產(chǎn)生新的操作世分,這些操作經(jīng)過一些控制程序組裝后编振,可形成一個大的DAG作業(yè)。

目前hive支持mr臭埋、tez計算模型,tez能完美二進制mr程序臀玄,提升運算性能瓢阴。

2.16 Spark

spark是個開源的數(shù)據(jù)分析集群計算框架,最初由加州大學(xué)伯克利分校AMPLab健无,建立于HDFS之上荣恐。spark與hadoop一樣,用于構(gòu)建大規(guī)模累贤,延遲低的數(shù)據(jù)分析應(yīng)用叠穆。spark采用Scala語言實現(xiàn),使用Scala作為應(yīng)用框架臼膏。spark采用基于內(nèi)存的分布式數(shù)據(jù)集硼被,優(yōu)化了迭代式的工作負(fù)載以及交互式查詢。與hadoop不同的是渗磅,spark與Scala緊密集成嚷硫,Scala象管理本地collective對象那樣管理分布式數(shù)據(jù)集检访。spark支持分布式數(shù)據(jù)集上的迭代式任務(wù),實際上可以在hadoop文件系統(tǒng)上與hadoop一起運行(通過YARN,MESOS等實現(xiàn))仔掸。

2.17 Storm

storm是一個分布式的脆贵,容錯的計算系統(tǒng),storm屬于流處理平臺起暮,多用于實時計算并更新數(shù)據(jù)庫卖氨。storm也可被用于“連續(xù)計算”,對數(shù)據(jù)流做連續(xù)查詢负懦,在計算時將結(jié)果一流的形式輸出給用戶双泪。他還可被用于“分布式RPC”,以并行的方式運行昂貴的運算

2.18 Kafka

kafka是由Apache軟件基金會開發(fā)的一個開源流處理平臺,由Scala和Java編寫密似。Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng)焙矛,它可以處理消費者規(guī)模的網(wǎng)站中的所有動作流數(shù)據(jù)。 這種動作(網(wǎng)頁瀏覽残腌,搜索和其他用戶的行動)是在現(xiàn)代網(wǎng)絡(luò)上的許多社會功能的一個關(guān)鍵因素村斟。 這些數(shù)據(jù)通常是由于吞吐量的要求而通過處理日志和日志聚合來解決。 對于像Hadoop的一樣的日志數(shù)據(jù)和離線分析系統(tǒng)抛猫,但又要求實時處理的限制蟆盹,這是一個可行的解決方案。Kafka的目的是通過Hadoop的并行加載機制來統(tǒng)一線上和離線的消息處理闺金,也是為了通過集群來提供實時的消息


三逾滥、Hadoop核心之MapReaduce

3.1 MapReaduce是什么

MapReduce是一個分布式計算框架,它是Hadoop的一個程序败匹,不會產(chǎn)生進程寨昙。

3.2 MapReduce的思想

分而治之、大數(shù)據(jù)集分為小的數(shù)據(jù)集掀亩、每個數(shù)據(jù)集進行邏輯業(yè)務(wù)處理舔哪、合并統(tǒng)計數(shù)據(jù)結(jié)果

3.2 MapReaduce之自定義序列化類

代碼及注釋參見

https://github.com/ZzzzZzreal/HadoopKeyPoints/blob/master/HadoopKeyPoints/src/main/java/MyComparator.java


有時候,默認(rèn)的數(shù)據(jù)類型不能滿足我們的需求時槽棍,需要我們自定義序列化類捉蚤,實現(xiàn)WritableComparable。在自定義的序列化類中炼七,最重要的是重寫compareTo方法以及序列化反序列化方法缆巧。序列化和反序列化的內(nèi)容需要重點關(guān)注,容易犯低級錯誤豌拙。


★二次排序:compareTo方法也可以實現(xiàn)二次排序的功能陕悬,但會產(chǎn)生大量的序列化反序列化實例,浪費資源姆蘸;比較優(yōu)化的方法是在自定義序列化類中的一個靜態(tài)內(nèi)部類--Comparator墩莫,繼承WritableComparator芙委,在這個類中的compare方法中寫排序的邏輯。需要對這個內(nèi)部類進行注冊狂秦。

3.3 MapReaduce之Mapper

Mapper對來的每一條數(shù)據(jù)進行一次計算(這里的計算指的時代碼邏輯灌侣,這句話的意思就是每來一條數(shù)據(jù)走一次map方法)


代碼及注釋

https://github.com/ZzzzZzreal/HadoopKeyPoints/blob/master/HadoopKeyPoints/src/main/java/wordcount/WordCountMapper.java


自定義Mapper,需要繼承Mapper裂问,并指定泛型<key-in,value-in,key-out,value-out>,然后重寫map方法侧啼。泛型中的key-in,value-in是讀取文件時讀的內(nèi)容堪簿,默認(rèn)k按偏移量操作痊乾,v讀一行內(nèi)容,可以通過自定義輸入格式來改變k-in和v-in椭更;key-out和value-out是寫入環(huán)形緩存區(qū)的內(nèi)容哪审,如果有Reducer的話這里的k-out和v-out最終是Reducer的key-in和value-in。

★shuffle過程--shuffle:洗牌虑瀑、發(fā)牌——(核心機制:數(shù)據(jù)分區(qū)湿滓,排序,緩存)


mapreduce中舌狗,map階段處理的數(shù)據(jù)如何傳遞給reduce階段叽奥,是mapreduce框架中最關(guān)鍵的一個流程,這個流程就叫shuffle痛侍。簡單來說朝氓,就是將maptask輸出的處理結(jié)果數(shù)據(jù),分發(fā)給reducetask主届,并在分發(fā)的過程中赵哲,對數(shù)據(jù)按key進行了分區(qū)和排序。


◆理解shuffle過程

MapReduce的核心與基礎(chǔ)是Mapper類岂膳、Reducer類與Driver誓竿。Driver中主要是main()方法,MR的程序入口谈截;Driver中還要規(guī)定job的各種配置。自己的Mapper需要繼承Mapper類涧偷,重寫其中的map()方法簸喂,自己的Reducer需要繼承Reducer類,重寫其中的reduce()方法燎潮。map的運行機制是來一條數(shù)據(jù)運行一次map方法喻鳄,reduce的運行機制是來一個key運行一次reduce方法。數(shù)據(jù)從map中出來到進入reduce之前稱為shuffle階段确封,Mapper的數(shù)量不建議人為設(shè)定除呵,一般一個block對應(yīng)一個Mapper再菊,而Reducer的數(shù)量可以在Driver中人為控制,不設(shè)定默認(rèn)是1颜曾。

MR過程中的數(shù)據(jù)流向:一個文件在HDFS中是分布存儲在不同節(jié)點的block中纠拔,每一個block對應(yīng)一個Mapper,每一條數(shù)據(jù)以K,V的形式進入一個map()方法泛豪,map()方法中對數(shù)據(jù)進行處理(數(shù)據(jù)篩選稠诲,業(yè)務(wù)邏輯以及分區(qū)),再將處理結(jié)果以K,V的形式寫入環(huán)形緩沖區(qū)诡曙,一個Mapper對應(yīng)一個context臀叙,context對寫入的數(shù)據(jù)按key進行聚合、排序价卤、歸約劝萤。context的大小默認(rèn)為100M,當(dāng)context容量達(dá)到80%或Mapper處理結(jié)束時慎璧,context會向外溢出床嫌,形成許多小文件,小文件為一個K和許多V的集合炸卑。處理完成后既鞠,這些文件會發(fā)送到Reducer所在節(jié)點,在該節(jié)點的context中盖文,會對不同節(jié)點發(fā)送過來的數(shù)據(jù)按key進行再一次的聚合嘱蛋、排序和歸約,最后進入Reducer五续,在reduce方法中對同一個<key,value集合>進行處理(業(yè)務(wù)邏輯)洒敏,然后按照分區(qū)寫入文件。

shuffle的處理任務(wù):將maptask輸出的處理結(jié)果數(shù)據(jù)疙驾,分發(fā)給reducetask凶伙,并在分發(fā)的過程中,對數(shù)據(jù)按key進行了分區(qū)和排序它碎;

1函荣、maptask收集我們的map()方法輸出的k、v對扳肛,放到內(nèi)存緩沖區(qū)中

2傻挂、從內(nèi)存緩沖區(qū)不斷溢出本地磁盤文件,可能會溢出多個文件

3挖息、多個溢出文件會被合并成大的溢出文件

4金拒、在溢出過程中,及合并的過程中套腹,都要調(diào)用partitoner進行分組和針對key進行排序

5绪抛、reducetask根據(jù)自己的分區(qū)號资铡,去各個maptask機器上取相應(yīng)的結(jié)果分區(qū)數(shù)據(jù)

6、reducetask會取到同一個分區(qū)的來自不同maptask的結(jié)果文件幢码,reducetask會將這些文件再進行合并(歸并排序)

7笤休、合并成大文件后,shuffle的過程也就結(jié)束了蛤育,后面進入reducetask的邏輯運算過程(從文件中取出一個一個的鍵值對group宛官,調(diào)用用戶自定義的reduce()方法)

備注:Shuffle中的緩沖區(qū)大小會影響到mapreduce程序的執(zhí)行效率疑苫,原則上說渠驼,緩沖區(qū)越大卵迂,磁盤io的次數(shù)越少珍促,執(zhí)行速度就越快典予。緩沖區(qū)的大小可以通過參數(shù)調(diào)整,參數(shù):io.sort.mb默認(rèn)100M

3.4 MapReaduce之Reducer

Reducer對相同的Key進行一次計算


代碼及注釋

https://github.com/ZzzzZzreal/HadoopKeyPoints/blob/master/HadoopKeyPoints/src/main/java/wordcount/WordCountReducer.java


自定義Reducer昌执,需要繼承Reducer妙同,并指定泛型<key-in,value-in,key-out,value-out>,然后重寫reduce方法杈湾。泛型中的k-in和v-in必須和Mapper的k-out和v-out的數(shù)據(jù)類型一致圣勒;可以通過自定義輸出格式來改變k-out和v-out费变。

3.5 MapReaduce之Driver

main方法,程序的入口

代碼及注釋

https://github.com/ZzzzZzreal/HadoopKeyPoints/blob/master/HadoopKeyPoints/src/main/java/wordcount/WordCountDriver.java


在main方法中需要獲取一個配置實例圣贸,得到一個job實例挚歧,用這個job指定主類、Mapper類吁峻、Reducer類滑负、Combiner類(如果有)、Partitioner類(如果有)用含,指定Mapper和Reducer的輸出格式類(如果Mapper和Reducer的輸出類型相同矮慕,可以只設(shè)置outputKey和outputValue;如果不同則需要設(shè)置outputKey和outputValue啄骇、MapoutputKey和MapoutputValue)痴鳄,通過默認(rèn)輸入格式或自定義輸入格式指定輸入文件路徑,指定輸出目錄缸夹,判斷job結(jié)束并關(guān)閉程序痪寻。

3.6 MapReaduce之Partitioner(分區(qū)類)

代碼及注釋參見

https://github.com/ZzzzZzreal/HadoopKeyPoints/blob/master/HadoopKeyPoints/src/main/java/FlowSumPartitioner.java


自定義分區(qū)類需要繼承Partitioner,指定泛型<k,v>虽惭,重寫getPartition方法槽华,它可以實現(xiàn)將不同的Key寫入不同的文件。如果自定義了分區(qū)類趟妥,那么需要在Driver中指定分區(qū)類并且設(shè)置ReducTask數(shù)量(通過setNumReduceTasks方法)。

注意:每來一條數(shù)據(jù)走一次getPartition方法佣蓉;有幾個ReduceTask就會生成幾個文件披摄;1個task任務(wù)不要處理大于10G的內(nèi)容亲雪;Partitioner的泛型要和Mapper的k-out、v-out一致疚膊。

3.7 MapReaduce之Combiner

本地的reducer义辕,只能起到過渡和優(yōu)化的作用,它能做一些像歸約類的對輸出結(jié)果不造成影響的任務(wù)寓盗,比如求和

代碼及注釋

https://github.com/ZzzzZzreal/HadoopKeyPoints/blob/master/HadoopKeyPoints/src/main/java/flowsum/FlowSumCombiner.java


Combiner是一個本地reducer灌砖,所以它仍然繼承Reducer,指定泛型<key-in,value-in,key-out,value-out>傀蚌,它的key-in,value-in,key-out,value-out必須要和mapper的k-out基显,v-out一致,也和reducer的k-in善炫,v-in一樣(因為它只做簡單優(yōu)化撩幽,不能影響輸出結(jié)果)。因為combiner只對reducer進行優(yōu)化箩艺,所以它的邏輯可以跟reducer完全相同窜醉,也可以不一樣,但是不能影響輸出結(jié)果艺谆。而且榨惰,在數(shù)據(jù)量小的時候使用combiner與否幾乎沒什么差別。至于使用combiner的原因静汤,是Reducer是在運行在網(wǎng)絡(luò)環(huán)境上的琅催,當(dāng)數(shù)據(jù)量太大時,網(wǎng)絡(luò)I/O速度慢撒妈,會導(dǎo)致效率低下恢暖。用本地的Reducer過渡,預(yù)處理可以提高效率狰右。

3.8 MapReaduce之自定義輸入格式(InputFormat)

代碼及注釋參見

https://github.com/ZzzzZzreal/HadoopKeyPoints/blob/master/HadoopKeyPoints/src/main/java/MyFileInputFormat.java


自定義輸入格式杰捂,需要繼承FileInputFormat。里面主要是重寫createRecordReader方法棋蚌,返回一個自定義的RecordReader嫁佳。實際上還有一個重寫方法是isSplitable,但是我們一般不作重寫谷暮;因為Hadoop不適合管理小文件蒿往,所以我們需要這個方法的返回值一直時true,所以我們不需要重寫這個方法湿弦。


自定義RecordReader瓤漏,它是主要的處理輸入數(shù)據(jù)格式的類,最終是寫初始化方法initialize和nextKeyValue

在自定義RecordReader中,需要重寫的方法有:

①initialize()---初始化方法蔬充,完成自定義字段的初始化(以實現(xiàn)一次讀取兩行為例解釋)

思路:因為LineReader可以完成一行一行讀的目的蝶俱,所以初始化時,要做的事情就是得到一個LineReader實例饥漫;通過查看API發(fā)現(xiàn)榨呆,想實例化一個LineReader最低要求是得到一個輸入流,所以首先需要得到一個輸入流庸队;輸入流可以通過文件對象open(Path)方法獲得积蜻,所以我們的目的變成了獲取一個文件對象和一個Path;文件對象可以通過get(Configuration)獲取彻消,Path可以通過FileSplit的getPath()獲得竿拆;Configuration可以通過context得到,F(xiàn)ileSplit可以通過split得到---context是一直貫穿于整個過程中的证膨,split時initialize的參數(shù)如输。所以,將上面的思路倒序?qū)崿F(xiàn)央勒,就完成了初始化過程不见,得到一個LineReader的實例。

②nextKeyValue()---在這個方法中寫邏輯崔步,對K和V進行賦值

要實現(xiàn)一次讀兩行稳吮,而在初始化時得到的LineReader可以一次讀一行,所以只需要讀兩次井濒,然后賦值給Value就可以實現(xiàn)灶似。

③getCurrentKey()---獲取當(dāng)前key

④getCurrentValue()---獲取當(dāng)前value

⑤getProgress()---獲取進度,一般returntrue0.0f:1.0f;

⑥close()---如果開了流必須要關(guān)閉瑞你,如果沒開流則不需要

3.9 MapReaduce之自定義輸出格式(OutputFormat)

代碼及注釋參見

https://github.com/ZzzzZzreal/HadoopKeyPoints/blob/master/HadoopKeyPoints/src/main/java/MyOutputFormat.java


自定義輸出格式酪惭,需要繼承FileOutputFormat,主要重寫一個getRecordWriter方法者甲,返回一個自定義的RecordWriter春感。自定義的RecordWriter中重寫write方法和close÷哺祝可以實現(xiàn)自定義輸出文件名鲫懒,也可以寫邏輯改變輸出內(nèi)容。


四刽辙、Hadoop核心之HDFS

4.1 HDFS是什么

HDFS是一個高度容錯性的系統(tǒng)窥岩,適合部署在廉價的機器上。HDFS采用master/slave架構(gòu)宰缤。一個HDFS集群是由一個Namenode和一定數(shù)目的Datanodes組成颂翼。Namenode是一個中心服務(wù)器晃洒,負(fù)責(zé)管理文件系統(tǒng)的名字空間(namespace)以及客戶端對文件的訪問。集群中的Datanode一般是一個節(jié)點一個疚鲤,負(fù)責(zé)管理它所在節(jié)點上的存儲


4.2 HDFS之NameNode

NameNode管理著文件系統(tǒng)的命名空間锥累,維護著文件系統(tǒng)樹,它不存儲真實數(shù)據(jù)集歇,存儲元數(shù)據(jù)(MetaData)[元數(shù)據(jù)(FileName、副本數(shù)语淘、每一個副本所在的位置...)]诲宇,NameNode保存在內(nèi)存中。

元數(shù)據(jù)信息通過以下文件和過程持久化到磁盤中惶翻。

a姑蓝、fsimage--對元數(shù)據(jù)定期進行鏡像

b、edits--存放一定時間內(nèi)對HDFS的操作記錄

c吕粗、checkpoint---檢查點

Namenode在內(nèi)存中保存著整個文件系統(tǒng)的名字空間和文件數(shù)據(jù)塊映射(Blockmap)的映像纺荧。這個關(guān)鍵的元數(shù)據(jù)結(jié)構(gòu)設(shè)計得很緊湊,因而一個有4G內(nèi)存的Namenode足夠支撐大量的文件和目錄颅筋。當(dāng)Namenode啟動時宙暇,它從硬盤中讀取Editlog和FsImage,將所有Editlog中的事務(wù)作用在內(nèi)存中的FsImage上议泵,并將這個新版本的FsImage從內(nèi)存中保存到本地磁盤上占贫,然后刪除舊的Editlog,因為這個舊的Editlog的事務(wù)都已經(jīng)作用在FsImage上了先口。這個過程稱為一個檢查點(checkpoint)型奥。在當(dāng)前實現(xiàn)中,檢查點只發(fā)生在Namenode啟動時碉京,在不久的將來將實現(xiàn)支持周期性的檢查點厢汹。

4.3 HDFS之DataNode

DataNode---存儲節(jié)點,真正存放數(shù)據(jù)的節(jié)點谐宙,用于保存數(shù)據(jù)烫葬,保存在磁盤上(在HDFS上保存的數(shù)據(jù)副本數(shù)默認(rèn)是3個,這個副本數(shù)量是可以設(shè)置的)卧惜±遄疲基本單位是塊(block),默認(rèn)128M咽瓷。

Block塊的概念

先不看HDFS的Block设凹,每臺機器都有磁盤,機器上的所有持久化數(shù)據(jù)都是存儲在磁盤上的茅姜。磁盤是通過塊來管理數(shù)據(jù)的闪朱,一個塊的數(shù)據(jù)是該磁盤一次能夠讀寫的最小單位月匣,一般是512個字節(jié),而建立在磁盤之上的文件系統(tǒng)也有塊的概念奋姿,通常是磁盤塊的整數(shù)倍锄开,例如幾kb。

HDFS作為文件系統(tǒng)称诗,一樣有塊的概念萍悴,對于分布式文件系統(tǒng),使用文件塊將會帶來這些好處:

(1)一個文件的大小不限制于集群中任意機器的磁盤大小

(2)因為塊的大小是固定的寓免,相對比不確定大小的文件癣诱,塊更容易進行管理和計算

(3)塊同樣方便進行備份操作,以提高數(shù)據(jù)容錯性和系統(tǒng)的可靠性

為什么HDFS的塊大小會比文件系統(tǒng)的塊大那么多呢袜香?

操作數(shù)據(jù)時撕予,需要先從磁盤上找到指定的數(shù)據(jù)塊然后進行傳輸,而這就包含兩個動作:

1)數(shù)據(jù)塊尋址:找到該數(shù)據(jù)塊的起始位置

2)數(shù)據(jù)傳輸:讀取數(shù)據(jù)

也就是說蜈首,操作數(shù)據(jù)所花費的時間是由以上兩個步驟一起決定的实抡,步驟1所花費的時間一般比步驟2要少很多,那么當(dāng)操作的數(shù)據(jù)塊越多欢策,尋址所花費的時間在總時間中就越小的可以忽略不計吆寨。所以塊設(shè)置的大,可以最小化磁盤的尋址開銷猬腰。但是HDFS的Block塊也不能設(shè)置的太大鸟废,會影響到map任務(wù)的啟動數(shù),并行度降低姑荷,任務(wù)的執(zhí)行數(shù)據(jù)將會變慢盒延。

★名詞擴展:心跳機制、宕機鼠冕、安全模式(zzy至理名言--“自己看網(wǎng)上都有”)

Datanode負(fù)責(zé)處理文件系統(tǒng)客戶端的讀寫請求添寺。在Namenode的統(tǒng)一調(diào)度下進行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制懈费。集群中單一Namenode的結(jié)構(gòu)大大簡化了系統(tǒng)的架構(gòu)计露。Namenode是所有HDFS元數(shù)據(jù)的仲裁者和管理者,這樣憎乙,用戶數(shù)據(jù)永遠(yuǎn)不會流過Namenode票罐。

4.4 HDFS之SecondaryNameNode

SecondaryNameNode---輔助節(jié)點,用于同步元數(shù)據(jù)信息泞边。輔助NameNode對fsimage和edits進行合并(冷備份)该押,下面用SNN代替


NameNode的元數(shù)據(jù)信息先往edits文件中寫,當(dāng)edits文件達(dá)到一定的閾值(3600秒或大小到64M)的時候,會開啟合并的流程。合并流程如下:

①當(dāng)開始合并的時候,SNN 會把edits和fsimage拷貝到自己服務(wù)器所在內(nèi)存中,開始合并,合并生成一個名為fsimage.ckpt的文件阵谚。

②將fsimage.ckpt文件拷貝到NameNode上,成功后,再刪除原有的fsimage,并將fsimage.ckpt文件重命名為fsimage蚕礼。

③當(dāng)SNN 將edits和fsimage拷貝走之后,NameNode會立刻生成一個edits.new文件,用于記錄新來的元數(shù)據(jù),當(dāng)合并完成之后,原有的edits文件才會被刪除,并將edits.new文件重命名為edits文件,開啟下一輪流程烟具。

4.5 HDFS讀取文件過程

過程描述:

(1)客戶端調(diào)用FileSyste對象的open()方法在分布式文件系統(tǒng)中打開要讀取的文件。

(2)分布式文件系統(tǒng)通過使用RPC(遠(yuǎn)程過程調(diào)用)來調(diào)用namenode奠蹬,確定文件起始塊的位置朝聋。

(3)分布式文件系統(tǒng)的DistributedFileSystem類返回一個支持文件定位的輸入流FSDataInputStream對象,F(xiàn)SDataInputStream對象接著封裝DFSInputStream對象(存儲著文件起始幾個塊的datanode地址)囤躁,客戶端對這個輸入流調(diào)用read()方法冀痕。

(4)DFSInputStream連接距離最近的datanode,通過反復(fù)調(diào)用read方法割以,將數(shù)據(jù)從datanode傳輸?shù)娇蛻舳恕?/p>

(5)到達(dá)塊的末端時金度,DFSInputStream關(guān)閉與該datanode的連接,尋找下一個塊的最佳datanode严沥。

(6)客戶端完成讀取,對FSDataInputStream調(diào)用close()方法關(guān)閉連接中姜。

4.6 HDFS文件寫入的過程

過程描述:

(1) 客戶端通過對DistributedFileSystem對象調(diào)用create()函數(shù)來新建文件消玄。

(2) 分布式文件系統(tǒng)對namenod創(chuàng)建一個RPC調(diào)用,在文件系統(tǒng)的命名空間中新建一個文件丢胚。

(3)Namenode對新建文件進行檢查無誤后翩瓜,分布式文件系統(tǒng)返回給客戶端一個FSDataOutputStream對象,F(xiàn)SDataOutputStream對象封裝一個DFSoutPutstream對象携龟,負(fù)責(zé)處理namenode和datanode之間的通信兔跌,客戶端開始寫入數(shù)據(jù)。

(4)FSDataOutputStream將數(shù)據(jù)分成一個一個的數(shù)據(jù)包峡蟋,寫入內(nèi)部隊列“數(shù)據(jù)隊列”坟桅,DataStreamer負(fù)責(zé)將數(shù)據(jù)包依次流式傳輸?shù)接梢唤Mnamenode構(gòu)成的管線中。

(5)DFSOutputStream維護著確認(rèn)隊列來等待datanode收到確認(rèn)回執(zhí)蕊蝗,收到管道中所有datanode確認(rèn)后仅乓,數(shù)據(jù)包從確認(rèn)隊列刪除。

(6)客戶端完成數(shù)據(jù)的寫入蓬戚,對數(shù)據(jù)流調(diào)用close()方法夸楣。

(7)namenode確認(rèn)完成。


五子漩、Hadoop核心之YARN

5.1 YARN是什么

分布式資源管理框架:

(1)管理整個集群的資源(內(nèi)存豫喧、CPU)

(2)分配調(diào)度集群的資源

5.2 YARN架構(gòu)圖

5.3 YARN的原理

5.4 YARN上的執(zhí)行流程

A、ResourceManager

B幢泼、NodeManager

C紧显、ApplicationMaster

D、Container


◆MapReduce在YARN上的執(zhí)行流程:

①client提交job,首先找ResourceManager(ApplicationsManager)分配資源,同時將jar包默認(rèn)拷貝10份到hdfs旭绒。

②ResourceManager指定一個NodeManager開啟一個container,在Container中運行一個ApplicationMaster來管理這個應(yīng)用程序鸟妙。

③ApplicationMaster會計算此個應(yīng)用所需資源,向ResourceManager(ResourceScheduler)申請資源焦人。

④ResourceManager會分配資源,在NodeManager上開啟不同的container,在container中來運行map任務(wù)或者reduce任務(wù)

⑤當(dāng)所有的task都執(zhí)行完了,ApplicationMaster會將結(jié)果反饋給客戶端,所有工作執(zhí)行完成之后,ApplicationMaster就會自行關(guān)閉。

⑥如果某個map任務(wù)或者reduce任務(wù)失敗,ApplicationMaster會重新申請新的container來執(zhí)行這個task重父。

5.5 YARN步驟組成

(1)作業(yè)提交

client調(diào)用job.waitForCompletion方法花椭,向整個集群提交MapReduce作業(yè) (第1步) 。 新的作業(yè)ID(應(yīng)用ID)由資源管理器分配(第2步). 作業(yè)的client核實作業(yè)的輸出, 計算輸入的split, 將作業(yè)的資源(包括Jar包, 配置文件, split信息)拷貝給HDFS(第3步). 最后, 通過調(diào)用資源管理器的submitApplication()來提交作業(yè)(第4步).

(2)作業(yè)初始化

當(dāng)資源管理器收到submitApplciation()的請求時, 就將該請求發(fā)給調(diào)度器(scheduler), 調(diào)度器分配container, 然后資源管理器在該container內(nèi)啟動應(yīng)用管理器進程, 由節(jié)點管理器監(jiān)控(第5步).

MapReduce作業(yè)的應(yīng)用管理器是一個主類為MRAppMaster的Java應(yīng)用. 其通過創(chuàng)造一些bookkeeping對象來監(jiān)控作業(yè)的進度, 得到任務(wù)的進度和完成報告(第6步). 然后其通過分布式文件系統(tǒng)得到由客戶端計算好的輸入split(第7步). 然后為每個輸入split創(chuàng)建一個map任務(wù), 根據(jù)mapreduce.job.reduces創(chuàng)建reduce任務(wù)對象.

(3)任務(wù)分配

如果作業(yè)很小,應(yīng)用管理器會選擇在其自己的JVM中運行任務(wù)房午。

如果不是小作業(yè),那么應(yīng)用管理器向資源管理器請求container來運行所有的map和reduce任務(wù)(第8步). 這些請求是通過心跳來傳輸?shù)? 包括每個map任務(wù)的數(shù)據(jù)位置, 比如存放輸入split的主機名和機架(rack). 調(diào)度器利用這些信息來調(diào)度任務(wù), 盡量將任務(wù)分配給存儲數(shù)據(jù)的節(jié)點, 或者分配給和存放輸入split的節(jié)點相同機架的節(jié)點.

(4)任務(wù)運行

當(dāng)一個任務(wù)由資源管理器的調(diào)度器分配給一個container后, 應(yīng)用管理器通過聯(lián)系節(jié)點管理器來啟動container(第9步). 任務(wù)由一個主類為YarnChild的Java應(yīng)用執(zhí)行. 在運行任務(wù)之前首先本地化任務(wù)需要的資源, 比如作業(yè)配置, JAR文件, 以及分布式緩存的所有文件(第10步). 最后, 運行map或reduce任務(wù)(第11步).

YarnChild運行在一個專用的JVM中, 但是YARN不支持JVM重用.

(5)進度和狀態(tài)更新

YARN中的任務(wù)將其進度和狀態(tài)(包括counter)返回給應(yīng)用管理器, 客戶端每秒(通過mapreduce.client.progressmonitor.pollinterval設(shè)置)向應(yīng)用管理器請求進度更新, 展示給用戶矿辽。

(6)作業(yè)完成

除了向應(yīng)用管理器請求作業(yè)進度外,客戶端每5分鐘都會通過調(diào)用waitForCompletion()來檢查作業(yè)是否完成. 時間間隔可以通過mapreduce.client.completion.pollinterval來設(shè)置. 作業(yè)完成之后, 應(yīng)用管理器和container會清理工作狀態(tài), OutputCommiter的作業(yè)清理方法也會被調(diào)用. 作業(yè)的信息會被作業(yè)歷史服務(wù)器存儲以備之后用戶核查.


5.5 YARN優(yōu)點

與舊MapReduce相比,YARN 采用了一種分層的集群框架郭厌,它解決了舊MapReduce 一系列的缺陷袋倔,具有以下幾種優(yōu)勢。

(1)提出了HDFS Federation折柠,它讓多個NameNode分管不同的目錄進而實現(xiàn)訪問隔離和橫向擴展宾娜。對于運行中NameNode的單點故障,通過 NameNode熱備方案(NameNode HA)實現(xiàn)

(2)YARN通過將資源管理和應(yīng)用程序管理兩部分分剝離開扇售,分別由ResouceManager和ApplicationMaster負(fù)責(zé)前塔,其中,ResouceManager專管資源管理和調(diào)度承冰,而ApplicationMaster則負(fù)責(zé)與具體應(yīng)用程序相關(guān)的任務(wù)切分华弓、任務(wù)調(diào)度和容錯等,每個應(yīng)用程序?qū)?yīng)一個ApplicationMaster

(3)YARN具有向后兼容性困乒,用戶在MRv1上運行的作業(yè)寂屏,無需任何修改即可運行在YARN之上。

(4)對于資源的表示以內(nèi)存為單位 (在目前版本的Yarn中娜搂,沒有考慮 cpu 的占用 )迁霎,比之前以剩余 slot 數(shù)目更合理。

(5)支持多個框架涌攻, YARN不再是一個單純的計算框架欧引,而是一個框架管理器,用戶可以將各種各樣的計算框架移植到Y(jié)ARN之上恳谎,由YARN進行統(tǒng)一管理和資源分配芝此。目前可以支持多種計算框架運行在YARN上面,比如MapReduce因痛、Storm婚苹、Spark、Flink等

(6)框架升級更容易鸵膏, 在YARN中膊升,各種計算框架不再是作為一個服務(wù)部署到集群的各個節(jié)點上(比如MapReduce框架,不再需要部署JobTracler谭企、 TaskTracker等服務(wù))廓译,而是被封裝成一個用戶程序庫(lib)存放在客戶端评肆,當(dāng)需要對計算框架進行升級時,只需升級用戶程序庫即可非区,多么容易瓜挽!

5.6 YARN優(yōu)勢

一、可擴展性

(1)MapReduce 1 最多可支持4000個節(jié)點的集群.因為JobTracker負(fù)責(zé)的職責(zé)太多而成為瓶頸

(2)Yarn 可以支持10000個節(jié)點,并行100000個task.

二征绸、可靠性

(1)Yarn的ResourceManager職責(zé)很簡單,很容易實現(xiàn)HA久橙;

(2)MapReduce 1 的JobTracker的狀態(tài)變化非常迅速(想象下每個Task過幾秒都會想它報告狀態(tài)). 這使得JotTracker很難實現(xiàn)HA(高可用性).通常HA都是通過備份當(dāng)前系統(tǒng)的狀態(tài)然后當(dāng)系統(tǒng)失敗備用系統(tǒng)用備份的狀態(tài)來繼續(xù)工作.

三、并行性

(1)MapReduce 1只能運行MapReduce應(yīng)用

(2)Yarn最大的好處之一就是職稱很多其他類型的分布式Application

5.7 YARN之ResourceManager概述(RM)

YARN分層結(jié)構(gòu)的本質(zhì)是 ResourceManager管怠。這個實體控制整個集群并管理應(yīng)用程序向基礎(chǔ)計算資源的分配淆衷。ResourceManager 將各個資源部分(計算、內(nèi)存渤弛、帶寬等)精心安排給基礎(chǔ) NodeManager(YARN 的每節(jié)點代理)祝拯。ResourceManager 還與 ApplicationMaster 一起分配資源,與 NodeManager 一起啟動和監(jiān)視它們的基礎(chǔ)應(yīng)用程序她肯。在此上下文中鹿驼,ApplicationMaster 承擔(dān)了以前的 TaskTracker 的一些角色,ResourceManager 承擔(dān)了 JobTracker 的角色辕宏。


a)調(diào)度器(Schedule)

調(diào)度器根據(jù)容量、隊列等限制條件(如每個隊列分配一定的資源砾莱,最多執(zhí)行一定數(shù)量的作業(yè)等)瑞筐,將系統(tǒng)中的資源分配給各個正在運行的應(yīng)用程序。該調(diào)度器是一個“純調(diào)度器”腊瑟,它不再從事任何與具體應(yīng)用程序相關(guān)的工作聚假。

b)應(yīng)用程序管理器(Application Manager)

應(yīng)用程序管理器負(fù)責(zé)管理整個系統(tǒng)中所有的應(yīng)用程序,包括應(yīng)用程序提交闰非、調(diào)度協(xié)調(diào)資源以啟動ApplicationMaster膘格、監(jiān)控ApplicationMaster運行狀態(tài)并在失敗時重新啟動它。


總的來說财松,RM有以下作用

1)處理客戶端請求

2)啟動或監(jiān)控ApplicationMaster

3)監(jiān)控NodeManager

4)資源的分配與調(diào)度

5.8 YARN之ResourceManager功能

(1)ResourceManager負(fù)責(zé)整個集群的資源管理和分配瘪贱,是一個全局的資源管理系統(tǒng)。

(2)NodeManager以心跳的方式向ResourceManager匯報資源使用情況(目前主要是CPU和內(nèi)存的使用情況)辆毡。RM只接受NM的資源回報信息菜秦,對于具體的資源處理則交給NM自己處理。

(3)YARN Scheduler根據(jù)application的請求為其分配資源舶掖,不負(fù)責(zé)application job的監(jiān)控球昨、追蹤、運行狀態(tài)反饋眨攘、啟動等工作主慰。


5.9 YARN之ApplicationMaster概述(AM)

ApplicationMaster管理在YARN內(nèi)運行的每個應(yīng)用程序?qū)嵗荨pplicationMaster 負(fù)責(zé)協(xié)調(diào)來自 ResourceManager 的資源,并通過 NodeManager 監(jiān)視容器的執(zhí)行和資源使用(CPU共螺、內(nèi)存等的資源分配)该肴。請注意,盡管目前的資源更加傳統(tǒng)(CPU 核心璃谨、內(nèi)存)沙庐,但未來會帶來基于手頭任務(wù)的新資源類型(比如圖形處理單元或?qū)S锰幚碓O(shè)備)。從 YARN 角度講佳吞,ApplicationMaster 是用戶代碼拱雏,因此存在潛在的安全問題。YARN 假設(shè) ApplicationMaster 存在錯誤或者甚至是惡意的底扳,因此將它們當(dāng)作無特權(quán)的代碼對待铸抑。


總的來說,AM有以下作用

1)負(fù)責(zé)數(shù)據(jù)的切分

2)為應(yīng)用程序申請資源并分配給內(nèi)部的任務(wù)

3)任務(wù)的監(jiān)控與容錯

5.10 YARN之ApplicationMaster功能

(1)用戶提交的每個應(yīng)用程序均包含一個ApplicationMaster,它可以運行在ResourceManager以外的機器上衷模。

(2)負(fù)責(zé)與RM調(diào)度器協(xié)商以獲取資源(用Container表示)鹊汛。

(3)將得到的任務(wù)進一步分配給內(nèi)部的任務(wù)(資源的二次分配)。

(4)與NM通信以啟動/停止任務(wù)阱冶。

(5)監(jiān)控所有任務(wù)運行狀態(tài)刁憋,并在任務(wù)運行失敗時重新為任務(wù)申請資源以重啟任務(wù)。

(6)當(dāng)前YARN自帶了兩個ApplicationMaster實現(xiàn)木蹬,一個是用于演示AM編寫方法的實例程序DistributedShell至耻,它可以申請一定數(shù)目的Container以并行運行一個Shell命令或者Shell腳本;另一個是運行MapReduce應(yīng)用程序的AM—MRAppMaster镊叁。

(7)注:RM只負(fù)責(zé)監(jiān)控AM尘颓,并在AM運行失敗時候啟動它。RM不負(fù)責(zé)AM內(nèi)部任務(wù)的容錯晦譬,任務(wù)的容錯由AM完成疤苹。

5.11 YARN之NodeManager概述(NM)

NodeManager管理YARN集群中的每個節(jié)點。NodeManager 提供針對集群中每個節(jié)點的服務(wù)敛腌,從監(jiān)督對一個容器的終生管理到監(jiān)視資源和跟蹤節(jié)點健康卧土。MRv1 通過插槽管理 Map 和 Reduce 任務(wù)的執(zhí)行,而 NodeManager 管理抽象容器迎瞧,這些容器代表著可供一個特定應(yīng)用程序使用的針對每個節(jié)點的資源夸溶。


總的來說,NM有以下作用

1)管理單個節(jié)點上的資源

2)處理來自ResourceManager的命令

3)處理來自ApplicationMaster的命令

5.12 YARN之NodeManager功能

(1)NodeManager是每個節(jié)點上的資源和任務(wù)管理器凶硅,它是管理這臺機器的代理缝裁,負(fù)責(zé)該節(jié)點程序的運行,以及該節(jié)點資源的管理和監(jiān)控。YARN集群每個節(jié)點都運行一個NodeManager捷绑。

(2)NodeManager定時向ResourceManager匯報本節(jié)點資源(CPU韩脑、內(nèi)存)的使用情況和Container的運行狀態(tài)。當(dāng)ResourceManager宕機時NodeManager自動連接RM備用節(jié)點粹污。

(3)NodeManager接收并處理來自ApplicationMaster的Container啟動段多、停止等各種請求。


5.12 YARN之Container

Container是 YARN 中的資源抽象壮吩,它封裝了某個節(jié)點上的多維度資源进苍,如內(nèi)存、CPU鸭叙、磁盤觉啊、網(wǎng)絡(luò)等,當(dāng)AM向RM申請資源時沈贝,RM為AM返回的資源便是用Container表示的杠人。YARN會為每個任務(wù)分配一個Container,且該任務(wù)只能使用該Container中描述的資源宋下。

總的來說嗡善,Container有以下作用

對任務(wù)運行環(huán)境進行抽象,封裝CPU学歧、內(nèi)存等多維度的資源以及環(huán)境變量罩引、啟動命令等任務(wù)運行相關(guān)的信

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市枝笨,隨后出現(xiàn)的幾起案子蜒程,更是在濱河造成了極大的恐慌,老刑警劉巖伺帘,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異忌锯,居然都是意外死亡伪嫁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門偶垮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來张咳,“玉大人,你說我怎么就攤上這事似舵〗呕” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵砚哗,是天一觀的道長龙助。 經(jīng)常有香客問我,道長蛛芥,這世上最難降的妖魔是什么提鸟? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任军援,我火速辦了婚禮,結(jié)果婚禮上称勋,老公的妹妹穿的比我還像新娘胸哥。我一直安慰自己,他們只是感情好赡鲜,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布空厌。 她就那樣靜靜地躺著,像睡著了一般银酬。 火紅的嫁衣襯著肌膚如雪嘲更。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天捡硅,我揣著相機與錄音哮内,去河邊找鬼。 笑死壮韭,一個胖子當(dāng)著我的面吹牛北发,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喷屋,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼琳拨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了屯曹?” 一聲冷哼從身側(cè)響起狱庇,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恶耽,沒想到半個月后密任,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡偷俭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年浪讳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涌萤。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡淹遵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出负溪,到底是詐尸還是另有隱情透揣,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布川抡,位于F島的核電站辐真,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拆祈,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一恨闪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧放坏,春花似錦咙咽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至麸粮,卻和暖如春溉苛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弄诲。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工愚战, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人齐遵。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓寂玲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梗摇。 傳聞我的和親對象是個殘疾皇子拓哟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Zookeeper用于集群主備切換。 YARN讓集群具備更好的擴展性伶授。 Spark沒有存儲能力断序。 Spark的Ma...
    Yobhel閱讀 7,246評論 0 34
  • 【什么是大數(shù)據(jù)、大數(shù)據(jù)技術(shù)】 大數(shù)據(jù)糜烹,又稱巨量資料违诗,指的是所涉及的數(shù)據(jù)資料量規(guī)模巨大到無法在合理時間內(nèi)通過傳統(tǒng)的應(yīng)...
    kimibob閱讀 2,733評論 0 51
  • 1.簡介 Hadoop是一款開源的大數(shù)據(jù)通用處理平臺,其提供了分布式存儲和分布式離線計算疮蹦,適合大規(guī)模數(shù)據(jù)较雕、流式數(shù)據(jù)...
    哦00閱讀 881評論 0 0
  • 二 、 HDFS體系結(jié)構(gòu) HDFS 采用的是master/slave架構(gòu)設(shè)計 , 一個HDFS集群包含一個單獨的 ...
    什么都不會的碼農(nóng)丶閱讀 1,526評論 0 1
  • 一挚币、系統(tǒng)參數(shù)配置優(yōu)化 1、系統(tǒng)內(nèi)核參數(shù)優(yōu)化配置 修改文件/etc/sysctl.conf扣典,添加如下配置妆毕,然后執(zhí)行s...
    張偉科閱讀 3,721評論 0 14