《大數(shù)據(jù)導(dǎo)論》課件-第一章_第1頁(yè)
《大數(shù)據(jù)導(dǎo)論》課件-第一章_第2頁(yè)
《大數(shù)據(jù)導(dǎo)論》課件-第一章_第3頁(yè)
《大數(shù)據(jù)導(dǎo)論》課件-第一章_第4頁(yè)
《大數(shù)據(jù)導(dǎo)論》課件-第一章_第5頁(yè)
已閱讀5頁(yè),還剩151頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

大數(shù)據(jù)導(dǎo)論DataNode大數(shù)據(jù)導(dǎo)論目錄01DataNode的職責(zé)02機(jī)架感知與副本冗余存儲(chǔ)策略03機(jī)架感知職責(zé):(1)存儲(chǔ)數(shù)據(jù)塊(2)負(fù)責(zé)客戶(hù)端對(duì)數(shù)據(jù)塊的IO請(qǐng)求(3)DataNode定時(shí)和NameNode進(jìn)行心跳通信,接受NameNode的指令。數(shù)據(jù)塊大?。篐adoop1.x默認(rèn)64MB,Hadoop2.x默認(rèn)128MBDataNode的職責(zé)(Slave)例子:上傳一個(gè)大于128M的文件(例子為206M)hdfsdfs-puthadoop-2.7.3.tar.gz/user/hadoop查看實(shí)際數(shù)據(jù)塊文件。DataNode(2)機(jī)架感知與副本冗余存儲(chǔ)策略Rack1Rack2Rack3block128MBblock副本一block副本二block副本三安全效率DataNode(3)機(jī)架感知(副本冗余存儲(chǔ)策略)默認(rèn)為副本數(shù)為3第一個(gè)副本:放置在上傳文件的數(shù)據(jù)節(jié)點(diǎn);如果是集群外提交,則隨機(jī)挑選一臺(tái)磁盤(pán)不太滿(mǎn)、CPU不太忙的節(jié)點(diǎn)。第二個(gè)副本:放置在與第一個(gè)副本不同的機(jī)架的節(jié)點(diǎn)上。第三個(gè)副本:與第二個(gè)副本相同機(jī)架的其他節(jié)點(diǎn)上。更多副本:隨機(jī)節(jié)點(diǎn)SecondaryNameNode大數(shù)據(jù)導(dǎo)論目錄01SecondaryNameNode的職責(zé)02合并過(guò)程03檢查點(diǎn)

定期地創(chuàng)建命名空間的檢查點(diǎn)(CheckPoint)操作:把edits中最新的狀態(tài)信息合并到fsimage文件中,防止edits過(guò)大。也可以做冷備,對(duì)一定范圍內(nèi)數(shù)據(jù)做快照性備份。SecondaryNameNode的職責(zé)合并過(guò)程editsfsimagefsimage.ckpt(2)復(fù)制fsimage和edits(4)復(fù)制fsimage.ckpt(3)合并edits和fsimageSecondaryNameNodefsimageedits.newfsimage.ckpteditsfsimageedits(1)生成新的edits.new(5)替換fsimage和editsNameNode檢查點(diǎn)(checkpoint)什么時(shí)候進(jìn)行合并?1)每隔60分鐘(node.checkpoint.period)2)當(dāng)edits文件達(dá)到100萬(wàn)條事務(wù)(node.checkpoint.txns)只要達(dá)到這兩個(gè)條件之一就可以觸發(fā)檢查點(diǎn)操作。檢查點(diǎn)的作用(合并的作用)是什么?可以減少namenode的啟動(dòng)時(shí)間檢查點(diǎn)(checkpoint)初識(shí)YARN大數(shù)據(jù)導(dǎo)論目錄01YARN-進(jìn)程

02YARN-Web界面03什么是YARN04YARN的架構(gòu)

05Yarn在Hadoop生態(tài)圈的位置YARN-進(jìn)程YARN-Web界面什么是YARNYARN:YetAnotherResourceNegotiator,另一種資源協(xié)調(diào)者。最初是為了改善MapReduce的實(shí)現(xiàn),但也是一種資源調(diào)度框架,具有通用性,可為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度,可以支持其他的分布式計(jì)算模式(如Spark)。它的引入為集群在利用率、資源統(tǒng)一管理和數(shù)據(jù)共享等方面帶來(lái)了巨大好處。YARN在Hadoop生態(tài)圈中位置Ambari(安裝部署工具)Zookeeper(分布式協(xié)調(diào)服務(wù))HBase(分布式數(shù)據(jù)庫(kù))HDFS(分布式存儲(chǔ)系統(tǒng))YARN(資源調(diào)度框架)MapReduce(離線(xiàn)計(jì)算)...HivePigMahout...Sqoop(數(shù)據(jù)庫(kù)ETL工具)Flume(日志采集)數(shù)據(jù)分析引擎機(jī)器學(xué)習(xí)算法庫(kù)數(shù)據(jù)采集引擎HDFS工作原理大數(shù)據(jù)導(dǎo)論目錄01數(shù)據(jù)上傳過(guò)程02數(shù)據(jù)下載過(guò)程03HDFS容錯(cuò)數(shù)據(jù)上傳過(guò)程hdfsdfs-put1.mp4/movie文件大?。?60MBDistributedFileSystemNameNodeFSDataOutputStreamDataNode1DataNode2DataNode3Client1.創(chuàng)建文件請(qǐng)求2.請(qǐng)求創(chuàng)建文件元數(shù)據(jù)1000M內(nèi)存5.滿(mǎn)了?生成fsimage4.緩存元信息3.創(chuàng)建元信息文件名:1.mp4路徑:/movie大小:160MB數(shù)據(jù)塊:2個(gè)數(shù)據(jù)塊位置:數(shù)據(jù)塊1:DN1DN3DN1數(shù)據(jù)塊2:DN2DN3DN28.上傳第一個(gè)數(shù)據(jù)塊9.水平復(fù)制,達(dá)到冗余度要求7.創(chuàng)建輸出流10.循環(huán),上傳所有數(shù)據(jù)塊服務(wù)端客戶(hù)端LRU算法6.返回元信息數(shù)據(jù)下載過(guò)程hdfsdfs-get/movie/1.mp4.DistributedFileSystemNameNodeFSDataInputStreamDataNode1DataNode2Client1.請(qǐng)求2.獲取文件元數(shù)據(jù)1000M內(nèi)存3.在內(nèi)存中查找文件名:1.mp4路徑:/movie大小:160MB數(shù)據(jù)塊:2個(gè)數(shù)據(jù)塊位置:數(shù)據(jù)塊1:DN1DN3DN1數(shù)據(jù)塊2:DN2DN3DN26.創(chuàng)建輸入流7.多線(xiàn)程下載所有數(shù)據(jù)塊客戶(hù)端5.返回元信息

HDFS具有較高的容錯(cuò)性,可以兼容廉價(jià)的硬件,它把硬件出錯(cuò)看作一種常態(tài),而不是異常,并設(shè)計(jì)了相應(yīng)的機(jī)制檢測(cè)數(shù)據(jù)錯(cuò)誤和進(jìn)行自動(dòng)恢復(fù),主要包括以下幾種情形:名稱(chēng)節(jié)點(diǎn)出錯(cuò)數(shù)據(jù)節(jié)點(diǎn)出錯(cuò)數(shù)據(jù)出錯(cuò)HDFS容錯(cuò)1、NameNode出錯(cuò):用SecondaryNameNode備份的fsimage恢復(fù)

HA(HighAvailability)高可用:多個(gè)NameNode2、DataNode出錯(cuò):DataNode與NameNode通過(guò)“心跳”報(bào)告狀態(tài),失效后會(huì)啟動(dòng)數(shù)據(jù)冗余復(fù)制。3、數(shù)據(jù)出錯(cuò):采用md5和sha1對(duì)數(shù)據(jù)塊進(jìn)行校驗(yàn)。HDFS容錯(cuò)操作HDFS大數(shù)據(jù)導(dǎo)論通過(guò)WebConsole通過(guò)Shell命令通過(guò)JavaAPIHDFS訪(fǎng)問(wèn)方式NameNodeweb管理端口50070,可以查看文件系統(tǒng)概況,數(shù)據(jù)節(jié)點(diǎn)信息,快照,目錄結(jié)構(gòu)及文件屬性等。通過(guò)WebConsole通過(guò)WebConsole通過(guò)WebConsoleHDFS啟動(dòng)過(guò)程通過(guò)Shell命令操作命令01hdfsdfs管理命令02hdfsdfsadmin其他03namenode-formathdfszkfchdfsfsckhdfsbalancerhdfsoivhdfsoevhdfssnapshotDiff比較快照l(shuí)sSnapshottableDir通過(guò)Shell命令hadoop@node1:~$hdfsdfs [-appendToFile<localsrc>...<dst>] [-cat[-ignoreCrc]<src>...] [-checksum<src>...] [-chgrp[-R]GROUPPATH...] [-chmod[-R]<MODE[,MODE]...|OCTALMODE>PATH...] [-chown[-R][OWNER][:[GROUP]]PATH...] [-copyFromLocal[-f][-p][-l]<localsrc>...<dst>] [-copyToLocal[-p][-ignoreCrc][-crc]<src>...<localdst>] [-count[-q][-h]<path>...] [-cp[-f][-p|-p[topax]]<src>...<dst>] [-createSnapshot<snapshotDir>[<snapshotName>]] [-deleteSnapshot<snapshotDir><snapshotName>] [-df[-h][<path>...]] [-du[-s][-h]<path>...] [-expunge](清空回收站) [-find<path>...<expression>...] [-get[-p][-ignoreCrc][-crc]<src>...<localdst>] [-getfacl[-R]<path>] [-getfattr[-R]{-nname|-d}[-een]<path>](獲取文件擴(kuò)展屬性) [-getmerge[-nl]<src><localdst>] [-help[cmd...]]通過(guò)Shell命令hadoop@node1:~$hdfsdfsadmin [-report[-live][-dead][-decommissioning]] [-safemode<enter|leave|get|wait>] [-saveNamespace] [-rollEdits] [-restoreFailedStoragetrue|false|check] [-refreshNodes] [-setQuota<quota><dirname>...<dirname>] [-clrQuota<dirname>...<dirname>] [-setSpaceQuota<quota>[-storageType<storagetype>]<dirname>...<dirname>] [-clrSpaceQuota[-storageType<storagetype>]<dirname>...<dirname>] [-finalizeUpgrade] [-rollingUpgrade[<query|prepare|finalize>]] [-refreshServiceAcl] [-refreshUserToGroupsMappings] [-refreshSuperUserGroupsConfiguration] [-refreshCallQueue] [-refresh<host:ipc_port><key>[arg1..argn] [-reconfig<datanode|...><host:ipc_port><start|status>] [-printTopology] [-refreshNamenodesdatanode_host:ipc_port] [-deleteBlockPooldatanode_host:ipc_portblockpoolId[force]] [-setBalancerBandwidth<bandwidthinbytespersecond>] [-fetchImage<localdirectory>] [-allowSnapshot<snapshotDir>] [-disallowSnapshot<snapshotDir>] [-shutdownDatanode<datanode_host:ipc_port>[upgrade]] [-getDatanodeInfo<datanode_host:ipc_port>] [-metasavefilename] [-triggerBlockReport[-incremental]<datanode_host:ipc_port>] [-help[cmd]]Configuration類(lèi)該類(lèi)的對(duì)象封裝了配置信息FileSystem類(lèi)文件系統(tǒng)類(lèi),可使用該類(lèi)的方法樹(shù)對(duì)文件/目錄進(jìn)行操作,一般通過(guò)FileSystem的靜態(tài)方法get獲得一個(gè)文件系統(tǒng)對(duì)象FSDataInputStream和FSDataOutputStream類(lèi)HDFS中的輸入輸出流。分別通過(guò)FileSystem的open方法和create方法獲得以上類(lèi)均來(lái)自java包:org.apache.hadoop.fs通過(guò)JAVAAPIHDFS高級(jí)功能大數(shù)據(jù)導(dǎo)論目錄01安全模式02回收站05HA(高可用)03快照04配額安全模式是HDFS所處的一種特殊狀態(tài),在處于這種狀態(tài)時(shí),文件系統(tǒng)只接受讀數(shù)據(jù)請(qǐng)求,不能對(duì)文件進(jìn)行寫(xiě),刪除等操作。查看當(dāng)前狀態(tài):hdfsdfsadmin-safemodeget進(jìn)入安全模式:hdfsdfsadmin-safemodeenter強(qiáng)制離開(kāi)安全模式:hdfsdfsadmin-safemodeleave一直等待直到安全模式結(jié)束:hdfsdfsadmin-safemodewait安全模式HDFS為每一個(gè)用戶(hù)都創(chuàng)建了回收站,這個(gè)類(lèi)似操作系統(tǒng)的回收站。位置是/user/用戶(hù)名/.Trash/。操作演示:1、列出某目錄下的文件hdfsdfs-ls2、把其中的一個(gè)文件file1刪除hdfsdfs-rmfile13、到回收站可看到剛才刪除的file1hdfsdfs-ls/user/hadoop/.Trash/Current/tmp4、把file1從回收站移動(dòng)到/home/haoop/目錄下hdfsdfs-mv/user/hadoop/.Trash/Current/tmp/file1

/home/hadoop/5、到/home/hadoop/查看即可看到恢復(fù)的文件file1hdfsdfs-ls/tmp/sqoop1回收站快照功能默認(rèn)禁用,開(kāi)啟或禁用快照功能,需要針對(duì)目錄操作,命令如下(<snapshotDir>表示某個(gè)目錄):hdfsdfsadmin-allowSnapshot<snapshotDir>hdfsdfsadmin-disallowSnapshot<snapshotDir>創(chuàng)建快照、刪除快照、重命名快照的命令如下:hdfsdfs-createSnapshot<snapshotDir>[<snapshotName>]hdfsdfs-deleteSnapshot<snapshotDir><snapshotName>hdfsdfs-renameSnapshot<snapshotDir><oldName><newName>快照HDFS提供了兩種配額的命令(hdfsdfsadmin)(1)setQuotahdfsdfsadmin-setQuota<quota><dirname>...<dirname>setQuota指的是對(duì)HDFS中某個(gè)目錄設(shè)置文件和目錄數(shù)量之和的最大值。(2)setSpaceQuotahdfsdfsadmin-setSpaceQuota<quota><dirname>...<dirname>setSpaceQuota針對(duì)的是設(shè)置HDFS中某個(gè)目錄可用存儲(chǔ)空間大小,單位是byte。清除配額的命令為:hdfsdfsadmin-clrQuota<dirname>...<dirname>hdfsdfsadmin-clrSpaceQuota<dirname>...<dirname>配額NameNode是集群的主,有單點(diǎn)失效的問(wèn)題。

NameNode

DataNode

DataNode

DataNode

DataNode......HDFSClient出故障了整個(gè)集群將不可用HA(HighAvailability高可用)配置兩個(gè)NameNode,一個(gè)為活躍狀態(tài),一個(gè)為備用狀態(tài)。故障時(shí)馬上切換NameNodeDataNodeDataNodeDataNodeDataNode......HDFSClientNameNodeStandbyActiveHA(HighAvailability高可用)YARN架構(gòu)大數(shù)據(jù)導(dǎo)論目錄01YARN架構(gòu)圖

02Container(容器)03ResourceManager04NodeManager05ApplicationMasterResourceManager(Scheduler、ApplicationManager)ClientNodeManagerYARN架構(gòu)ContainerApplicationMasterNodeManagerContainerApplicationNodeManagerContainerApplicationYARN中資源包括內(nèi)存、CPU、磁盤(pán)輸入輸出等等。Container是YARN中資源的抽象,它封裝了某個(gè)節(jié)點(diǎn)上的多維度資源。Container(容器)ResourceManager負(fù)責(zé)整個(gè)系統(tǒng)的資源分配和管理,是一個(gè)全局的資源管理器。主要由兩個(gè)組件構(gòu)成:調(diào)度器和應(yīng)用程序管理器:調(diào)度器(Scheduler):

調(diào)度器根據(jù)資源情況為應(yīng)用程序分配封裝在Container中的資源。應(yīng)用程序管理器(ApplicationManager):

應(yīng)用程序管理器負(fù)責(zé)管理整個(gè)系統(tǒng)中所有應(yīng)用程序。ResourceManager(資源管理器)NodeManager是每個(gè)節(jié)點(diǎn)上的資源和任務(wù)管理器。定時(shí)向ResourceManager匯報(bào)本節(jié)點(diǎn)上的資源使用情況和各個(gè)Container的運(yùn)行狀態(tài);接收并處理來(lái)自ApplicationManager的Container啟動(dòng)/停止等請(qǐng)求。NodeManager(節(jié)點(diǎn)管理器)ApplicationMaster是一個(gè)詳細(xì)的框架庫(kù),它結(jié)合從ResourceManager獲得的資源和NodeManager協(xié)同工作來(lái)運(yùn)行和監(jiān)控任務(wù)。用戶(hù)提交的每一個(gè)應(yīng)用程序均包含一個(gè)ApplicationMaster。主要功能包括:1)、與ResourceManager調(diào)度器協(xié)商以獲取抽象資源(Container);2)、負(fù)責(zé)應(yīng)用的監(jiān)控,跟蹤應(yīng)用執(zhí)行狀態(tài),重啟失敗任務(wù)等;3)、并且與NodeManager協(xié)同工作完成Task的執(zhí)行和監(jiān)控。備注:MRAppMaster是MapReduce時(shí)的ApplicationMaster的一種實(shí)現(xiàn)。ApplicationMaster(主應(yīng)用)YARN運(yùn)行機(jī)制大數(shù)據(jù)導(dǎo)論目錄01Application運(yùn)行機(jī)制

02任務(wù)進(jìn)度監(jiān)控03MapReduce與YARN的對(duì)比04YARN對(duì)MapReduce運(yùn)行性能的提升

YARN中應(yīng)用(Application)運(yùn)行機(jī)制(流程)ApplicationClientclientnodeResurceManagerresourcemanagernodenodemanagernodeNodeManager2a:初始化容器2b:啟動(dòng)4:資源不夠?申請(qǐng)新資源nodemanagernodeNodeManager1:提交YARNApplicationApplication(應(yīng)用進(jìn)程)5b:啟動(dòng)容器容器ApplicationMaster5a:資源拿到了?啟動(dòng)容器3.計(jì)算資源夠不夠,夠,則運(yùn)行任務(wù)YARN中任務(wù)進(jìn)度監(jiān)控ApplicationClientclientnodeResurceManagerresourcemanagernodenodemanagernodeNodeManagernodemanagernodeNodeManagerApplication(應(yīng)用進(jìn)程)容器容器ApplicationMastera.向自己的ApplicationMaster報(bào)告進(jìn)度和狀態(tài)b.匯聚作業(yè)視圖獲取狀態(tài)MapReduce1與YARN組成對(duì)比分工MapReduce1YARN(1)作業(yè)調(diào)度(2)任務(wù)進(jìn)度監(jiān)控(跟蹤任務(wù)、重啟失敗的任務(wù);記錄任務(wù)流水)JobTrackerResourceManager→作業(yè)調(diào)度ApplicationMaster→任務(wù)進(jìn)度監(jiān)控任務(wù)執(zhí)行(或節(jié)點(diǎn)資源管理)TaskTrackerNodeManager資源調(diào)配單元(cpu,內(nèi)存等)Slot(槽)Container(容器)

YARN對(duì)MapReduce運(yùn)行性能提升主要特點(diǎn):ResourceManager與ApplicationMaster分離性能提升:可以擴(kuò)展支持10000個(gè)節(jié)點(diǎn),100000個(gè)任務(wù)YARN調(diào)度器大數(shù)據(jù)導(dǎo)論目錄01FIFOScheduler02CapatitySchedule03FairScheduleYARN調(diào)度器類(lèi)似一個(gè)工廠,接到很多訂單,比如一個(gè)訂單是1W件,一個(gè)是100件等等,工人是有限的,采用什么樣的策略來(lái)安排達(dá)到資源利用率最高?這就是調(diào)度器所要考慮的。YARN調(diào)度器分三種:(1)FIFOScheduler→先進(jìn)先出調(diào)度器(2)CapacityScheduler→容器調(diào)度器(3)FairScheduler→公平調(diào)度器FIFOScheduler最簡(jiǎn)單的調(diào)度器job1運(yùn)行完后,job2才能獲取到資源CapacitySchedule分成多個(gè)隊(duì)列,每個(gè)隊(duì)列占用一定資源可以看作是FIFOScheduler的多隊(duì)列版本。每個(gè)隊(duì)列可以限制資源使用量。但是,隊(duì)列間的資源分配以使用量作排列依據(jù),使得容量小的隊(duì)列有競(jìng)爭(zhēng)優(yōu)勢(shì)。注意:如果不限制某隊(duì)列最大容量,則運(yùn)行過(guò)程中,它可以占用全部資源。CapacityScheduleYARN默認(rèn)采用CapacityScheduler

FairScheduler剛開(kāi)始,job1占用100%資源job2提交后,job1、job2各占50%job2運(yùn)行完后,job1又占100%假設(shè)每個(gè)任務(wù)具有相同的優(yōu)先級(jí),平均分配系統(tǒng)的資源三種調(diào)度器比較調(diào)度器工作方法FIFOScheduler(1)單隊(duì)列(2)先進(jìn)先出的原則CapacityScheduler(1)多隊(duì)列。(2)計(jì)算能力調(diào)度器,選擇資源使用量占用最小、優(yōu)先級(jí)高的先執(zhí)行。(3)多用戶(hù)的情況下,可以最大化集群的吞吐和利用率。FairScheduler(1)多隊(duì)列。(2)公平調(diào)度,所有的job具有相同的資源MapReduce概述大數(shù)據(jù)導(dǎo)論目錄01MapReduce是什么02MapReduce設(shè)計(jì)思想03MapReduce特點(diǎn)04MapReduce不擅長(zhǎng)的場(chǎng)景MapReduce是什么MapReduce是一種簡(jiǎn)化并行計(jì)算的編程模型,用于進(jìn)行大數(shù)據(jù)量的計(jì)算。

MapReduce設(shè)計(jì)思想MapReduce采用“分而治之”的思想,把對(duì)大規(guī)模數(shù)據(jù)集的操作,分發(fā)給一個(gè)主節(jié)點(diǎn)管理下的各個(gè)子節(jié)點(diǎn)共同完成,然后整合各個(gè)子節(jié)點(diǎn)的中間結(jié)果,得到最終的計(jì)算結(jié)果。簡(jiǎn)而言之,MapReduce就是“分散任務(wù),匯總結(jié)果”

MapReduce特點(diǎn)易于編程良好的擴(kuò)展性高容錯(cuò)性擅長(zhǎng)對(duì)PB級(jí)以上海量數(shù)據(jù)進(jìn)行離線(xiàn)處理

MapReduce不擅長(zhǎng)的場(chǎng)景(1)實(shí)時(shí)計(jì)算MapReduce無(wú)法像MySQL一樣,在毫秒或者秒級(jí)內(nèi)返回結(jié)果。(2)流式計(jì)算

流式計(jì)算的輸入數(shù)據(jù)是動(dòng)態(tài)的,而MapReduce的輸入數(shù)據(jù)集是靜態(tài)的,不能動(dòng)態(tài)變化。(3)DAG(有向圖)計(jì)算

多個(gè)應(yīng)用程序存在依賴(lài)關(guān)系,后一個(gè)應(yīng)用程序的輸入為前一個(gè)的輸出。在這種情況下,MapReduce并不是不能做,而是使用后,每個(gè)MapReduce作業(yè)的輸出結(jié)果都會(huì)寫(xiě)入到磁盤(pán),會(huì)造成大量的磁盤(pán)IO,降低使用性能。MapReduce編程模型大數(shù)據(jù)導(dǎo)論目錄01初識(shí)MapReduce模型

02MapReduce示例03MapReduce編程模型輸入一個(gè)大文件,通過(guò)Split之后,將其分為多個(gè)分片每個(gè)文件分片由單獨(dú)的機(jī)器去處理,這就是Map方法將各個(gè)機(jī)器計(jì)算的結(jié)果進(jìn)行匯總并得到最終結(jié)果,這就是Reduce方法初識(shí)MapReduce模型從MapReduce自身的命名特點(diǎn)可以看出,MapReduce由兩個(gè)階段組成:Map和Reduce。用戶(hù)只需要編寫(xiě)map()和reduce()兩個(gè)函數(shù),即可完成分布式程序的設(shè)計(jì)。MapReduce示例1+2+3+4+5+6+7+8+9+10大任務(wù):1+2+3+4小任務(wù):5+6+78+9+10split10182755<k1,v1><k2,v2><k3,v3><k4,v4>Map階段Reduce階段Split從一個(gè)簡(jiǎn)單示例看MapReduce編程模型MapReduce編程模型Input<k2,v2>map()<k1,v1><k1,v1><k1,v1><k1,v1><k2,v2><k2,v2><k2,v2><k3,v3><k3,v3><k3,v3>reduce()<k4,v4><k4,v4><k4,v4>Map輸入Map輸出Reduce輸入Reduce輸出ShuffleOutputHDFS/HBaseHDFS/HBasemap()map()map()InputFormatOutputFormatMapReduce編程模型概論大數(shù)據(jù)導(dǎo)論目錄01MapReduce大致工作流程02MapReduce模型要點(diǎn)主要分為八個(gè)步驟(1)對(duì)輸入文件進(jìn)行切片規(guī)劃。(2)啟動(dòng)相應(yīng)數(shù)量的MapTask進(jìn)程。(3)調(diào)用InputFormat中的RecordReader,讀一行數(shù)據(jù)并封裝為<k1,v1>,并將<k1,v1>傳給map函數(shù)。(4)調(diào)用自定義的map函數(shù)計(jì)算,并輸出<k2,v2>。(5)收集map的輸出,進(jìn)行分區(qū)和排序(shuffle)。(6)ReduceTask任務(wù)啟動(dòng),并從map端拉取數(shù)據(jù)。ReduceTask獲取到輸入數(shù)據(jù)<k3,v3>。(7)ReduceTask調(diào)用自定義的reduce函數(shù)進(jìn)行計(jì)算,得到輸出<k4,v4>。(8)調(diào)用Outputformat的RecordWriter將結(jié)果數(shù)據(jù)輸出。MapReduce大致工作流程(1)任務(wù)Job=Map+Reduce(2)Map的輸出是Reduce的輸入(3)所有的輸入和輸出都是<Key,Value>形式

<k1,v1>是Map的輸入,<k2,v2>是Map的輸出

<k3,v3>是Reduce的輸入,<k4,v4>是Reduce的輸出(4)k2=k3,v3是一個(gè)集合,v3的元素就是v2(5)所有的輸入和輸出的數(shù)據(jù)類(lèi)型必須是hadoop的數(shù)據(jù)類(lèi)型(實(shí)現(xiàn)Writable接口)

Integer->IntWritableLong->LongWritableString->Textnull->NullWritable(6)MapReduce處理的數(shù)據(jù)都是HDFS的數(shù)據(jù)(或HBase)MapReduce模型要點(diǎn)MapReduce編程模型實(shí)例大數(shù)據(jù)導(dǎo)論MapReduce編程實(shí)例下面結(jié)合案例,加深對(duì)MapReduce模型的理解。案例一:WordCount程序案例:WordCount程序(1)分析WordCount的數(shù)據(jù)處理的過(guò)程hadoopjarhadoop-mapreduce-examples-2.7.3.jarwordcount/input/data.txt/output/wordcount輸入/input/data.txtagoodbeginningishalfthebattlewherethereisawillthereisaway.............................................................................Mapk1:偏移量LongWritablev1:數(shù)據(jù)Text<k1,v1>k2:?jiǎn)卧~Text

v2:1IntWritable<k2,v2>Reducewherethereisawillthereisawayagoodbeginningishalfthebattlek3:?jiǎn)卧~Text

v3:1IntWritable<k3,v3>k4:?jiǎn)卧~Text

v4:頻率IntWritable<k4,v4>a 3battle 1beginning 1good 1half 1is 3the 1there 2way 1where 1will 1hdfs對(duì)v3求和輸出分詞a1good1beginning1is1half1the1battle1where1there1is1a1will1there1is1a1way1a(1,1,1)battle (1)beginning (1)good (1)half (1)is(1,1,1)the (1)there(1,1)way (1)where (1)will (1)(1)相同的k2,會(huì)作為reducer的同一個(gè)k3輸入,v3是v2組成的集合。groupby(2)k3互不相同。distinct(3)k3按默認(rèn)排序。orderbyMapReduce輸入格式大數(shù)據(jù)導(dǎo)論目錄01物理分片02邏輯分片MapReduce編程模型Input<k2,v2>map()<k1,v1><k1,v1><k1,v1><k1,v1><k2,v2><k2,v2><k2,v2><k3,v3><k3,v3><k3,v3>reduce()<k4,v4><k4,v4><k4,v4>Map輸入Map輸出Reduce輸入Reduce輸出ShuffleOutputHDFS/HBaseHDFS/HBasemap()map()map()InputFormatOutputFormatMapReduce的輸入格式(1)認(rèn)識(shí):物理分片(按200個(gè)字分片)MapReduce的輸入格式(1)認(rèn)識(shí):物理分片(按128MB分片)會(huì)出現(xiàn)如下情形:MapReduce的輸入格式(2)認(rèn)識(shí):邏輯分片(按200個(gè)字分片),第二個(gè)分片把“淡淡的”給了第一個(gè)分片MapReduce的輸入格式(3)有了邏輯分片,就可以獲取一行一行的數(shù)據(jù)了MapReduce的輸入格式InputFormat提供以下兩個(gè)功能(1)數(shù)據(jù)切分,獲得SplitInput(邏輯切片),F(xiàn)ileInputFormat.getSplits()獲取到。(2)為Mapper提供輸入數(shù)據(jù)。有多少個(gè)SplitInput,就有多少個(gè)MapperTextInputFormat是默認(rèn)InputFormatFileInputSplit[]getSplit()RecordReader讀取<k1,v1><k1,v1><k1,v1>MapReduce的輸出格式大數(shù)據(jù)導(dǎo)論目錄01MapReduce的輸出格式02分區(qū)的概念MapReduce編程模型Input<k2,v2>map()<k1,v1><k1,v1><k1,v1><k1,v1><k2,v2><k2,v2><k2,v2><k3,v3><k3,v3><k3,v3>reduce()<k4,v4><k4,v4><k4,v4>Map輸入Map輸出Reduce輸入Reduce輸出ShuffleOutputHDFS/HBaseHDFS/HBasemap()map()map()InputFormatOutputFormatMapReduce的輸出格式OutputFormat主要用于描述輸出數(shù)據(jù)的格式,通過(guò)RecordWriter能夠?qū)⒂脩?hù)提供的key/value對(duì)寫(xiě)入特定格式的文件中(1)TextOutputFormt調(diào)用toString()方法把它們轉(zhuǎn)換為字符串(2)NullWritable來(lái)省略輸出的key或value分區(qū)Partition(1)什么是分區(qū)以MySQL數(shù)據(jù)庫(kù)為例,解釋什么是分區(qū)分區(qū)1分區(qū)條件:sal<1500分區(qū)2分區(qū)條件:1500<=sal<=2500分區(qū)3分區(qū)條件:sal>2500通過(guò)查看SQL的執(zhí)行計(jì)劃,得知是否提高了查詢(xún)的效率查詢(xún):工資:1500~2500之間的員工select*fromEMPwheresal>=1500andsal<=2500分區(qū)Partition(1)什么是分區(qū)Partition定義:Mapper任務(wù)劃分?jǐn)?shù)據(jù)的過(guò)程稱(chēng)作Partition。負(fù)責(zé)實(shí)現(xiàn)數(shù)據(jù)的類(lèi)稱(chēng)作Partitioner,默認(rèn)的分區(qū)是Hash分區(qū)(HashPartition)。Partition作用:將map階段產(chǎn)生的所有<key,value>對(duì)分配給不同的Reducer處理,可以將Reduce階段的處理負(fù)載進(jìn)行分?jǐn)偂!鶳artition的數(shù)量決定Reducer的數(shù)量。分區(qū)Partition(2)Hash分區(qū)基本原理---關(guān)聯(lián)知識(shí):后面的Hive桶表計(jì)算某個(gè)值的hash值,如果結(jié)果相同,則放入同一個(gè)分區(qū)Hash分區(qū)的作用:把數(shù)據(jù)打散進(jìn)行存放,最終是為了避免熱塊數(shù)據(jù):123456789要求:盡量把數(shù)據(jù)打散hash運(yùn)算:

123012301(對(duì)4求余數(shù))0123481592637合并Combiner大數(shù)據(jù)導(dǎo)論目錄01Combiner概述02使用Combiner案例03Combiner使用場(chǎng)景

Combiner概述是一種特殊Reducer,在Mapper端,先執(zhí)行一次Reducer作用:----->減少M(fèi)apper輸出到Reduce的數(shù)據(jù)量,緩解網(wǎng)絡(luò)傳輸瓶頸,提高reducer的執(zhí)行效率。

需要注意的問(wèn)題:一定要謹(jǐn)慎使用Combiner有些情況不能使用Combiner---->如:求平均值保證引入Combiner以后,不能改變?cè)瓉?lái)的邏輯

使用Combiner差異1.沒(méi)有CombinerMapper的輸出Reduce階段12345(1,2,3,4,5)求和2.有Combiner12345(1,2,3)求和(4,5)69(6,9)Combiner階段Mapper的輸出Reduce階段1515增加Combiner的WordCount輸入/input/data.txtagoodbeginningishalfthebattlewherethereisawillthereisawayMapperk1:偏移量LongWritablev1:數(shù)據(jù)Text<k1,v1>k2:?jiǎn)卧~Text

v2:1IntWritable<k2,v2>a1good1beginning1is1half1the1battle1where1there1is1a1will1there1is1a1way1Combinerwherethereisawillthereisawayagoodbeginningishalfthebattlek3:?jiǎn)卧~Text

v3:1IntWritable<k3,v3>a(1,2)good(1)beginning(1)is(1,1,1)k4:?jiǎn)卧~Text

v4:頻率IntWritable<k4,v4>a 3battle 1beginning 1good 1half 1is 3the 1there 2way 1where 1will 1對(duì)v3求和splitReducera(1,1)--->a2使用場(chǎng)景Mapper輸出123Reducer(1,2,3)2Mapper輸出123(1.5,3)不是21.5求平均值求平均值求平均值MapReduce工作機(jī)制大數(shù)據(jù)導(dǎo)論目錄01作業(yè)運(yùn)行機(jī)制02作業(yè)工作原理03狀態(tài)更新的傳遞流程MapReduce作業(yè)運(yùn)行機(jī)制整個(gè)過(guò)程涉及五個(gè)獨(dú)立的實(shí)體:(1)客戶(hù)端:提交MapReduce作業(yè)(2)YARNResourceManager:負(fù)責(zé)協(xié)調(diào)集群上計(jì)算機(jī)資源的分配(3)YARNNodeManager:負(fù)責(zé)啟動(dòng)和監(jiān)視集群中機(jī)器上的計(jì)算容器(container)(4)MapReduce的ApplicationMaster,負(fù)責(zé)協(xié)調(diào)運(yùn)行MapReduce作業(yè)的任務(wù)。它和MapReduce任務(wù)在容器中運(yùn)行,這些容器由資源管理器分配并由節(jié)點(diǎn)管理器進(jìn)行管理。(5)分布式文件系統(tǒng)(一般為HDFS):共享作業(yè)文件MapReduce作業(yè)工作原理MapReduceprogramJob1.runjobclientJVMclientnodeResurceManager2:獲取JobIDresourcemanagernode4:提交Job(JobID/數(shù)據(jù)元信息)MRAppMasternodemanagernodeSharedFileSystem(e.g.HDFS)3a:分片,將Jar文件/分片保存到以JobID命名的目錄。NodeManager5a:分配容器5b:啟動(dòng)6:初始化Job(誰(shuí)來(lái)執(zhí)行/需要多少資源)7:獲取分片,創(chuàng)建map/reduce8:資源不夠?申請(qǐng)新資源nodemanagernodeNodeManager9a:資源拿到了?啟動(dòng)容器MapReduceprogramJob1:請(qǐng)求執(zhí)行JobMapTaskorReduceTaskYarnChild11:運(yùn)行9b:啟動(dòng)10:獲取分片/配置/Jar文件,保存到本地taskJVM3b:獲取到數(shù)據(jù)元信息。狀態(tài)更新在MapReduce中的傳遞流程MapReduceprogramJob1.輪詢(xún)獲取狀態(tài)clientJVMclientnodeResurceManagerresourcemanagernodeMRAppMasternodemanagernodeSharedFileSystem(e.g.HDFS)NodeManagernodemanagernodeNodeManagerMapTaskorReduceTaskYarnChildtaskJVM2:獲取狀態(tài)a.向自己的MRAppMaster報(bào)告進(jìn)度和狀態(tài)b.匯聚作業(yè)視圖狀態(tài)更新在MapReduce中的傳遞流程--總結(jié)(1)map任務(wù)或reduce任務(wù)運(yùn)行時(shí),向自己的MRAppMaster報(bào)告進(jìn)度和狀態(tài)。(2)MRAppMaster形成一個(gè)作業(yè)的匯聚視圖(3)客戶(hù)端每秒鐘輪詢(xún)一次MRAppMaster獲取最新?tīng)顟B(tài)。MapReduce的核心(Shuffle)大數(shù)據(jù)導(dǎo)論目錄01MapReduce的核心(Shuffle)MapReduce編程模型Input<k2,v2>map()<k1,v1><k1,v1><k1,v1><k1,v1><k2,v2><k2,v2><k2,v2><k3,v3><k3,v3><k3,v3>reduce()<k4,v4><k4,v4><k4,v4>Map輸入Map輸出Reduce輸入Reduce輸出ShuffleOutputHDFS/HBaseHDFS/HBasemap()map()map()Shuffle(MapReduce的核心)MapReduce確保每個(gè)reducer的輸入都是按鍵排序的。系統(tǒng)執(zhí)行排序、將map輸出作為輸入傳給reducer的過(guò)程稱(chēng)為Shuffle。Shuffle是MapReduce奇跡發(fā)生的地方。數(shù)據(jù)塊(128MB)InputSplitMap緩沖區(qū)(100M)80%滿(mǎn)-->溢寫(xiě)12313分區(qū)排序123213合并數(shù)據(jù)塊(128MB)InputSplitMap緩沖區(qū)(100M)80%滿(mǎn)-->溢寫(xiě)12313分區(qū)排序213合并數(shù)據(jù)塊(128MB)InputSplitMap緩沖區(qū)(100M)80%滿(mǎn)-->溢寫(xiě)12313分區(qū)排序213合并123CombinerReduceHDFS①②③④⑤⑥MapReduce大概6次IO操作Shuffle大概4次IO操作hadoop部署前期準(zhǔn)備大數(shù)據(jù)導(dǎo)論目錄01關(guān)閉防火墻02修改映射03免密登陸配置修改主機(jī)名修改主機(jī)名(master、slave01、slave02)hostnamectlset-hostanemXXX重啟生效關(guān)閉防火墻systemctlstatusfirewalld #查看開(kāi)啟狀態(tài)systemctlstopfirewalld #臨時(shí)關(guān)閉防火墻systemctldisablefirewalld #關(guān)閉防火墻開(kāi)機(jī)自啟setenforce0sed-i's/SELINUX=enforce/SELINUX=disabled/g'/etc/selinux/config配置主機(jī)映射vi/etc/hosts配置免密登入ssh-keygen-trsa ##輸入后回車(chē)三下免密登入只要在一臺(tái)設(shè)備上配置就可以?A.對(duì)B.錯(cuò)練習(xí)Java、hadoop環(huán)境變量的配置大數(shù)據(jù)導(dǎo)論目錄01Java環(huán)境配置02Hadoop環(huán)境配置jdk環(huán)境配置安裝上傳文件:yum-yinstalllrzszrz-y解壓jdk壓縮包到/usr/local/src/tarzxvfjdk-8u201-linux-x64.tar-C/usr/local/src更名為jdkmvjdk1.8.0_201jdk配置環(huán)境變量vi/etc/profile在尾行插入以下字符串exportJAVA_HOME=/usr/local/src/jdk ##/usr/local/src/jdk自己的解壓路徑exportPATH=$PATH:$JAVA_HOME/binHadoop環(huán)境變量的配置tar-zxvfhadoop-2.6.0.tar.gz-C/usr/local/src///改名字mvhadoop-2.6.0hadoop環(huán)境變量配置vi/etc/profile完成以后如下圖執(zhí)行以下命令讓環(huán)境變量生效(每次更改環(huán)境變量文件都需要source才能生效)source/etc/profile配置主機(jī)映射vi/etc/hosts配置免密登入ssh-keygen-trsa ##輸入后回車(chē)三下免密登入只要在一臺(tái)設(shè)備上配置就可以?A.對(duì)B.錯(cuò)練習(xí)hadoop組件hdfs配置大數(shù)據(jù)導(dǎo)論目錄hadoop組件hdfs配置hadoop文件配置進(jìn)入到這個(gè)文件cd/usr/local/src/hadoop/etc/hadoop/配置yarn-env.sh的jdk路徑(23行左右)exportJAVA_HOME=/usr/local/src/jdk配置hadoop-env.sh的jdk路徑(大概在25行)exportJAVA_HOME=/usr/local/src/jdk配置hdfs-site.xml<property><name>dfs.replication</name><value>3</value></property><property><name>node.secondary.http-address</name><value>master:50090</value></property><property><name>dfs.namnode.http-address</name><value>master:50070</value></property><property><name>dfs.permissions.enabled</name><value>false</value></property><property><name>.dir</name><value>/usr/local/src/hadoop/data/name</value></property><property><name>dfs.datanode.data.dir</name><value>/usr/local/src/hadoop/data/data</value></property>配置core-site.xml<property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value></property><property> <name>hadoop.tmp.dir</name> <value>/usr/local/src/hadoop/tmp/</value></property>配置mapred-site.xml先把mapred-site.xml.template文件改為mapred-site.xmlmvmapred-site.xml.templatemapred-site.xml<property> <name></name> <value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>master:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>master:19888</value></property>配置slavesmasterslave01salve02分發(fā)以上所有配置文件到另外兩臺(tái)節(jié)點(diǎn),使之全部節(jié)點(diǎn)文件同步scp/etc/profileroot@slave1:/etc/profilescp/etc/profileroot@slave2:/etc/profile格式化namnode主節(jié)點(diǎn)hdfsnamenode-format開(kāi)始啟動(dòng)start-dfs.shHadoop習(xí)題講解大數(shù)據(jù)導(dǎo)論目錄Zookeeper組件搭建配置1、在HDFS中負(fù)責(zé)保存文件數(shù)據(jù)的節(jié)點(diǎn)被稱(chēng)為(B)A.NameNodeB.DataNodeC.SecondaryNameNodeD.NodeManager2、考慮到安全和效率,Hadoop設(shè)計(jì)了機(jī)架感知功能,下面關(guān)于機(jī)架感知說(shuō)法正確的是(C)A.三個(gè)冗余備份可在同一個(gè)機(jī)架上B.三個(gè)冗余備份在不同的機(jī)架上C.三個(gè)冗余備份其中有兩個(gè)在同一個(gè)機(jī)架上,另外一個(gè)備份在不同的機(jī)架上D.上述說(shuō)法都不對(duì)3、從HDFS下載文件,正確的shell命令是(A)A.hdfsdfsgetB.hdfsdfs-appendToFileC.hdfsdfsputD.hdfsdfscopyFromLocal4、HDFS的是基于流數(shù)據(jù)模式訪(fǎng)問(wèn)和處理超大文件的需求而開(kāi)發(fā)的,具有高容錯(cuò)、高可靠性、高可擴(kuò)展性、高吞吐率等特征,適合的讀寫(xiě)任務(wù)是:(c)4、一飲寫(xiě)入,少次讀寫(xiě)B(tài)、多次寫(xiě)入,少次讀寫(xiě)C、一次寫(xiě)入,多次讀寫(xiě)D、多次寫(xiě)入,多次讀寫(xiě)5、HDFS中block默認(rèn)保存幾份(c)A.1B.2C.3D.46、現(xiàn)有一個(gè)安裝2.7.7版本的Hadoop集群,在不修改Hadoop默認(rèn)配置的情況下,存儲(chǔ)100個(gè)每個(gè)200M的mp4文件,請(qǐng)問(wèn)最終會(huì)在整個(gè)HDFS集群中產(chǎn)生多少個(gè)數(shù)據(jù)塊(包括副本)(B)А.200B.600C.400D.12007、Namenode的Web界面默認(rèn)占用哪個(gè)端口是(A)。A.50070B.8088C.50090D.90008、SecondaryNameNode的Web界面默認(rèn)占用哪個(gè)端口是(C)A.50070B.8088C.50090

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論