Hadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程PPT完整全套教學(xué)課件_第1頁
Hadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程PPT完整全套教學(xué)課件_第2頁
Hadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程PPT完整全套教學(xué)課件_第3頁
Hadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程PPT完整全套教學(xué)課件_第4頁
Hadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程PPT完整全套教學(xué)課件_第5頁
已閱讀5頁,還剩296頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Hadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程

實(shí)驗(yàn)1準(zhǔn)備:初識Hadoop實(shí)驗(yàn)1準(zhǔn)備:初識Hadoop.pptx實(shí)驗(yàn)2準(zhǔn)備:分布式文件系統(tǒng)HDFS.pptx實(shí)驗(yàn)3準(zhǔn)備:分布式計(jì)算框架MapReduce.pptx實(shí)驗(yàn)4準(zhǔn)備:分布式協(xié)調(diào)框架ZooKeeper.pptx實(shí)驗(yàn)5準(zhǔn)備:分布式數(shù)據(jù)庫HBase.pptx實(shí)驗(yàn)6準(zhǔn)備:數(shù)據(jù)倉庫Hive.pptx全套PPT課件實(shí)驗(yàn)1知識地圖實(shí)驗(yàn)1部署全分布模式Hadoop集群一、實(shí)驗(yàn)?zāi)康?.熟練掌握Linux基本命令。2.掌握靜態(tài)IP地址的配置、主機(jī)名和域名映射的修改。3.掌握Linux環(huán)境下Java的安裝、環(huán)境變量的配置、Java基本命令的使用。4.理解為何需要配置SSH免密登錄,掌握Linux環(huán)境下SSH的安裝、免密登錄的配置。5.熟練掌握在Linux環(huán)境下如何部署全分布模式Hadoop集群。二、實(shí)驗(yàn)環(huán)境本實(shí)驗(yàn)所需的軟硬件環(huán)境包括PC、VMwareWorkstationPro、CentOS安裝包、OracleJDK安裝包、Hadoop安裝包。三、實(shí)驗(yàn)內(nèi)容1.規(guī)劃部署。2.準(zhǔn)備機(jī)器。3.準(zhǔn)備軟件環(huán)境:配置靜態(tài)IP;修改主機(jī)名;編輯域名映射;安裝和配置Java;安裝和配置SSH免密登錄。4.獲取和安裝Hadoop。5.配置全分布模式Hadoop集群。6.關(guān)閉防火墻。7.格式化文件系統(tǒng)。8.啟動和驗(yàn)證Hadoop。9.關(guān)閉Hadoop。實(shí)驗(yàn)1準(zhǔn)備:初識Hadoop1.1Hadoop概述1.2Hadoop版本1.3Hadoop生態(tài)系統(tǒng)1.4Hadoop體系架構(gòu)1.5部署和運(yùn)行Hadoop資料來源:1.1Hadoop概述Hadoop是Apache開源組織提供的一個(gè)分布式存儲和計(jì)算的軟件框架,它具有高可用、彈性可擴(kuò)展的特點(diǎn),非常適合處理海量數(shù)據(jù)。Hadoop由ApacheLucence創(chuàng)始人道格·卡丁創(chuàng)建,Lucence是一個(gè)應(yīng)用廣泛的文本搜索系統(tǒng)庫。Hadoop起源于開源的網(wǎng)絡(luò)搜索引擎ApacheNutch,它本身是Lucence項(xiàng)目的一部分。1.1Hadoop概述第一代Hadoop(即Hadoop1.0)的核心由分布式文件系統(tǒng)HDFS和分布式計(jì)算框架MapReduce組成,為了克服Hadoop1.0中HDFS和MapReduce的架構(gòu)設(shè)計(jì)和應(yīng)用性能方面的各種問題,提出了第二代Hadoop(即Hadoop2.0),Hadoop2.0的核心包括分布式文件系統(tǒng)HDFS、統(tǒng)一資源管理和調(diào)度框架YARN和分布式計(jì)算框架MapReduce。1.2Hadoop版本Hadoop版本ApacheHadoopHadoop1.00.20.x0.21.x0.22.xHadoop2.00.23.x2.xHadoop3.0Hadoop商業(yè)版ClouderaDistributionHadoop(CDH)HortonworksDataPlatform(HDP)1.3Hadoop2.0生態(tài)系統(tǒng)HiveMapReduceSparkImpalaZooKeeperKafkaFlumeYARNHDFSCommonPigMahoutSqoopHBaseAmbariSparkSQL1.HadoopCommonHadoopCommon是Hadoop體系中最底層的一個(gè)模塊,為Hadoop各子項(xiàng)目提供各種工具,如系統(tǒng)配置工具Configuration、遠(yuǎn)程過程調(diào)用RPC、序列化機(jī)制和日志操作,是其他模塊的基礎(chǔ)。2.HDFSHDFS(HadoopDistributedFileSystem)是Hadoop分布式文件系統(tǒng),是Hadoop三大核心之一,是針對谷歌文件系統(tǒng)GFS(GoogleFileSystem)的開源實(shí)現(xiàn)(TheGoogleFileSystem,2003)。HDFS是一個(gè)具有高容錯(cuò)性的文件系統(tǒng),適合部署在廉價(jià)的機(jī)器上,HDFS能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。大數(shù)據(jù)處理框架如MapReduce、Spark等要處理的數(shù)據(jù)源大部分都存儲在HDFS上,Hive、HBase等框架的數(shù)據(jù)通常也存儲在HDFS上。簡而言之,HDFS為大數(shù)據(jù)的存儲提供了保障。3.YARNYARN(YetAnotherResourceNegotiator)是統(tǒng)一資源管理和調(diào)度框架,它解決了Hadoop1.0資源利用率低和不能兼容異構(gòu)計(jì)算框架等多種問題,它提供了資源隔離方案和雙調(diào)度器的實(shí)現(xiàn),可在YARN上運(yùn)行各種不同類型計(jì)算框架包括MapReduce、Spark、Storm、Tez等。HadoopMapReduce是一個(gè)分布式的、并行處理的編程模型,是針對GoogleMapReduce的開源實(shí)現(xiàn)(MapReduce:SimplifiedDataProcessingonLargeClusters,2004)。開發(fā)人員可以在不了解分布式系統(tǒng)底層設(shè)計(jì)原理和缺少并行應(yīng)用開發(fā)經(jīng)驗(yàn)的情況下,就能使用MapReduce計(jì)算框架快速輕松地編寫出分布式并行程序,完成對大規(guī)模數(shù)據(jù)集(大于1TB)的并行計(jì)算。MapReduce利用函數(shù)式編程思想,將復(fù)雜的、運(yùn)行于大規(guī)模集群上的并行計(jì)算過程高度抽象為兩個(gè)函數(shù):Map和Reduce,其中Map是對可以并行處理的小數(shù)據(jù)集進(jìn)行本地計(jì)算并輸出中間結(jié)果,Reduce是對各個(gè)Map的輸出結(jié)果進(jìn)行匯總計(jì)算得到最終結(jié)果。4.MapReduce5.SparkSpark是加州伯克利大學(xué)AMP實(shí)驗(yàn)室開發(fā)的新一代計(jì)算框架,對迭代計(jì)算很有優(yōu)勢,和MapReduce計(jì)算框架相比性能提升明顯,并且都可以與YARN進(jìn)行集成。6.HBaseHBase是一個(gè)分布式的、面向列族的開源數(shù)據(jù)庫,一般采用HDFS作為底層存儲。HBase是針對GoogleBigtable的開源實(shí)現(xiàn)(Bigtable:ADistributedStorageSystemforStructuredData,2006),二者采用相同數(shù)據(jù)模型,具有強(qiáng)大的非結(jié)構(gòu)化數(shù)據(jù)存儲能力。HBase使用ZooKeeper進(jìn)行管理,它保障查詢速度的一個(gè)關(guān)鍵因素就是RowKey的設(shè)計(jì)是否合理。7.ZooKeeperZooKeeper是GoogleChubby的開源實(shí)現(xiàn),是一個(gè)分布式的、開放源碼的分布式應(yīng)用程序協(xié)調(diào)框架,為大型分布式系統(tǒng)提供了高效且可靠的分布式協(xié)調(diào)服務(wù),提供了諸如統(tǒng)一命名服務(wù)、配置管理、分布式鎖等分布式基礎(chǔ)服務(wù),并廣泛應(yīng)用于大型分布式系統(tǒng)如Hadoop、HBase、Kafka等開源系統(tǒng),例如HDFSNameNodeHA自動切換、HBase高可用、SparkStandalone模式下MasterHA機(jī)制都是通過ZooKeeper來實(shí)現(xiàn)的。8.HiveHive是一個(gè)基于Hadoop的數(shù)據(jù)倉庫工具,最早由Facebook開發(fā)并使用。Hive讓不熟悉MapReduce的開發(fā)人員直接編寫SQL語句來實(shí)現(xiàn)對大規(guī)模數(shù)據(jù)的統(tǒng)計(jì)分析操作,Hive可以將SQL語句轉(zhuǎn)換為MapReduce作業(yè),并提交到Hadoop集群上運(yùn)行。Hive大大降低了學(xué)習(xí)門檻,同時(shí)也提升了開發(fā)效率。9.PigPig與Hive類似,也是對大型數(shù)據(jù)集進(jìn)行分析和評估的工具,不過與Hive提供SQL接口不同的是,它提供了一種高層的、面向領(lǐng)域的抽象語言PigLatin,和SQL相比,PigLatin更加靈活,但學(xué)習(xí)成本稍高。10.ImpalaImpala由Cloudera公司開發(fā),提供了與存儲在HDFS、HBase上的海量數(shù)據(jù)進(jìn)行交互式查詢的SQL接口,其優(yōu)點(diǎn)是查詢非常迅速,其性能大幅領(lǐng)先于Hive,Impala并沒有基于MapReduce計(jì)算框架,這也是Impala可以大幅領(lǐng)先Hive的原因。11.MahoutMahout是一個(gè)機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘庫,它包含許多實(shí)現(xiàn),包括聚類、分類、推薦過濾等。12.FlumeFlume是由Cloudera提供的一個(gè)高可用、高可靠、分布式的海量日志采集、聚合和傳輸?shù)目蚣堋lume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù),同時(shí),F(xiàn)lume提供對數(shù)據(jù)進(jìn)行簡單處理并寫到各種數(shù)據(jù)接收方。13.SqoopSqoop是SQLtoHadoop的縮寫,主要用于關(guān)系數(shù)據(jù)庫和Hadoop之間的數(shù)據(jù)雙向交換??梢越柚鶶qoop完成關(guān)系型數(shù)據(jù)庫如MySQL、Oracle、PostgreSQL等到Hadoop生態(tài)系統(tǒng)中HDFS、HBase、Hive等的數(shù)據(jù)導(dǎo)入導(dǎo)出操作,整個(gè)導(dǎo)入導(dǎo)出過程都是由MapReduce計(jì)算框架實(shí)現(xiàn),非常高效。Sqoop項(xiàng)目開始于2009年,最早是作為Hadoop的一個(gè)第三方模塊存在,后來為了讓使用者能夠快速部署,也為了讓開發(fā)人員能夠更快速地迭代開發(fā),Sqoop就獨(dú)立成為一個(gè)Apache項(xiàng)目。14.KafkaKafka是一種高吞吐量的、分布式的發(fā)布訂閱消息系統(tǒng),可以處理消費(fèi)者在網(wǎng)站中的所有動作流數(shù)據(jù)。Kafka最初由LinkedIn公司開發(fā),于2010年貢獻(xiàn)給Apache基金會,并于2012年成為Apache頂級開源項(xiàng)目,它采用Scala和Java語言編寫,是一個(gè)分布式、支持分區(qū)的、多副本的、基于ZooKeeper協(xié)調(diào)的分布式消息系統(tǒng),它適合應(yīng)用于以下兩大類別場景:構(gòu)造實(shí)時(shí)流數(shù)據(jù)管道,在系統(tǒng)或應(yīng)用之間可靠地獲取數(shù)據(jù);構(gòu)建實(shí)時(shí)流式應(yīng)用程序,對這些流數(shù)據(jù)進(jìn)行轉(zhuǎn)換。15.AmbariApacheAmbari是一個(gè)基于Web的工具,支持ApacheHadoop集群的安裝、部署、配置和管理,目前已支持大多數(shù)Hadoop組件,包括HDFS、MapReduce、Hive、Pig、HBase、ZooKeeper、Oozie、Sqoop等。Ambari由Hortonworks主導(dǎo)開發(fā),具有Hadoop集群自動化安裝、中心化管理、集群監(jiān)控、報(bào)警等功能,使得安裝集群從幾天縮短在幾小時(shí)以內(nèi),運(yùn)維人員也從數(shù)十人降低到幾人以內(nèi),極大的提高集群管理的效率。1.4Hadoop體系架構(gòu)Hadoop集群采用主從架構(gòu)(Master/Slave),NameNode與ResourceManager為Master,DataNode與NodeManager為Slaves,守護(hù)進(jìn)程N(yùn)ameNode和DataNode負(fù)責(zé)完成HDFS的工作,守護(hù)進(jìn)程ResourceManager和NodeManager則負(fù)責(zé)完成YARN的工作。NameNodeResourceManagerDataNodeNodeManagerDataNodeNodeManagerDataNodeNodeManager…1.5部署和運(yùn)行Hadoop了解Hadoop的運(yùn)行環(huán)境和運(yùn)行模式規(guī)劃Hadoop集群準(zhǔn)備機(jī)器及軟件環(huán)境安裝和配置Hadoop關(guān)閉防火墻格式化文件系統(tǒng)啟動和驗(yàn)證Hadoop關(guān)閉Hadoop1.運(yùn)行環(huán)境操作系統(tǒng)(1)Windows:Hadoop支持Windows,但Windows操作系統(tǒng)本身不太適合作為服務(wù)器操作系統(tǒng)。(2)GNU/Linux:Hadoop的最佳運(yùn)行環(huán)境無疑是開源操作系統(tǒng)Linux,Linux發(fā)行版本眾多,常見的有CentOS、Ubuntu、RedHat、Debian、Fedora、SUSE、openSUSE等。Java環(huán)境Hadoop使用Java語言編寫,因此它的運(yùn)行環(huán)境需要Java環(huán)境的支持。Hadoop3.x需要Java8,Hadoop2.7及以后版本需要Java7或Java8,Hadoop2.6及早期版本需要Java6。SSHHadoop集群若想運(yùn)行,其運(yùn)行平臺Linux必須安裝SSH,且sshd服務(wù)必須運(yùn)行,只有這樣,才能使用Hadoop腳本管理遠(yuǎn)程Hadoop守護(hù)進(jìn)程。2.運(yùn)行模式單機(jī)模式(Local/StandaloneMode)只在一臺計(jì)算機(jī)上運(yùn)行,不需任何配置,在這種模式下,Hadoop所有的守護(hù)進(jìn)程都變成了一個(gè)Java進(jìn)程,存儲采用本地文件系統(tǒng),沒有采用分布式文件系統(tǒng)HDFS。偽分布模式(Pseudo-DistributedMode)只在一臺計(jì)算機(jī)上運(yùn)行,在這種模式下,Hadoop所有守護(hù)進(jìn)程都運(yùn)行在一個(gè)節(jié)點(diǎn)上,在一個(gè)節(jié)點(diǎn)上模擬了一個(gè)具有Hadoop完整功能的微型集群,存儲采用分布式文件系統(tǒng)HDFS,但是HDFS的名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)都位于同一臺計(jì)算機(jī)上。全分布模式(Fully-DistributedMode)在多臺計(jì)算機(jī)上運(yùn)行,在這種模式下,Hadoop的守護(hù)進(jìn)程運(yùn)行在多個(gè)節(jié)點(diǎn)上,形成一個(gè)真正意義上的集群,存儲采用分布式文件系統(tǒng)HDFS,且HDFS的名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)位于不同計(jì)算機(jī)上。3.Hadoop配置文件Hadoop配置文件很多,配置文件位于$HADOOP_HOME/etc/hadoop,偽分布模式和全分布模式下的Hadoop集群所需修改的配置文件有差異。文件名稱格式描述hadoop-env.shBash腳本記錄運(yùn)行Hadoop要用的環(huán)境變量yarn-env.shBash腳本記錄運(yùn)行YARN要用的環(huán)境變量(覆蓋hadoop-env.sh中設(shè)置的變量)mapred-env.shBash腳本記錄運(yùn)行MapReduce要用的環(huán)境變量覆蓋hadoop-env.sh中設(shè)置的變量)core-site.xmlHadoop配置XMLHadoopCore的配置項(xiàng),包括HDFS、MapReduce和YARN常用的I/O設(shè)置等hdfs-site.xmlHadoop配置XMLHDFS守護(hù)進(jìn)程的配置項(xiàng),包括NameNode、SecondaryNameNode、DataNode等yarn-site.xmlHadoop配置XMLYARN守護(hù)進(jìn)程的配置項(xiàng),包括ResourceManager、NodeManager等mapred-site.xmlHadoop配置XMLMapReduce守護(hù)進(jìn)程的配置項(xiàng),包括JobHistoryServerslaves純文本運(yùn)行DataNode和NodeManager的從節(jié)點(diǎn)機(jī)器列表,每行1個(gè)主機(jī)名pertiesJava屬性控制如何在Hadoop上發(fā)布度量的屬性pertiesJava屬性系統(tǒng)日志文件、NameNode審計(jì)日志、任務(wù)JVM進(jìn)程的任務(wù)日志的屬性hadoop-policy.xmlHadoop配置XML安全模式下運(yùn)行Hadoop時(shí)的訪問控制列表的配置項(xiàng)啟動Hadoop啟動全分布模式Hadoop集群的守護(hù)進(jìn)程,只需在主節(jié)點(diǎn)master上依次執(zhí)行以下3條命令即可。start-dfs.shstart-yarn.shmr-jobhistory-daemon.shstarthistoryserver驗(yàn)證Hadoop方法1:jps查看進(jìn)程start-dfs.sh命令會在節(jié)點(diǎn)上啟動NameNode、DataNode和SecondaryNameNode服務(wù)。start-yarn.sh命令會在節(jié)點(diǎn)上啟動ResourceManager、NodeManager服務(wù)。mr-jobhistory-daemon.sh命令會在節(jié)點(diǎn)上啟動JobHistoryServer服務(wù)。請注意,即使對應(yīng)的守護(hù)進(jìn)程沒有啟動成功,Hadoop也不會在控制臺顯示錯(cuò)誤消息,讀者可以利用jps命令一步一步查詢,逐步核實(shí)對應(yīng)的進(jìn)程是否啟動成功。方法2:查看WebUIHDFSWebUI的默認(rèn)地址為http://NameNodeIP:50070。YARNWebUI的默認(rèn)地址為http://ResourceManagerIP:8088。MapReduceWebUI的默認(rèn)地址為http://JobHistoryServerIP:19888。方法3:運(yùn)行MapReduce程序——WordCount啟動和驗(yàn)證Hadoop關(guān)閉Hadoop關(guān)閉全分布模式Hadoop集群的命令與啟動命令次序相反,只需在主節(jié)點(diǎn)master上依次執(zhí)行以下3條命令即可關(guān)閉Hadoop。mr-jobhistory-daemon.shstophistoryserverstop-yarn.shstop-dfs.sh執(zhí)行mr-jobhistory-daemon.shstophistoryserver時(shí),其*historyserver.pid文件消失;執(zhí)行stop-yarn.sh時(shí),*resourcemanager.pid和*nodemanager.pid文件依次消失;stop-dfs.sh,*namenode.pid、*datanode.pid、*secondarynamenode.pid文件依次消失關(guān)閉Hadoop【課后作業(yè)】在線測試完成云班課活動“在線測試1-實(shí)驗(yàn)1部署全分布模式Hadoop集群”。實(shí)驗(yàn)報(bào)告提交實(shí)驗(yàn)報(bào)告1至云班課活動“實(shí)驗(yàn)報(bào)告1-實(shí)驗(yàn)項(xiàng)目1部署全分布模式Hadoop集群”?!緟⒖嘉墨I(xiàn)】[1]WHITET.Hadoop權(quán)威指南:大數(shù)據(jù)的存儲與分析[M].4版.王海,華東,劉喻,等譯.北京:清華大學(xué)出版社,2017.[2]DOUGLASE.Hadoop2Quick-StartGuide:LearntheEssentialsofBigDataComputingintheApacheHadoop2Ecosystem[M].NewJersey:Addison-WesleyProfessional,2015.[3]VMwareWorkstation[EB/OL]./products/workstation-pro.html.[4]TheCentOSProject.CentOSDownload[EB/OL]./download.[5]Oracle.JavaSEDownloads[EB/OL]./technetwork/java/javase/downloads/index.html.[6]ApacheHadoop[EB/OL]./.[7]GitHub-ApacheHadoop[EB/OL]./apache/hadoop[8]ApacheSoftwareFoundation.ApacheHadoopDownload[EB/OL]./releases.html.[9]ApacheSoftwareFoundation.ApacheHadoopWIKIConfluence:HadoopJavaVersions[EB/OL].[2019-7-9]./confluence/display/HADOOP2/HadoopJavaVersions.[10]ApacheSoftwareFoundation.ApacheHadoop2.9.2-Hadoop:SettingupaSingleNodeCluster[EB/OL].[2018-11-13]./docs/r2.9.2/hadoop-project-dist/hadoop-common/SingleCluster.html.[11]ApacheSoftwareFoundation.ApacheHadoop2.9.2-HadoopClusterSetup[EB/OL].[2018-11-13]./docs/r2.9.2/hadoop-project-dist/hadoop-common/ClusterSetup.html.[12]Cloudera.ClouderaManager:HadoopAdministrationtool[EB/OL]./products/product-components/cloudera-manager.html.THANKSHadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程

實(shí)驗(yàn)2準(zhǔn)備:分布式文件系統(tǒng)HDFS實(shí)驗(yàn)2知識地圖實(shí)驗(yàn)2實(shí)戰(zhàn)HDFS一、實(shí)驗(yàn)?zāi)康?.理解HDFS體系架構(gòu)。2.理解HDFS文件存儲原理和數(shù)據(jù)讀寫過程。3.熟練掌握HDFSWebUI界面的使用。4.熟練掌握HDFSShell常用命令的使用。5.熟練掌握HDFS項(xiàng)目開發(fā)環(huán)境的搭建。6.掌握使用HDFSJavaAPI編寫HDFS文件操作程序。二、實(shí)驗(yàn)環(huán)境本實(shí)驗(yàn)所需的軟件環(huán)境包括全分布模式Hadoop集群、Eclipse。三、實(shí)驗(yàn)內(nèi)容1.啟動全分布模式Hadoop集群,守護(hù)進(jìn)程包括NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager和JobHistoryServer。2.查看HDFSWeb界面。3.練習(xí)HDFSShell文件系統(tǒng)命令和系統(tǒng)管理命令。4.在Hadoop集群主節(jié)點(diǎn)上搭建HDFS開發(fā)環(huán)境Eclipse。5.使用HDFSJavaAPI編寫HDFS文件操作程序,實(shí)現(xiàn)上傳本地文件到HDFS的功能,采用本地執(zhí)行和集群執(zhí)行的兩種執(zhí)行方式測試,觀察結(jié)果。6.使用HDFSJavaAPI編寫HDFS文件操作程序,實(shí)現(xiàn)查看上傳文件在HDFS集群中位置的功能,采用本地執(zhí)行和集群執(zhí)行的兩種執(zhí)行方式測試,觀察結(jié)果。7.關(guān)閉全分布模式Hadoop集群。實(shí)驗(yàn)2準(zhǔn)備:分布式文件系統(tǒng)HDFS2.1初識HDFS2.2HDFS體系架構(gòu)2.3HDFS文件存儲原理2.4HDFS接口2.1初識HDFSHDFS(HadoopDistributedFileSystem)是Hadoop分布式文件系統(tǒng),是Hadoop三大核心之一,是針對谷歌文件系統(tǒng)GFS(GoogleFileSystem)的開源實(shí)現(xiàn)(TheGoogleFileSystem,2003)。HDFS是一個(gè)具有高容錯(cuò)性的文件系統(tǒng),適合部署在廉價(jià)的機(jī)器上,HDFS能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。大數(shù)據(jù)處理框架如MapReduce、Spark等要處理的數(shù)據(jù)源大部分都存儲在HDFS上,Hive、HBase等框架的數(shù)據(jù)通常也存儲在HDFS上。簡而言之,HDFS為大數(shù)據(jù)的存儲提供了保障。2.2HDFS體系架構(gòu)HDFS采用Master/Slave架構(gòu)模型,一個(gè)HDFS集群包括一個(gè)NameNode和多個(gè)DataNode。名稱節(jié)點(diǎn)NameNode為主節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn)DataNode為從節(jié)點(diǎn),文件被劃分為一系列的數(shù)據(jù)塊(Block)存儲在從節(jié)點(diǎn)DataNode上,NameNode是中心服務(wù)器,不存儲數(shù)據(jù),負(fù)責(zé)管理文件系統(tǒng)的名字空間(namespace)以及客戶端對文件的訪問。2.2HDFS體系架構(gòu)NameNodeNameNode運(yùn)行在日常硬件上,通常只有一個(gè),是整個(gè)文件系統(tǒng)的管理節(jié)點(diǎn)。它維護(hù)著整個(gè)文件系統(tǒng)的文件目錄樹,包括文件/目錄的元數(shù)據(jù)和每個(gè)文件對應(yīng)的數(shù)據(jù)塊列表,它負(fù)責(zé)接收用戶的操作請求。DataNodeDataNode也運(yùn)行在日常硬件上,通常有多個(gè),它為HDFS提供真實(shí)文件數(shù)據(jù)的存儲服務(wù)。HDFS數(shù)據(jù)存儲在DataNode上,數(shù)據(jù)塊的創(chuàng)建、復(fù)制和刪除都在DataNode上執(zhí)行。DataNode將HDFS數(shù)據(jù)以文件的形式存儲在本地的文件系統(tǒng)中,但并不知道有關(guān)HDFS文件的信息。DataNode把每個(gè)HDFS數(shù)據(jù)塊存儲在本地文件系統(tǒng)的一個(gè)單獨(dú)的文件中,并不在同一個(gè)目錄創(chuàng)建所有的文件,實(shí)際上,它用試探的方法來確定每個(gè)目錄的最佳文件數(shù)目,并且在適當(dāng)?shù)臅r(shí)候創(chuàng)建子目錄。在同一個(gè)目錄中創(chuàng)建所有的本地文件并不是最優(yōu)的選擇,這是因?yàn)楸镜匚募到y(tǒng)可能無法高效地在單個(gè)目錄中支持大量的文件。當(dāng)一個(gè)DataNode啟動時(shí),它會掃描本地文件系統(tǒng),產(chǎn)生一個(gè)這些本地文件對應(yīng)的所有HDFS數(shù)據(jù)塊的列表,然后作為報(bào)告發(fā)送到NameNode,這個(gè)報(bào)告就是塊狀態(tài)報(bào)告。2.3HDFS文件存儲原理1.Block2.Block副本管理策略3.數(shù)據(jù)讀取4.數(shù)據(jù)寫入1.BlockHDFS中的數(shù)據(jù)以文件塊Block的形式存儲,Block是最基本的存儲單位,每次讀寫的最小單元是一個(gè)Block。對于文件內(nèi)容而言,一個(gè)文件的長度大小是N,那么從文件的0偏移開始,按照固定的大小,順序?qū)ξ募M(jìn)行劃分并編號,劃分好的每一個(gè)塊稱一個(gè)Block。Hadoop2.0中默認(rèn)Block大小是128MB,以一個(gè)N=256MB的文件為例,被切分成256/128=2個(gè)Block。不同于普通文件系統(tǒng),HDFS中如果一個(gè)文件小于一個(gè)數(shù)據(jù)塊的大小,并不占用整個(gè)數(shù)據(jù)塊存儲空間。Block的大小可以根據(jù)實(shí)際需求進(jìn)行配置,可以通過HDFS配置文件hdfs-site.xml中的參數(shù)dfs.blocksize來定義塊大小,但要注意,數(shù)字必須是2K,文件的大小可以不是Block大小的整數(shù)倍,這時(shí)最后一個(gè)塊可能存在剩余。例如,一個(gè)文件大小是260MB,在Hadoop2.0中占用三個(gè)塊,第三個(gè)塊只使用了4MB。2.Block副本管理策略HDFS采用多副本方式對數(shù)據(jù)進(jìn)行冗余存儲,通常一個(gè)數(shù)據(jù)塊的多個(gè)副本會被分布到不同的DataNode上。HDFS提供可靠的算法實(shí)現(xiàn)在分布式環(huán)境中存儲大量數(shù)據(jù)。簡單來說,每個(gè)數(shù)據(jù)塊Block都存在副本以提高容錯(cuò)性。默認(rèn)情況下每個(gè)塊存在3個(gè)副本。數(shù)據(jù)塊的信息會定期由DataNode報(bào)送給NameNode,任何時(shí)候,當(dāng)NameNode發(fā)現(xiàn)一個(gè)塊的副本個(gè)數(shù)少于3個(gè)或者多于3個(gè)時(shí)都會進(jìn)行補(bǔ)充或者刪除。副本放置的基本原則是保證并非所有的副本都在同一個(gè)機(jī)架(Rack)上。這樣放置的好處在于提供高容錯(cuò)性的同時(shí)降低延時(shí),注意一個(gè)Rack可能包含多個(gè)DataNode,而數(shù)據(jù)分布在不同DataNode可以提高數(shù)據(jù)讀寫并發(fā)。對于多于3個(gè)副本的情況,其它副本將會隨機(jī)分布在不同DataNode,同時(shí)保證同一個(gè)機(jī)架中最多存在兩個(gè)副本。可以通過配置文件hdfs-site.xml中的參數(shù)dfs.replication來定義Block副本數(shù)。2.Block副本管理策略Block:123機(jī)架1121機(jī)架2232機(jī)架3331Block副本在機(jī)架中的放置策略Hadoop集群核心交換機(jī)1核心交換機(jī)k機(jī)架1機(jī)架2單層交換機(jī)單層交換機(jī)計(jì)算機(jī)1計(jì)算機(jī)2計(jì)算機(jī)1計(jì)算機(jī)2…………機(jī)架N單層交換機(jī)計(jì)算機(jī)1計(jì)算機(jī)2…Hadoop集群中機(jī)架邏輯結(jié)構(gòu)3.數(shù)據(jù)讀取HDFS的真實(shí)數(shù)據(jù)分散存儲在DataNode上,但是讀取數(shù)據(jù)時(shí)需要先經(jīng)過NameNode。HDFS數(shù)據(jù)讀取的基本過程為:首先客戶端連接到NameNode詢問某個(gè)文件的元數(shù)據(jù)信息,NameNode返回給客戶一個(gè)包含該文件各個(gè)塊位置信息(存儲在哪個(gè)DataNode)的列表;然后,客戶端直接連接對應(yīng)DataNode來并行讀取塊數(shù)據(jù);最后,當(dāng)客戶得到所有塊后,再按照順序進(jìn)行組裝,得到完整文件。為了提高物理傳輸速度,NameNode在返回塊的位置時(shí),優(yōu)先選擇距離客戶更近的DataNode。3.數(shù)據(jù)讀取客戶端JVM1352數(shù)據(jù)節(jié)點(diǎn)DataNode235

5312客戶端DistributedFileSytemFSDataInputStreamDFSInputStream名稱節(jié)點(diǎn)NameNode2:獲取數(shù)據(jù)塊信息4:讀取請求7:關(guān)閉文件3:生成對象實(shí)例5:讀取數(shù)據(jù)6:讀取數(shù)據(jù)元數(shù)據(jù)(名稱,塊個(gè)數(shù),地址,……)1:打開文件6:讀取數(shù)據(jù)…數(shù)據(jù)節(jié)點(diǎn)DataNode數(shù)據(jù)節(jié)點(diǎn)DataNodeHDFS數(shù)據(jù)讀取過程4.數(shù)據(jù)寫入HDFS的設(shè)計(jì)遵循“一次寫入,多次讀取”的原則,所有數(shù)據(jù)只能添加不能更新。數(shù)據(jù)會被劃分為等尺寸的塊寫入不同的DataNode中。每個(gè)塊通常保存指定數(shù)量的副本(默認(rèn)3個(gè))。HDFS數(shù)據(jù)寫入基本過程為:客戶端向NameNode發(fā)送文件寫請求,NameNode給客戶分配寫權(quán)限,并隨機(jī)分配塊的寫入地址——DataNode的IP,兼顧副本數(shù)量和塊Rack自適應(yīng)算法,例如副本因子是3,則每個(gè)塊會分配到三個(gè)不同的DataNode,為了提高傳輸效率,客戶端只會向其中一個(gè)DataNode復(fù)制一個(gè)副本,另外兩個(gè)副本則由DataNode傳輸?shù)较噜廌ataNode。4.數(shù)據(jù)寫入客戶端JVM1352數(shù)據(jù)節(jié)點(diǎn)DataNode235

5312客戶端DistributedFileSytemFSDataOutputStreamDFSOutputStream2:創(chuàng)建文件元數(shù)據(jù)3:寫入數(shù)據(jù)6:關(guān)閉文件4:寫入數(shù)據(jù)包1:創(chuàng)建文件請求5:接收確認(rèn)包44557:寫操作完成元數(shù)據(jù)(名稱,塊個(gè)數(shù),地址,……)名稱節(jié)點(diǎn)NameNode數(shù)據(jù)節(jié)點(diǎn)DataNode數(shù)據(jù)節(jié)點(diǎn)DataNodeHDFS數(shù)據(jù)寫入過程4.數(shù)據(jù)寫入數(shù)據(jù)寫入可以看作是一個(gè)流水線pipeline過程,具體來說,客戶端收到NameNode發(fā)送的塊存儲位置DataNode列表后,將做如下工作。(1)選擇DataNode列表中的第一個(gè)DataNode1,通過IP地址建立TCP連接。(2)客戶端通知DataNode1準(zhǔn)備接收塊數(shù)據(jù),同時(shí)發(fā)送后續(xù)DataNode的IP地址給DataNode1,副本隨后會拷貝到這些DataNode。(3)DataNode1連接DataNode2,并通知DataNode2連接DataNode3,前一個(gè)DataNode發(fā)送副本數(shù)據(jù)給后一個(gè)DataNode,依次類推。(4)ack確認(rèn)消息遵從相反的順序,即DataNode3收到完整塊副本后返回確認(rèn)給DataNode2,DataNode2收到完整塊副本后返回確認(rèn)給DataNode1。而DataNode1最后通知客戶端所有數(shù)據(jù)塊已經(jīng)成功復(fù)制。對于3個(gè)副本,DataNode1會發(fā)送3個(gè)ack給客戶端表示3個(gè)DataNode都成功接收。隨后,客戶端通知NameNode,完整文件寫入成功,NameNode更新元數(shù)據(jù)。(5)當(dāng)客戶端接到通知流水線已經(jīng)建立完成后,將會準(zhǔn)備發(fā)送數(shù)據(jù)塊到流水線中,然后逐個(gè)數(shù)據(jù)塊按序在流水線中傳輸。這樣以來,客戶端只需要發(fā)送一次,所有備份將在不同DataNode之間自動完成,提高了傳輸效率。2.4HDFS接口1.HDFSWebUI2.HDFSShell3.HDFSJavaAPI1.HDFSWebUIHDFSWebUI主要面向管理員,提供服務(wù)器基礎(chǔ)統(tǒng)計(jì)信息和文件系統(tǒng)運(yùn)行狀態(tài)的查看功能,不支持配置更改操作。從該頁面上,管理員可以查看當(dāng)前文件系統(tǒng)中各個(gè)節(jié)點(diǎn)的分布信息,瀏覽名稱節(jié)點(diǎn)上的存儲、登錄等日志,以及下載某個(gè)數(shù)據(jù)節(jié)點(diǎn)上某個(gè)文件的內(nèi)容。HDFSWebUI地址為http://NameNodeIP:50070。1.HDFSWebUI1.HDFSWebUI2.HDFSShell1)HDFS文件系統(tǒng)命令2)HDFS系統(tǒng)管理命令1)HDFS文件系統(tǒng)命令hadoopfs語法:hadoopfs[genericoptions]“hadoopfs”

使用面最廣,可以操作任何文件系統(tǒng),比如本地文件、HDFS文件、HFTP文件、S3文件系統(tǒng)等。hdfsdfs語法:hdfsdfs[genericoptions]“hdfsdfs”則是專門針對HDFS文件系統(tǒng)的操作?!癶adoopfs”命令幫助(部分)Usage:hadoopfs[genericoptions] [-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][-d]<localsrc>...<dst>] [-copyToLocal[-f][-p][-ignoreCrc][-crc]<src>...<localdst>] [-count[-q][-h][-v][-t[<storagetype>]][-u][-x]<path>...] [-cp[-f][-p|-p[topax]][-d]<src>...<dst>] [-createSnapshot<snapshotDir>[<snapshotName>]] [-deleteSnapshot<snapshotDir><snapshotName>] [-df[-h][<path>...]] [-du[-s][-h][-x]<path>...] [-expunge] [-find<path>...<expression>...] [-get[-f][-p][-ignoreCrc][-crc]<src>...<localdst>] [-getfacl[-R]<path>] [-getfattr[-R]{-nname|-d}[-een]<path>] [-getmerge[-nl][-skip-empty-file]<src><localdst>] [-help[cmd...]] [-ls[-C][-d][-h][-q][-R][-t][-S][-r][-u][<path>...]] [-mkdir[-p]<path>...] [-moveFromLocal<localsrc>...<dst>] [-moveToLocal<src><localdst>] [-mv<src>...<dst>] [-put[-f][-p][-l][-d]<localsrc>...<dst>] [-renameSnapshot<snapshotDir><oldName><newName>] [-rm[-f][-r|-R][-skipTrash][-safely]<src>...] [-rmdir[--ignore-fail-on-non-empty]<dir>...] [-setfacl[-R][{-b|-k}{-m|-x<acl_spec>}<path>]|[--set<acl_spec><path>]] [-setfattr{-nname[-vvalue]|-xname}<path>] [-setrep[-R][-w]<rep><path>...] [-stat[format]<path>...] [-tail[-f]<file>] [-test-[defsz]<path>] [-text[-ignoreCrc]<src>...] [-touchz<path>...] [-truncate[-w]<length><path>...] [-usage[cmd...]]HDFS文件系統(tǒng)命令說明(部分)命令選項(xiàng)功能-ls顯示文件的元數(shù)據(jù)信息或者目錄包含的文件列表信息-mv移動HDFS文件到指定位置-cp將文件從源路徑復(fù)制到目標(biāo)路徑-rm刪除文件,“-rm-r”或者“-rm-R”可以遞歸刪除文件夾,文件夾可以包含子文件夾和子文件-rmdir刪除空文件夾,注意:如果文件夾非空,則刪除失敗-put從本地文件系統(tǒng)復(fù)制單個(gè)或多個(gè)源路徑上傳到HDFS,同時(shí)支持從標(biāo)準(zhǔn)輸入讀取源文件內(nèi)容后寫入目標(biāo)位置-get復(fù)制源路徑指定的文件到本地文件系統(tǒng)目標(biāo)路徑指定的文件或文件夾-cat將指定文件內(nèi)容輸出到標(biāo)準(zhǔn)輸出stdout-mkdir創(chuàng)建指定目錄-setrep改變文件的副本系數(shù),選項(xiàng)-R用于遞歸改變目錄下所有文件的副本系數(shù)選項(xiàng)-w表示等待副本操作結(jié)束才退出命令2)HDFS系統(tǒng)管理命令HDFS系統(tǒng)管理命令的入口是“hdfsdfsadmin”?!癶dfsdfsadmin”命令幫助(部分)Usage:hdfsdfsadminNote:AdministrativecommandscanonlyberunastheHDFSsuperuser. [-report[-live][-dead][-decommissioning][-enteringmaintenance][-inmaintenance]] [-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<namenode|datanode><host:ipc_port><start|status|properties>] [-printTopology] [-refreshNamenodesdatanode_host:ipc_port] [-getVolumeReportdatanode_host:ipc_port] [-deleteBlockPooldatanode_host:ipc_portblockpoolId[force]] [-setBalancerBandwidth<bandwidthinbytespersecond>] [-getBalancerBandwidth<datanode_host:ipc_port>] [-fetchImage<localdirectory>] [-allowSnapshot<snapshotDir>] [-disallowSnapshot<snapshotDir>] [-shutdownDatanode<datanode_host:ipc_port>[upgrade]] [-evictWriters<datanode_host:ipc_port>] [-getDatanodeInfo<datanode_host:ipc_port>] [-metasavefilename] [-triggerBlockReport[-incremental]<datanode_host:ipc_port>] [-listOpenFiles] [-help[cmd]]3.HDFSJavaAPIHDFS使用Java語言編寫,所以提供了豐富了Java編程接口供開發(fā)人員調(diào)用,當(dāng)然HDFS同時(shí)支持其它語言如C++、Python等編程接口,但它們都沒有Java接口方便。凡是使用Shell命令可以完成的功能,都可以使用相應(yīng)JavaAPI來實(shí)現(xiàn),甚至使用API可以完成Shell命令不支持的功能。HDFSJavaAPI常用類類名說明org.apache.hadoop.fs.FileSystem通用文件系統(tǒng)基類,用于與HDFS文件系統(tǒng)交互,編寫的HDFS程序都需要重寫FileSystem類,通過該類,可以方便地像操作本地文件系統(tǒng)一樣操作HDFS集群文件org.apache.hadoop.fs.FSDataInputStream文件輸入流,用于讀取HDFS文件org.apache.hadoop.fs.FSDataOutputStream文件輸出流,向HDFS順序?qū)懭霐?shù)據(jù)流org.apache.hadoop.fs.Path文件與目錄定位類,用于定義HDFS集群中指定的目錄與文件絕對或相對路徑org.apache.hadoop.fs.FileStatus文件狀態(tài)顯示類,可以獲取文件與目錄的元數(shù)據(jù)、長度、塊大小、所屬用戶、編輯時(shí)間等信息;同時(shí)可以設(shè)置文件用戶、權(quán)限等內(nèi)容關(guān)于HDFSAPI的更多信息讀者請參考官網(wǎng)/docs/r2.9.2/api/index.html。HDFSJavaAPI【課后作業(yè)】在線測試完成云班課活動“在線測試2-實(shí)驗(yàn)2實(shí)戰(zhàn)HDFS”。實(shí)驗(yàn)報(bào)告提交實(shí)驗(yàn)報(bào)告2至云班課活動“實(shí)驗(yàn)報(bào)告2-實(shí)驗(yàn)項(xiàng)目2實(shí)戰(zhàn)HDFS”?!緟⒖嘉墨I(xiàn)】[1]蔡斌.Hadoop技術(shù)內(nèi)幕:深入解析HadoopCommon和HDFS架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理[M].北京:機(jī)械工業(yè)出版社,2013.[2]GHEMAWATS,GOBIOFFH,LEUNGS-T.TheGooglefilesystem[C]//SOSP'03ProceedingsofthenineteenthACMsymposiumonOperatingsystemsprinciples,2003,37(5):29-43.[3]ApacheSoftwareFoundation.ApacheHadoop2.9.2-HDFSArchitecture[EB/OL].[2018-11-13]./docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html.[4]ApacheSoftwareFoundation.ApacheHadoop2.9.2-HDFSUsersGuide[EB/OL].[2018-11-13]./docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html.[5]ApacheSoftwareFoundation.ApacheHadoop2.9.2-HDFSCommandsGuide[EB/OL].[2018-11-13]./docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html.[6]ApacheSoftwareFoundation.ApacheHadoop2.9.2-ApacheHadoopMain2.9.2API[EB/OL].[2018-11-13]./docs/r2.9.2/api/index.html.[7]ApacheSoftwareFoundation.ApacheHadoop2.9.2-HDFSHighAvailabilityUsingtheQuorumJournalManager[EB/OL].[2018-11-13]./docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html.THANKSHadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程

實(shí)驗(yàn)項(xiàng)目3準(zhǔn)備:分布式計(jì)算框架MapReduce實(shí)驗(yàn)3知識地圖實(shí)驗(yàn)3MapReduce編程一、實(shí)驗(yàn)?zāi)康?.理解MapReduce編程思想。2.理解MapReduce作業(yè)執(zhí)行流程。3.理解MR-App編寫步驟,掌握使用MapReduceJavaAPI進(jìn)行MapReduce基本編程,熟練掌握如何在Hadoop集群上運(yùn)行MR-App并查看運(yùn)行結(jié)果。4.熟練掌握MapReduceWeb界面的使用。5.掌握MapReduceShell常用命令的使用。二、實(shí)驗(yàn)環(huán)境本實(shí)驗(yàn)所需的軟件環(huán)境包括全分布模式Hadoop集群、Eclipse。三、實(shí)驗(yàn)內(nèi)容1.啟動全分布模式Hadoop集群,守護(hù)進(jìn)程包括NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager和JobHistoryServer。2.在Hadoop集群主節(jié)點(diǎn)上搭建MapReduce開發(fā)環(huán)境Eclipse。3.查看Hadoop自帶的MR-App單詞計(jì)數(shù)源代碼WordCount.java,在Eclipse項(xiàng)目MapReduceExample下建立新包c(diǎn)om.xijing.mapreduce,模仿內(nèi)置的WordCount示例,自己編寫一個(gè)WordCount程序,最后打包成JAR形式并在Hadoop集群上運(yùn)行該MR-App,查看運(yùn)行結(jié)果。4分別在自編MapReduce程序WordCount運(yùn)行過程中和運(yùn)行結(jié)束后查看MapReduceWeb界面。5.分別在自編MapReduce程序WordCount運(yùn)行過程中和運(yùn)行結(jié)束后練習(xí)MapReduceShell常用命令。6.關(guān)閉Hadoop集群。實(shí)驗(yàn)3準(zhǔn)備:分布式計(jì)算框架MapReduce3.1MapReduce編程思想3.2MapReduce體系架構(gòu)3.3MapReduce作業(yè)執(zhí)行流程3.4MapReduce數(shù)據(jù)類型與格式3.5MapReduce接口3.6其它主流分布式計(jì)算框架3.1MapReduce編程思想移動計(jì)算比移動數(shù)據(jù)更劃算Google論文分而治之3.1MapReduce編程思想MapReduce是Hadoop生態(tài)中的一款分布式計(jì)算框架,它可以讓不熟悉分布式計(jì)算的人員也能編寫出優(yōu)秀的分布式系統(tǒng),因此可以讓開發(fā)人員將精力專注到業(yè)務(wù)邏輯本身。MapReduce采用“分而治之”的核心思想,可以先將一個(gè)大型任務(wù)拆分成若干個(gè)簡單的子任務(wù),然后將每個(gè)子任務(wù)交給一個(gè)獨(dú)立的節(jié)點(diǎn)去處理。當(dāng)所有節(jié)點(diǎn)的子任務(wù)都處理完畢后,再匯總所有子任務(wù)的處理結(jié)果,從而形成最終的結(jié)果。以“單詞統(tǒng)計(jì)”為例,如果要統(tǒng)計(jì)一個(gè)擁有海量單詞的詞庫,就可以先將整個(gè)詞庫拆分成若干個(gè)小詞庫,然后將各個(gè)小詞庫發(fā)送給不同的節(jié)點(diǎn)去計(jì)算,當(dāng)所有節(jié)點(diǎn)將分配給自己的小詞庫中的單詞統(tǒng)計(jì)完畢后,再將各個(gè)節(jié)點(diǎn)的統(tǒng)計(jì)結(jié)果進(jìn)行匯總,形成最終的統(tǒng)計(jì)結(jié)果。以上,“拆分”任務(wù)的過程稱為Map階段,“匯總”任務(wù)的過程稱為Reduce階段。3.1MapReduce編程思想節(jié)點(diǎn)3海量詞庫小詞庫小詞庫小詞庫統(tǒng)計(jì)部分單詞統(tǒng)計(jì)全部單詞Map階段Reduce階段節(jié)點(diǎn)1節(jié)點(diǎn)2統(tǒng)計(jì)部分單詞節(jié)點(diǎn)4節(jié)點(diǎn)5MapReduce執(zhí)行流程3.2MapReduce體系架構(gòu)舊版MapReduce(MapReduce1.0)采用的是典型的Master/Slave結(jié)構(gòu),Master表現(xiàn)為JobTracker進(jìn)程,而Slave表現(xiàn)為TaskTracker。

JobTrackerTaskTrackerClientClientTaskSchedulerMapTaskMapTaskReduceTask

TaskTrackerMapTaskMapTaskReduceTask

TaskTrackerMapTaskMapTaskReduceTaskMapReduce1.0體系架構(gòu)3.2MapReduce體系架構(gòu)MapReduce1.0架構(gòu)過于簡單,例如Master的任務(wù)過于集中,并且存在單點(diǎn)故障等問題。因此,MapReduce進(jìn)行了一次重要的升級,舍棄JobTracker和TaskTracker,而改用了ResourceManager進(jìn)程負(fù)責(zé)處理資源,并且使用ApplicationMaster進(jìn)程管理各個(gè)具體的應(yīng)用,用NodeManager進(jìn)程對各個(gè)節(jié)點(diǎn)的工作情況進(jìn)行監(jiān)聽。升級后的MapReduce稱為MapReduce2.0。3.2MapReduce體系架構(gòu)ResourceManagerNameNodeNodeManagerApplicationMasterDataNodeNodeManagerApplicationMasterDataNodeNodeManagerContainerDataNodeContainerNodeManagerContainerDataNodeNodeManagerContainerDataNodeNodeManagerContainerDataNodeClientClientMapReduce2.0執(zhí)行作業(yè)時(shí)體系架構(gòu)3.3MapReduce作業(yè)執(zhí)行流程最終結(jié)果<key,value>中間結(jié)果<key,List(value)>中間結(jié)果<key,value>輸入<key,value>加載文件最終結(jié)果<key,value>中間結(jié)果<key,List(value)>中間結(jié)果<key,value>輸入<key,value>寫入文件分布式文件系統(tǒng)(如HDFS)InputFormatSplitSplitSplitRRRRRRMapMapMapShuffleReduceOutputFormat節(jié)點(diǎn)1加載文件寫入文件InputFormatSplitSplitSplitRRRRRRMapMapMapShuffleReduceOutputFormat節(jié)點(diǎn)2分布式文件系統(tǒng)(如HDFS)3.3MapReduce作業(yè)執(zhí)行流程(1)InputFormatInputFormat模塊首先對輸入數(shù)據(jù)做預(yù)處理,比如驗(yàn)證輸入格式是否符合輸入定義;然后將輸入文件切分為邏輯上的多個(gè)InputSplit,InputSplit是MapReduce對文件進(jìn)行處理和運(yùn)算的輸入單位,并沒有對文件進(jìn)行實(shí)際切割;由于InputSplit是邏輯切分而非物理切分,所以還需要通過RecordReader(圖4-4中的RR)根據(jù)InputSplit中的信息來處理InputSplit中的具體記錄,加載數(shù)據(jù)并轉(zhuǎn)換為適合Map任務(wù)讀取的鍵值對<key,valule>,輸入給Map任務(wù)。(2)MapMap模塊會根據(jù)用戶自定義的映射規(guī)則,輸出一系列的<key,value>作為中間結(jié)果。(3)Shuffle為了讓Reduce可以并行處理Map的結(jié)果,需要對Map的輸出進(jìn)行一定的排序、分區(qū)、合并、歸并等操作,得到<key,List(value)>形式的中間結(jié)果,再交給對應(yīng)的Reduce進(jìn)行處理,這個(gè)過程叫做Shuffle。(4)ReduceReduce以一系列的<key,List(value)>中間結(jié)果作為輸入,執(zhí)行用戶定義的邏輯,輸出<key,valule>形式的結(jié)果給OutputFormat。(5)OutputFormatOutputFormat模塊會驗(yàn)證輸出目錄是否已經(jīng)存在以及輸出結(jié)果類型是否符合配置文件中的配置類型,如果都滿足,就輸出Reduce的結(jié)果到分布式文件系統(tǒng)。一個(gè)WordCount執(zhí)行過程的實(shí)例HDFS文件file.txtHelloWorldHelloHadoopHelloMapReduceInput<1,”HelloWorld”><2,”HelloHadoop”><3,”HelloMapReduce”>split<”Hello”,1><“World”,1><“Hello”,1><“Hadoop”,1><“Hello”,1><”MapReduce”,1>Map<“Hadoop”,1><”Hello”,<1,1,1>><”MapReduce”,1><“World”,1>Shuffle<“Hadoop”,1><”Hello”,3><”MapReduce”,1><“World”,1>ReduceHDFS文件(part-r-00000)Output3.4MapReduce數(shù)據(jù)類型與格式MapReduce使用了Text定義字符串,使用了IntWritable定義整型變量,而沒有使用Java內(nèi)置的String和int類型。這樣做主要是有兩個(gè)方面的原因:MapReduce是集群運(yùn)算,因此必然會在執(zhí)行期間進(jìn)行網(wǎng)絡(luò)傳輸,然而在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)必須是可序列化的類型。為了良好地匹配MapReduce內(nèi)部的運(yùn)行機(jī)制,MapReduce就專門設(shè)計(jì)了一套數(shù)據(jù)類型。MapReduce中常見數(shù)據(jù)類型數(shù)據(jù)類型說明IntWritable整型類型LongWritable長整型類型FloatWritable單精度浮點(diǎn)數(shù)類型DoubleWritable雙精度浮點(diǎn)數(shù)類型ByteWritable字節(jié)類型BooleanWritable布爾類型TextUTF-8格式存儲的文本類型NullWritable空對象3.4MapReduce數(shù)據(jù)類型與格式需要注意的是,這些數(shù)據(jù)類型的定義類都實(shí)現(xiàn)了WritableComparable接口,其源碼如下所示。publicabstractinterfaceWritableComparableextendsWritable,Comparable{...}可以發(fā)現(xiàn),WritableComparable繼承自Writable和Comparable接口。其中Writable就是MapReduce提供的序列化接口(類似于Java中的Serializable接口),源碼如下所示。publicabstractinterfaceorg.apache.hadoop.io.Writable{publicabstractvoidwrite(DataOutputoutput)throwsIOException;publicabstractvoidreadFields(DataInputinput)throwsjava.io.IOException;...}其中,write()用于將數(shù)據(jù)進(jìn)行序列化操作;readFields()用于將數(shù)據(jù)進(jìn)行反序列化操作。Comparable接口就是Java中的比較器,用于對數(shù)據(jù)集進(jìn)行排序操作。因此,如果我們要在MapReduce自定義一個(gè)數(shù)據(jù)類型,就需要實(shí)現(xiàn)Writable接口;如果還需要對自定義的數(shù)據(jù)類型進(jìn)行排序操作,就需要實(shí)現(xiàn)WritableComparable接口(或者分別實(shí)現(xiàn)Writable和Comparable接口)。3.5MapReduce接口1.MapReduceWebUI2.MapReduceShell3.MapReduceJavaAPI1.MapReduceWebUIMapReduceWebUI接口面向管理員??梢栽陧撁嫔峡吹揭呀?jīng)完成的所有MR-App執(zhí)行過程中的統(tǒng)計(jì)信息,該頁面只支持讀,不支持寫。MapReduceWebUI的默認(rèn)地址為http://JobHistoryServerIP:19888,可以查看MapReduce的歷史運(yùn)行情況。1.MapReduceWebUIMapReduce歷史情況2.MapReduceShellMapReduceShell接口面向MapReduce程序員。程序員通過Shell接口能夠向YARN集群提交MR-App,查看正在運(yùn)行的MR-App,甚至可以終止正在運(yùn)行的MR-App。MapReduceShell命令統(tǒng)一入口為:mapred,語法格式如下:mapred[--configconfdir][--loglevelloglevel]COMMAND讀者需要注意的是,若$HADOOP_HOME/bin未加入到系統(tǒng)環(huán)境變量PATH中,則需要切換到Hadoop安裝目錄下,輸入“bin/mapred”?!癿apred”幫助2.MapReduceShell1)用戶命令2)管理員命令1)用戶命令命令選項(xiàng)功能描述archive創(chuàng)建一個(gè)Hadoop檔案文件archive-logs將聚合日志合并到Hadoop檔案文件中classpath打印運(yùn)行MapReduce子命令所需的包路徑distcp遞歸拷貝文件或目錄job管理MapReduce作業(yè)pipes運(yùn)行Pipes任務(wù),此功能允許用戶使用C++語言編寫MapReduce程序queue查看JobQueue信息2)管理員命令命令選項(xiàng)功能描述historyserver啟動JobHistoryServer服務(wù)hsadminJobHistoryServer管理命令接口其中,命令“mapredhistoryserver”與啟動MapReduce的命令“mr-jobhistory-daemon.shstarthistoryserver”效果相同。關(guān)于MapReduceShell命令的完整說明,讀者請參考官方網(wǎng)站/docs/r2.9.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapredCommands.html。3.MapReduceJavaAPIMapReduceJavaAPI接口面向Java開發(fā)工程師。程序員可以通過該接口編寫MR-App用戶層代碼MRApplicationBusinessLogic?;赮ARN編寫的MR-App和基于MapReduce1.0編寫的MR-App編程步驟相同。MR-App稱為MapReduce應(yīng)用程序,標(biāo)準(zhǔn)YARN-App包含3部分:MRv2框架中的MRAppMaster、MRClient,加上用戶編寫的MRApplicationBusinessLogic(Mapper類和Reduce類),合稱為MR-App。3.MapReduceJavaAPIMR-App編寫步驟如下所示:(1)編寫MRApplicationBusinessLogic。自行編寫。(2)編寫MRApplicationMaster。無需編寫,Hadoop開發(fā)人員已編寫好MRAppMaster.java。(3)編寫MRApplicationClient。無需編寫,Hadoop開發(fā)人員已編寫好YARNRunner.java。其中,MRApplicationBusinessLogic編寫步驟如下:(1)確定<key,value>對。(2)定制輸入格式。(3)Mapper階段,其業(yè)務(wù)代碼需要繼承自org.apache.hadoop.mapreduce.Mapper類。(4)Reducer階段,其業(yè)務(wù)代碼需要繼承自org.apache.hadoop.mapreduce.Reducer類。(5)定制輸出格式。3.MapReduceJavaAPI編寫類后,在main方法里,按下述過程依次指向各類即可:(1)實(shí)例化配置文件類。(2)實(shí)例化Job類。(3)指向InputFormat類。(4)指向Mapper類。(5)指向Partitioner類。(6)指向Reducer類。(7)指向Outp

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論