大數(shù)據(jù)hadoopa藍(lán)色曙光課程_第1頁
大數(shù)據(jù)hadoopa藍(lán)色曙光課程_第2頁
大數(shù)據(jù)hadoopa藍(lán)色曙光課程_第3頁
大數(shù)據(jù)hadoopa藍(lán)色曙光課程_第4頁
大數(shù)據(jù)hadoopa藍(lán)色曙光課程_第5頁
已閱讀5頁,還剩84頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第一部分 Hadoop藍(lán)色曙光大數(shù)據(jù)課程Hadoop生態(tài)系統(tǒng) 開源、免費(fèi) 社區(qū)活躍、參與者眾多 涉及分布式存儲和計(jì)算的方方面面 已得到企業(yè)界驗(yàn)證 Hadoop是什么?What Is Apache Hadoop?The Apache Hadoop project develops open-source software for reliable, scalable, distributed computing.解決問題:海量數(shù)據(jù)的存儲(HDFS)海量數(shù)據(jù)的分析(MapReduce)資源管理調(diào)度(YARN)作者:Doug Cutting受Google三篇論文的啟發(fā)(GFS、MapReduce、B

2、igTable)Hadoop云計(jì)算系統(tǒng)Google云計(jì)算系統(tǒng)Hadoop HDFS分布式文件系統(tǒng)Google GFSHadoop MapReduce分布式處理模型Google MapReduceHadoop HBase分布式數(shù)據(jù)庫Google BigtableHadoop ZooKeeper解決分布式系統(tǒng)的一致性問題Google ChubbyHadoop Pig高級數(shù)據(jù)流語言Google Sawzallhadoop具體能干什么?hadoop擅長日志分析,facebook就用Hive來進(jìn)行日志分析,2009年時facebook就有非編程人員的30%的人使用HiveQL進(jìn)行數(shù)據(jù)分析;淘寶搜索中的自

3、定義篩選也使用的Hive;利用Pig還可以做高級的數(shù)據(jù)處理,包括Twitter、LinkedIn 上用于發(fā)現(xiàn)您可能認(rèn)識的人,可以實(shí)現(xiàn)類似 的協(xié)同過濾的推薦效果。淘寶的商品推薦也是!在Yahoo!的40%的Hadoop作業(yè)是用pig運(yùn)行的,包括垃圾郵件的識別和過濾,還有用戶特征建模。哪些公司使用hadoopHadoop被公認(rèn)是一套行業(yè)大數(shù)據(jù)標(biāo)準(zhǔn)開源軟件,在分布式環(huán)境下提供了海量數(shù)據(jù)的處理能力。在線旅游移動數(shù)據(jù)電子商務(wù)能源發(fā)現(xiàn)能源節(jié)省基礎(chǔ)設(shè)施管理圖像處理欺詐檢測It安全醫(yī)療保健版本Apache 官方版本(2.6.5)Cloudera(5.1)使用下載最多的版本,穩(wěn)定,有商業(yè)支持,在Apache的基

4、礎(chǔ)上打上了一些patch。推薦使用HDP(Hortonworks Data Platform) Hortonworks公司發(fā)行版本。hadoop核心HDFS: Hadoop Distributed File System 分布式文件系統(tǒng) YARN: Yet Another Resource Negotiator資源管理調(diào)度系統(tǒng)Mapreduce(分布式計(jì)算框架)HDFS的架構(gòu)主從結(jié)構(gòu)主節(jié)點(diǎn),只有一個: namenode從節(jié)點(diǎn),有很多個: datanodenamenode負(fù)責(zé):接收用戶操作請求維護(hù)文件系統(tǒng)的目錄結(jié)構(gòu)管理文件與block之間關(guān)系,block與datanode之間關(guān)系datanode

5、負(fù)責(zé):存儲文件文件被分成block存儲在磁盤上為保證數(shù)據(jù)安全,文件會有多個副本設(shè)計(jì)一分布式文件系統(tǒng)解決海量數(shù)據(jù)的計(jì)算求和:1+5+7+3+4+9+3+5+6=?1+5+73+4+93+5+6Map:13 + 16 + 14Reduce:MRResource ManagerNode ManagerNode ManagerNode ManagerMr處理流程Hadoop的特點(diǎn)擴(kuò)容能力(Scalable):能可靠地(reliably)存儲和處理千兆字節(jié)(PB)數(shù)據(jù)。成本低(Economical):可以通過普通機(jī)器組成的服務(wù)器群來分發(fā)以及處理數(shù)據(jù)。這些服務(wù)器群總計(jì)可達(dá)數(shù)千個節(jié)點(diǎn)。高效率(Efficie

6、nt):通過分發(fā)數(shù)據(jù),hadoop可以在數(shù)據(jù)所在的節(jié)點(diǎn)上并行地(parallel)處理它們,這使得處理非常的快速??煽啃裕≧eliable):hadoop能自動地維護(hù)數(shù)據(jù)的多份副本,并且在任務(wù)失敗后能自動地重新部署(redeploy)計(jì)算任務(wù)。hadoop1.0和hadoop2.0的對比本地模式偽分布模式集群模式1720Hadoop部署方式 偽分布模式安裝步驟關(guān)閉防火墻修改ip修改hostname設(shè)置ssh自動登錄安裝jdk安裝hadoop作業(yè):搭建偽分布環(huán)境Distributed File System數(shù)據(jù)量越來越多,在一個操作系統(tǒng)管轄的范圍存不下了,那么就分配到更多的操作系統(tǒng)管理的磁盤中,

7、但是不方便管理和維護(hù),因此迫切需要一種系統(tǒng)來管理多臺機(jī)器上的文件,這就是分布式文件管理系統(tǒng) 。是一種允許文件通過網(wǎng)絡(luò)在多臺主機(jī)上分享的文件系統(tǒng),可讓多機(jī)器上的多用戶分享文件和存儲空間。通透性。讓實(shí)際上是通過網(wǎng)絡(luò)來訪問文件的動作,由程序與用戶看來,就像是訪問本地的磁盤一般。容錯。即使系統(tǒng)中有某些節(jié)點(diǎn)脫機(jī),整體來說系統(tǒng)仍然可以持續(xù)運(yùn)作而不會有數(shù)據(jù)損失。分布式文件管理系統(tǒng)很多,hdfs只是其中一種。適用于一次寫入多次查詢的情況,不支持并發(fā)寫情況,小文件不合適。HDFS的Shell調(diào)用文件系統(tǒng)(FS)Shell命令應(yīng)使用 bin/hadoop fs 的形式。所有的FS shell命令使用URI路徑作為

8、參數(shù)。URI格式是scheme:/authority/path。HDFS的scheme是hdfs,對本地文件系統(tǒng),scheme是file。其中scheme和authority參數(shù)都是可選的,如果未加指定,就會使用配置中指定的默認(rèn)scheme。例如:/parent/child可以表示成hdfs:/namenode:namenodePort/parent/child,或者更簡單的/parent/child(假設(shè)配置文件是namenode:namenodePort)大多數(shù)FS Shell命令的行為和對應(yīng)的Unix Shell命令類似。HDFS fs命令HDFS的Shell命令練習(xí)#hdfs dfs

9、-ls / 查看HDFS根目錄# hdfs dfs -mkdir /test 在根目錄創(chuàng)建一個目錄test # hdfs dfs -mkdir /test1 在根目錄創(chuàng)建一個目錄test1# hdfs dfs -put ./test.txt /test或# hdfs dfs -copyFromLocal ./test.txt /test # hdfs dfs -get /test/test.txt . 或# hdfs dfs -getToLocal /test/test.txt . # hdfs dfs -cp /test/test.txt /test1# hdfs dfs -rm /test

10、1/test.txt# hdfs dfs -mv /test/test.txt /test1HDFS架構(gòu)NameNodeSecondary NameNodeDataNodeHDFS架構(gòu)元數(shù)據(jù)存儲細(xì)節(jié)NameNode(FileName, replicas, block-ids,id2host.)/test/a.log, 3 ,blk_1,blk_2, blk_1:h0,h1,h3,blk_2:h0,h2,h4blk_1blk_2blk_2blk_1blk_1blk_1blk_2NameNode Metadatadatanodesh0h4h1h2h3NameNode是整個文件系統(tǒng)的管理節(jié)點(diǎn)。它維護(hù)

11、著整個文件系統(tǒng)的文件目錄樹,文件/目錄的元信息和每個文件對應(yīng)的數(shù)據(jù)塊列表。接收用戶的操作請求。文件包括:fsimage:元數(shù)據(jù)鏡像文件。存儲某一時段NameNode內(nèi)存元數(shù)據(jù)信息。edits:操作日志文件。fstime:保存最近一次checkpoint的時間以上這些文件是保存在linux的文件系統(tǒng)中。NameNode的工作特點(diǎn)Namenode始終在內(nèi)存中保存metedata,用于處理“讀請求”到有“寫請求”到來時,namenode會首先寫editlog到磁盤,即向edits文件中寫日志,成功返回后,才會修改內(nèi)存,并且向客戶端返回Hadoop會維護(hù)一個fsimage文件,也就是namenode中

12、metedata的鏡像,但是fsimage不會隨時與namenode內(nèi)存中的metedata保持一致,而是每隔一段時間通過合并edits文件來更新內(nèi)容。Secondary namenode就是用來合并fsimage和edits文件來更新NameNode的metedata的。SecondaryNameNodeHA的一個解決方案。但不支持熱備。配置即可。執(zhí)行過程:從NameNode上下載元數(shù)據(jù)信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并將其推送到NameNode,替換舊的fsimage.默認(rèn)在安裝在NameNode節(jié)點(diǎn)上,但這樣.不安全!seconda

13、ry namenode的工作流程secondary通知namenode切換edits文件secondary從namenode獲得fsimage和edits(通過http)secondary將fsimage載入內(nèi)存,然后開始合并editssecondary將新的fsimage發(fā)回給namenodenamenode用新的fsimage替換舊的fsimage什么時候checkpiont fs.checkpoint.period 指定兩次checkpoint的最大時間間隔,默認(rèn)3600秒。 fs.checkpoint.size 規(guī)定edits文件的最大值,一旦超過這個值則強(qiáng)制checkpoint,不管

14、是否到達(dá)最大時間間隔。默認(rèn)大小是64M。Datanode提供真實(shí)文件數(shù)據(jù)的存儲服務(wù)。文件塊(block):最基本的存儲單位。對于文件內(nèi)容而言,一個文件的長度大小是size,那么從文件的偏移開始,按照固定的大小,順序?qū)ξ募M(jìn)行劃分并編號,劃分好的每一個塊稱一個Block。HDFS默認(rèn)Block大小是128MB,以一個256MB文件,共有256/128=2個Block.不同于普通文件系統(tǒng)的是,HDFS中,如果一個文件小于一個數(shù)據(jù)塊的大小,并不占用整個數(shù)據(jù)塊存儲空間Replication。多復(fù)本。默認(rèn)是三個。安全模式namenode啟動的時候,首先將 fsimage載入內(nèi)存,并執(zhí)行編輯日志(edit

15、s)中的各項(xiàng)操作。 一旦在內(nèi)存中成功建立文件系統(tǒng)元數(shù)據(jù)的映射,則創(chuàng)建一個新的fsimage文件(這個操作不需要SecondaryNameNode)和一個空的編輯日志。 此刻namenode運(yùn)行在安全模式。即namenode的文件系統(tǒng)對于客服端來說是只讀的。(顯示目錄,顯示文件內(nèi)容等。寫、刪除、重命名都會失敗)。 在此階段Namenode收集各個datanode的報(bào)告,當(dāng)數(shù)據(jù)塊達(dá)到最小副本數(shù)以上時,會被認(rèn) 為是“安全”的,在一定比例(可設(shè)置)的數(shù)據(jù)塊被確定為“安全”后,再過若干時間,安全模式結(jié)束 當(dāng)檢測到副本數(shù)不足的數(shù)據(jù)塊時,該塊會被復(fù)制直到達(dá)到最小副本數(shù),系統(tǒng)中數(shù)據(jù)塊的位 置并不是由namen

16、ode維護(hù)的,而是以塊列表形式存儲在datanode中。 驗(yàn)證塊大小方法:上傳大于128MB的文件,觀察塊大小驗(yàn)證:使用 觀察Remote Procedure CallRPC遠(yuǎn)程過程調(diào)用協(xié)議,它是一種通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。RPC協(xié)議假定某些傳輸協(xié)議的存在,如TCP或UDP,為通信程序之間攜帶信息數(shù)據(jù)。在OSI網(wǎng)絡(luò)通信模型中,RPC跨越了傳輸層和應(yīng)用層。RPC使得開發(fā)包括網(wǎng)絡(luò)分布式多程序在內(nèi)的應(yīng)用程序更加容易。RPC采用客戶機(jī)/服務(wù)器模式。請求程序就是一個客戶機(jī),而服務(wù)提供程序就是一個服務(wù)器。首先,客戶機(jī)調(diào)用進(jìn)程發(fā)送一個有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程

17、,然后等待應(yīng)答信息。在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息的到達(dá)為止。當(dāng)一個調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計(jì)算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個調(diào)用信息,最后,客戶端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行。hadoop的整個體系結(jié)構(gòu)就是構(gòu)建在RPC之上的(見org.apache.hadoop.ipc)。HDFS讀過程初始化FileSystem,然后客戶端(client)用FileSystem的open()函數(shù)打開文件FileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點(diǎn),得到文件的數(shù)據(jù)塊信息,對于每一個數(shù)據(jù)塊,元數(shù)據(jù)節(jié)點(diǎn)返回保存數(shù)據(jù)塊的數(shù)據(jù)節(jié)點(diǎn)的地址。FileSystem返回FSD

18、ataInputStream給客戶端,用來讀取數(shù)據(jù),客戶端調(diào)用stream的read()函數(shù)開始讀取數(shù)據(jù)。DFSInputStream連接保存此文件第一個數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn),data從數(shù)據(jù)節(jié)點(diǎn)讀到客戶端(client)當(dāng)此數(shù)據(jù)塊讀取完畢時,DFSInputStream關(guān)閉和此數(shù)據(jù)節(jié)點(diǎn)的連接,然后連接此文件下一個數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn)。當(dāng)客戶端讀取完畢數(shù)據(jù)的時候,調(diào)用FSDataInputStream的close函數(shù)。在讀取數(shù)據(jù)的過程中,如果客戶端在與數(shù)據(jù)節(jié)點(diǎn)通信出現(xiàn)錯誤,則嘗試連接包含此數(shù)據(jù)塊的下一個數(shù)據(jù)節(jié)點(diǎn)。失敗的數(shù)據(jù)節(jié)點(diǎn)將被記錄,以后不再連接。HDFS文件權(quán)限與Linux文件權(quán)限類似

19、r:read;w:write;x:execute,權(quán)限x對于文件忽略,對于文件夾表示是否允許訪問其內(nèi)容如果Linux系統(tǒng)用戶laofeng使用hadoop命令創(chuàng)建一個文件,那么這文件在HDFS中owner就是laofeng 。 HDFS的權(quán)限目的:阻止好人做錯事,而不是阻止壞人做壞事。HDFS 相信,你告訴我你是誰,我就認(rèn)為你是誰 HDFS寫過程初始化FileSystem,客戶端調(diào)用create()來創(chuàng)建文件FileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點(diǎn),在文件系統(tǒng)的命名空間中創(chuàng)建一個新的文件,元數(shù)據(jù)節(jié)點(diǎn)首先確定文件原來不存在,并且客戶端有創(chuàng)建文件的權(quán)限,然后創(chuàng)建新文件。FileSystem返回D

20、FSOutputStream,客戶端用于寫數(shù)據(jù),客戶端開始寫入數(shù)據(jù)。DFSOutputStream將數(shù)據(jù)分成塊,寫入data queue。data queue由Data Streamer讀取,并通知元數(shù)據(jù)節(jié)點(diǎn)分配數(shù)據(jù)節(jié)點(diǎn),用來存儲數(shù)據(jù)塊(每塊默認(rèn)復(fù)制3塊)。分配的數(shù)據(jù)節(jié)點(diǎn)放在一個pipeline里。Data Streamer將數(shù)據(jù)塊寫入pipeline中的第一個數(shù)據(jù)節(jié)點(diǎn)。第一個數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)塊發(fā)送給第二個數(shù)據(jù)節(jié)點(diǎn)。第二個數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)發(fā)送給第三個數(shù)據(jù)節(jié)點(diǎn)。DFSOutputStream為發(fā)出去的數(shù)據(jù)塊保存了ack queue,等待pipeline中的數(shù)據(jù)節(jié)點(diǎn)告知數(shù)據(jù)已經(jīng)寫入成功。當(dāng)客戶端結(jié)束寫

21、入數(shù)據(jù),則調(diào)用stream的close函數(shù)。此操作將所有的數(shù)據(jù)塊寫入pipeline中的數(shù)據(jù)節(jié)點(diǎn),并等待ack queue返回成功。最后通知元數(shù)據(jù)節(jié)點(diǎn)寫入完畢。如果數(shù)據(jù)節(jié)點(diǎn)在寫入的過程中失敗,關(guān)閉pipeline,將ack queue中的數(shù)據(jù)塊放入data queue的開始,當(dāng)前的數(shù)據(jù)塊在已經(jīng)寫入的數(shù)據(jù)節(jié)點(diǎn)中被元數(shù)據(jù)節(jié)點(diǎn)賦予新的標(biāo)示,則錯誤節(jié)點(diǎn)重啟后能夠察覺其數(shù)據(jù)塊是過時的,會被刪除。失敗的數(shù)據(jù)節(jié)點(diǎn)從pipeline中移除,另外的數(shù)據(jù)塊則寫入pipeline中的另外兩個數(shù)據(jù)節(jié)點(diǎn)。元數(shù)據(jù)節(jié)點(diǎn)則被通知此數(shù)據(jù)塊是復(fù)制塊數(shù)不足,將來會再創(chuàng)建第三份備份。HDFS讀過程思考hdfs的組成部分有哪些,分別解

22、釋一下hdfs的高可用如何實(shí)現(xiàn)hdfs的常用shell命令有哪些hdfs的常用java api有哪些用shell命令實(shí)現(xiàn)目錄、文件的增刪改查用java api實(shí)現(xiàn)目錄、文件的增刪改查Hadoop核心組件MRMapReduce是一種分布式計(jì)算模型,由Google提出,主要用于搜索領(lǐng)域,解決海量數(shù)據(jù)的計(jì)算問題.MR由兩個階段組成:Map和Reduce,用戶只需要實(shí)現(xiàn)map()和reduce()兩個函數(shù),即可實(shí)現(xiàn)分布式計(jì)算,非常簡單。這兩個函數(shù)的形參是key、value對,表示函數(shù)的輸入信息。海量數(shù)據(jù)的計(jì)算求和:1+5+7 +3+4+9 +3+5+6=?1+5+73+4+93+5+6Map:13 +

23、 16 + 14Reduce:Mapreduce原理Mapreduce原理 map、reduce鍵值對格式函數(shù)輸入鍵值對輸出鍵值對map()reduce() WordCount原理 WordCount驅(qū)動代碼提交一個MapReduce Job$ bin/hadoop jar wc.jar WordCount /user/joe/wordcount/input /user/joe/wordcount/outputMR流程代碼編寫作業(yè)配置提交作業(yè)初始化作業(yè)分配任務(wù)執(zhí)行任務(wù)更新任務(wù)和狀態(tài)完成作業(yè)Yarn架構(gòu)Yarn架構(gòu)ResourceMananger調(diào)度器 (scheduler):負(fù)責(zé)調(diào)度資源應(yīng)用管

24、理器(ApplicationsMananger):接收job,協(xié)商獲取第一個容器用于執(zhí)行AM并提供重啟失敗AM container的服務(wù)NodeMananger:每個節(jié)點(diǎn)上的框架代理,負(fù)責(zé)啟動應(yīng)用所需要的容器,監(jiān)控資源使用情況(內(nèi)存,cpu,磁盤,網(wǎng)絡(luò))的使用情況并將之回報(bào)給調(diào)度器。它負(fù)責(zé)接收ResourceManager的資源分配請求,分配具體的Container給應(yīng)用,負(fù)責(zé)監(jiān)控并報(bào)告Container使用信息給ResourceManager。applicationMaster:負(fù)責(zé)與調(diào)度器協(xié)商以獲取和合適的容器,并跟蹤這些容器的狀態(tài)、監(jiān)控其進(jìn)度Container:節(jié)點(diǎn)上一組CPU和內(nèi)存資源

25、,是Yarn框架的計(jì)算單元,是具體執(zhí)行應(yīng)用task(如map task、reduce task)的基本單位。Container和集群節(jié)點(diǎn)的關(guān)系是:一個節(jié)點(diǎn)會運(yùn)行多個Container,但一個Container不會跨節(jié)點(diǎn)。任何一個job或application必須運(yùn)行在一個或多個Container中,在Yarn框架中,ResourceManager只負(fù)責(zé)告訴ApplicationMaster哪些Containers可以用,ApplicationMaster還需要去找NodeManager請求分配具體的ContainerYarn架構(gòu)-Resource Manager整個集群只有一個,負(fù)責(zé)集群資源的

26、統(tǒng)一管理和調(diào)度1)處理來自客戶端的請求(啟動/殺死應(yīng)用程序);2)啟動/監(jiān)控ApplicationMaster;一旦某個AM掛了之后,RM將會在另外一個節(jié)點(diǎn)上啟動該AM;3)監(jiān)控NodeManager,接收NodeManager的心跳匯報(bào)信息并分配任務(wù)到NodeManager去執(zhí)行;一旦某個NM掛了,標(biāo)志下該NM上的任務(wù),來告訴對應(yīng)的AM如何處理;4)負(fù)責(zé)整個集群的資源分配和調(diào)度;負(fù)責(zé)資源調(diào)度的組件是Scheduler:它可以調(diào)度集群中的各種隊(duì)列、應(yīng)用等。在Hadoop的MapReduce框架中主要有三種Scheduler:FIFOScheduler、Capacity Scheduler、Fa

27、ir Scheduler。Scheduler的角色是一個純調(diào)度器,它只負(fù)責(zé)調(diào)度Containers,不會關(guān)心應(yīng)用程序監(jiān)控及其運(yùn)行狀態(tài)等信息。同樣,它也不能重啟因應(yīng)用失敗或者硬件錯誤而運(yùn)行失敗的任務(wù)Yarn架構(gòu)-Node ManagerNodeManage:整個集群中有多個,負(fù)責(zé)單節(jié)點(diǎn)資源管理和使用接收并處理來自ResourceManager的Container啟動/停止的各種命令 。 周期性向ResourceManager匯報(bào)本節(jié)點(diǎn)上的資源使用情況和各個Container的運(yùn)行狀態(tài)。 管理每個節(jié)點(diǎn)上的日志 處理來自ApplicationMaster的命令Yarn架構(gòu)-Application M

28、asterApplicationMaster的主要作用是向ResourceManager申請資源并和NodeManager協(xié)同工作來運(yùn)行應(yīng)用的各個任務(wù)然后跟蹤它們狀態(tài)及監(jiān)控各個任務(wù)的執(zhí)行,遇到失敗的任務(wù)還負(fù)責(zé)重啟它。1)數(shù)據(jù)切分;2)為應(yīng)用程序/作業(yè)向ResourceManager申請資源(Container),并分配給內(nèi)部任務(wù);3)與NodeManager通信以啟動/停止任務(wù);4)任務(wù)監(jiān)控和容錯(在任務(wù)執(zhí)行失敗時重新為該任務(wù)申請資源以重啟任務(wù));5)處理ResourceManager發(fā)過來的命令:殺死Container、讓NodeManager重啟等;Yarn架構(gòu)-Container對任務(wù)運(yùn)

29、行環(huán)境的抽象;1)任務(wù)運(yùn)行資源(節(jié)點(diǎn)、內(nèi)存、CPU);2)任務(wù)啟動命令;3)任務(wù)運(yùn)行環(huán)境; 任務(wù)是運(yùn)行在Container中,一個Container中既可以運(yùn)行ApplicationMaster也可以運(yùn)行具體的Map/Reduce/MPI/Spark Task;Yarn調(diào)度器FifoScheduler:最簡單的調(diào)度器,按照先進(jìn)先出的方式處理應(yīng)用。只有一個隊(duì)列可提交應(yīng)用,所有用戶提交到這個隊(duì)列??梢葬槍@個隊(duì)列設(shè)置ACL。沒有應(yīng)用優(yōu)先級可以配置。CapacityScheduler:可以看作是FifoScheduler的多隊(duì)列版本。每個隊(duì)列可以限制資源使用量。但是,隊(duì)列間的資源分配以使用量作排列依

30、據(jù),使得容量小的隊(duì)列有競爭優(yōu)勢。集群整體吞吐較大。延遲調(diào)度機(jī)制使得應(yīng)用可以放棄,跨機(jī)器或者跨機(jī)架的調(diào)度機(jī)會,爭取本地調(diào)度。FairScheduler:多隊(duì)列,多用戶共享資源。特有的客戶端創(chuàng)建隊(duì)列的特性,使得權(quán)限控制不太完美。根據(jù)隊(duì)列設(shè)定的最小共享量或者權(quán)重等參數(shù),按比例共享資源。延遲調(diào)度機(jī)制跟CapacityScheduler的目的類似,但是實(shí)現(xiàn)方式稍有不同。資源搶占特性,是指調(diào)度器能夠依據(jù)公平資源共享算法,計(jì)算每個隊(duì)列應(yīng)得的資源,將超額資源的隊(duì)列的部分容器釋放掉的特性。Yarn工作原理Yarn工作原理1)用戶向YARN中提交應(yīng)用程序/作業(yè),其中包括ApplicaitonMaster程序、啟動

31、ApplicationMaster的命令、用戶程序等;2)ResourceManager為作業(yè)分配第一個Container,并與對應(yīng)的NodeManager通信,要求它在這個Containter中啟動該作業(yè)的ApplicationMaster;3)ApplicationMaster首先向ResourceManager注冊,這樣用戶可以直接通過ResourceManager查詢作業(yè)的運(yùn)行狀態(tài);然后它將為各個任務(wù)申請資源并監(jiān)控任務(wù)的運(yùn)行狀態(tài),直到運(yùn)行結(jié)束。即重復(fù)步驟4-7;4)ApplicationMaster采用輪詢的方式通過RPC請求向ResourceManager申請和領(lǐng)取資源;5)一旦Ap

32、plicationMaster申請到資源后,便與對應(yīng)的NodeManager通信,要求它啟動任務(wù);6)NodeManager啟動任務(wù);7)各個任務(wù)通過RPC協(xié)議向ApplicationMaster匯報(bào)自己的狀態(tài)和進(jìn)度,以讓ApplicaitonMaster隨時掌握各個任務(wù)的運(yùn)行狀態(tài),從而可以在任務(wù)失敗時重新啟動任務(wù);在作業(yè)運(yùn)行過程中,用戶可隨時通過RPC向ApplicationMaster查詢作業(yè)當(dāng)前運(yùn)行狀態(tài);8)作業(yè)完成后,ApplicationMaster向ResourceManager注銷并關(guān)閉自己;Yarn容錯性1、ResourceMananger基于ZooKeeper實(shí)現(xiàn)HA避免單點(diǎn)

33、故障;2、NodeManager執(zhí)行失敗后,ResourceManager將失敗任務(wù)告訴對應(yīng)的ApplicationMaster;由ApplicationMaster決定如何處理失敗的任務(wù);3、ApplicationMaster執(zhí)行失敗后,由ResourceManager負(fù)責(zé)重啟;ApplicationMaster需處理內(nèi)部任務(wù)的容錯問題;RMAppMaster會保存已經(jīng)運(yùn)行完成的Task,重啟后無需重新運(yùn)行。Yarn調(diào)度框架1、雙層調(diào)度框架1)ResourceManager將資源分配給ApplicationMaster;2)ApplicationMaster將資源進(jìn)一步分配給各個TASK;2

34、、基于資源預(yù)留的調(diào)度策略1)資源不夠時,會為Task預(yù)留,直到資源充足;描述:當(dāng)一個Task需要10G資源時,各個節(jié)點(diǎn)都不足10G,那么就選擇一個節(jié)點(diǎn),但是某個NodeManager上只有2G,那么就在這個NodeManager上預(yù)留,當(dāng)這個NodeManager上釋放其他資源后,會將資源預(yù)留給10G的作業(yè),直到攢夠10G時,啟動Task;缺點(diǎn):資源利用率不高,要先攢著,等到10G才利用,造成集群的資源利用率低;2)與“all or nothing”策略不同(Apache Mesos)描述:當(dāng)一個作業(yè)需要10G資源時,節(jié)點(diǎn)都不足10G,那就慢慢等,等到某個節(jié)點(diǎn)上有10G空閑資源時再運(yùn)行,很可能

35、會導(dǎo)致該Task餓死。Yarn的設(shè)計(jì)目標(biāo)通用的統(tǒng)一的資源管理系統(tǒng):1)同時運(yùn)行長應(yīng)用程序(永不停止的程序:Service、HTTP Server);2)短應(yīng)用程序(秒、分、小時級內(nèi)運(yùn)行結(jié)束的程序:MR job、Spark job等)在引入YARN之后,可以在YARN上運(yùn)行種不同框架的作業(yè):離線計(jì)算框架:MapReduceDAG計(jì)算框架:Tez流式計(jì)算框架:Storm內(nèi)存計(jì)算框架:SparkMapreduce在yarn的執(zhí)行過程MR過程各個角色的作用Jobclient:提交job,與ResourceMananger通訊獲取job狀態(tài)ResourceMananger調(diào)度器 (scheduler):

36、負(fù)責(zé)調(diào)度資源應(yīng)用管理器(ApplicationsMananger):接收job,協(xié)商獲取第一個容器用于執(zhí)行AM并提供重啟失敗AM container的服務(wù)NodeMananger:每個節(jié)點(diǎn)上的框架代理,負(fù)責(zé)啟動應(yīng)用所需要的容器,監(jiān)控資源使用情況(內(nèi)存,cpu,磁盤,網(wǎng)絡(luò))的使用情況并將之回報(bào)給調(diào)度器applicationMaster:負(fù)責(zé)與調(diào)度器協(xié)商以獲取和合適的容器,并跟蹤這些容器的狀態(tài)、監(jiān)控其進(jìn)度Container:容器中封裝了硬件資源(memory,cpu,disk,network),每個任務(wù)會被分配一個容器,該任務(wù)只能在該容器中執(zhí)行,并使用該容器封裝的資源HDFS:保存job數(shù)據(jù)、co

37、nfig、jar、resultMR過程各個角色的作用jobClient:提交作業(yè)ResourceManager:初始化作業(yè),分配作業(yè),NodeMananger與其進(jìn)行通信,協(xié)調(diào)監(jiān)控整個作業(yè)NodeMananger:定期與Resource通信,執(zhí)行Map和Reduce任務(wù)HDFS:保存作業(yè)的數(shù)據(jù)、配置、jar包、結(jié)果作業(yè)提交提交作業(yè)之前,需要對作業(yè)進(jìn)行配置編寫自己的MR程序配置作業(yè),包括輸入輸出路徑等等提交作業(yè)配置完成后,通過JobClient提交具體功能與ResourceMananger通信得到一個jar的存儲路徑和JobId輸入輸出路徑檢查將job jar拷貝到的HDFS計(jì)算輸入分片,將分片

38、信息寫入到j(luò)ob.split中寫job.xml真正提交作業(yè)作業(yè)初始化客戶端提交作業(yè)后,ResourceMananger會將作業(yè)加入到隊(duì)列,然后進(jìn)行調(diào)度,默認(rèn)是FIFO方式具體功能作業(yè)初始化主要是指JobInProgress中完成的讀取分片信息創(chuàng)建task包括Map和Reduce任創(chuàng)建task包括Map和Reduce任務(wù)創(chuàng)建TaskInProgress執(zhí)行task,包括map任務(wù)和reduce任務(wù)任務(wù)分配NodeMananger與ResourceMananger之間的通信和任務(wù)分配是通過心跳機(jī)制實(shí)現(xiàn)的NodeMananger會主動定期向ResourceMananger發(fā)送心態(tài)信息,詢問是否有任務(wù)

39、要做,如果有,就會申請到任務(wù)。任務(wù)執(zhí)行如果NodeMananger拿到任務(wù),會將所有的信息拷貝到本地,包括代碼、配置、分片信息等NodeMananger中的localizeJob()方法會被調(diào)用進(jìn)行本地化,拷貝job.jar,jobconf,job.xml到本地NodeMananger調(diào)用launchTaskForJob()方法加載啟動任務(wù)MapTaskRunner和ReduceTaskRunner分別啟動java child進(jìn)程來執(zhí)行相應(yīng)的任務(wù)狀態(tài)更新Task會定期向NodeMananger匯報(bào)執(zhí)行情況NodeMananger會定期收集所在集群上的所有Task的信息,并向ResourceMa

40、nanger匯報(bào)ResourceMananger會根據(jù)所有NodeMananger匯報(bào)上來的信息進(jìn)行匯總作業(yè)完成ResourceMananger是在接收到最后一個任務(wù)完成后,才將任務(wù)標(biāo)記為成功將數(shù)結(jié)果據(jù)寫入到HDFS中JobClient是用戶作業(yè)與ResourceMananger交互的主要接口。負(fù)責(zé)提交作業(yè)的,負(fù)責(zé)啟動、跟蹤任務(wù)執(zhí)行、訪問任務(wù)狀態(tài)和日志等。序列化概念序列化(Serialization)是指把結(jié)構(gòu)化對象轉(zhuǎn)化為字節(jié)流。反序列化(Deserialization)是序列化的逆過程。即把字節(jié)流轉(zhuǎn)回結(jié)構(gòu)化對象。Java序列化(java.io.Serializable)Hadoop序列化的特

41、點(diǎn)序列化格式特點(diǎn):緊湊:高效使用存儲空間??焖伲鹤x寫數(shù)據(jù)的額外開銷小可擴(kuò)展:可透明地讀取老格式的數(shù)據(jù)互操作:支持多語言的交互Hadoop的序列化格式:WritableHadoop序列化的作用序列化在分布式環(huán)境的兩大作用:進(jìn)程間通信,永久存儲。Hadoop節(jié)點(diǎn)間通信。內(nèi)存數(shù)據(jù)序列化為二進(jìn)制流節(jié)點(diǎn)1二進(jìn)制流反序列化為內(nèi)存數(shù)據(jù)節(jié)點(diǎn)2二進(jìn)制流消息Writable接口Writable接口Writable接口, 是根據(jù) DataInput 和 DataOutput 實(shí)現(xiàn)的簡單、有效的序列化對象.MR的任意Key和Value必須實(shí)現(xiàn)Writable接口.MR的任意key必須實(shí)現(xiàn) parable接口常用的Wr

42、itable實(shí)現(xiàn)類Text一般認(rèn)為它等價(jià)于java.lang.String的Writable。針對UTF-8序列。例:Text test = new Text(test);IntWritable one = new IntWritable(1);實(shí)現(xiàn) parable.Java值對象的比較:一般需要重寫toString(),hashCode(),equals()方法Writablewrite 是把每個對象序列化到輸出流readFields是把輸入流字節(jié)反序列化MapReduce輸入的處理類FileInputFormat: FileInputFormat是所有以文件作為數(shù)據(jù)源的InputFormat實(shí)現(xiàn)的基類,F(xiàn)ileInputFormat保存作為job輸入的所有文件,并實(shí)現(xiàn)了對輸入文件計(jì)算splits的方法。至于獲得記錄的方法是有不同的子類TextInputFormat進(jìn)行實(shí)現(xiàn)的。InputFormatInputFormat 負(fù)責(zé)處理MR的輸入部分.有三個作用:驗(yàn)證作業(yè)的輸入是否規(guī)范.把輸入文件切分成InputSplit.提供RecordReader 的實(shí)現(xiàn)類,把InputSplit讀到Mapper中進(jìn)行處理.InputSplit 在執(zhí)行mapreduce之前,原始數(shù)據(jù)被分割成若干split,每個split作為一個map任務(wù)的輸入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論