版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
大數(shù)據(jù)平臺(tái)與編程第1章大數(shù)據(jù)技術(shù)概述第2章Hadoop概述第3章Hadoop分布式文件系統(tǒng)第4章HadoopMapReduce第5章Spark分布式計(jì)算框架第6章SparkRDD編程第7章Spark結(jié)構(gòu)化編程Dataframe第8章流數(shù)據(jù)模型第9章分布式消息隊(duì)列Kafka第10章SparkStreaming第11章ApacheFlink入門(mén)全套可編輯PPT課件第1章大數(shù)據(jù)技術(shù)概述全套可編輯PPT課件
大數(shù)據(jù)背景目錄
大數(shù)據(jù)體系結(jié)構(gòu)
Lambda架構(gòu)
本章小結(jié)
本章習(xí)題
重要大數(shù)據(jù)平臺(tái)簡(jiǎn)介大數(shù)據(jù)背景隨著機(jī)構(gòu)與企業(yè)積累的數(shù)據(jù)越來(lái)越多,大數(shù)據(jù)的價(jià)值開(kāi)始逐步體現(xiàn),大數(shù)據(jù)正成為提升產(chǎn)業(yè)競(jìng)爭(zhēng)力和創(chuàng)新商業(yè)模式的新途徑,在企業(yè)中得到了充分的應(yīng)用并實(shí)現(xiàn)了巨大的商業(yè)價(jià)值。2015年國(guó)務(wù)院向社會(huì)公布了《促進(jìn)大數(shù)據(jù)發(fā)展行動(dòng)綱要》,正式將大數(shù)據(jù)提升為國(guó)家級(jí)戰(zhàn)略。大數(shù)據(jù)背景《綱要》明確提出了大數(shù)據(jù)的基本概念:大數(shù)據(jù)是以容量大、類(lèi)型多、存取速度快、應(yīng)用價(jià)值高為主要特征的數(shù)據(jù)集合,正快速發(fā)展為對(duì)數(shù)量巨大、來(lái)源分散、格式多樣的數(shù)據(jù)進(jìn)行采集、存儲(chǔ)和關(guān)聯(lián)分析,從中發(fā)現(xiàn)新知識(shí)、創(chuàng)造新價(jià)值、提升新能力的新一代信息技術(shù)和服務(wù)業(yè)態(tài)?!毒V要》提到大數(shù)據(jù)在推動(dòng)經(jīng)濟(jì)轉(zhuǎn)型發(fā)展,重塑?chē)?guó)家競(jìng)爭(zhēng)優(yōu)勢(shì),以及提升政府治理能力等方面具有重要的意義,提出在信用、交通、醫(yī)療、衛(wèi)生、金融、氣象等眾多領(lǐng)域發(fā)展大數(shù)據(jù)。大數(shù)據(jù)產(chǎn)生背景1.信息科技進(jìn)步信息技術(shù)產(chǎn)業(yè)不斷發(fā)展,智能設(shè)備的普及、物聯(lián)網(wǎng)的廣泛應(yīng)用、存儲(chǔ)設(shè)備性能的提高、網(wǎng)絡(luò)帶寬的不斷增長(zhǎng),為大數(shù)據(jù)的產(chǎn)生提供了儲(chǔ)存和流通的物質(zhì)基礎(chǔ)。2.云計(jì)算技術(shù)興起云計(jì)算為大數(shù)據(jù)龐大的數(shù)據(jù)存儲(chǔ)和分散的用戶(hù)訪(fǎng)問(wèn)提供了必需的空間和途徑,是大數(shù)據(jù)誕生的技術(shù)基礎(chǔ)。3.數(shù)據(jù)資源化趨勢(shì)大數(shù)據(jù)根據(jù)產(chǎn)生的來(lái)源可分為消費(fèi)大數(shù)據(jù)和工業(yè)大數(shù)據(jù),兩類(lèi)數(shù)據(jù)都具有巨大的應(yīng)用價(jià)值,可以幫助企業(yè)提升競(jìng)爭(zhēng)力和創(chuàng)新能力,是互聯(lián)網(wǎng)時(shí)代的重要資源。大數(shù)據(jù)應(yīng)用場(chǎng)景1.互聯(lián)網(wǎng)領(lǐng)域搜索引擎:谷歌在自己的搜索引擎中廣泛使用了大數(shù)據(jù)存儲(chǔ)和分析系統(tǒng)。推薦系統(tǒng):推薦系統(tǒng)已經(jīng)被廣泛應(yīng)用于電子商務(wù)、電影視頻網(wǎng)站、新聞推薦等系統(tǒng)中。廣告系統(tǒng):廣告是互聯(lián)網(wǎng)領(lǐng)域常見(jiàn)的盈利模式,也是一個(gè)典型的大數(shù)據(jù)應(yīng)用。2.電信領(lǐng)域網(wǎng)絡(luò)管理和優(yōu)化,包括基礎(chǔ)設(shè)施建設(shè)優(yōu)化、網(wǎng)絡(luò)運(yùn)營(yíng)管理和優(yōu)化。市場(chǎng)與精準(zhǔn)營(yíng)銷(xiāo),包括客戶(hù)畫(huà)像、關(guān)系鏈研究、精準(zhǔn)營(yíng)銷(xiāo)、實(shí)時(shí)營(yíng)銷(xiāo)和個(gè)性化推薦??蛻?hù)關(guān)系管理,包括客服中心優(yōu)化和客戶(hù)生命周期管理。企業(yè)運(yùn)營(yíng)管理,包括業(yè)務(wù)運(yùn)營(yíng)監(jiān)控和經(jīng)營(yíng)分析。數(shù)據(jù)商業(yè)化:數(shù)據(jù)對(duì)外商業(yè)化,單獨(dú)盈利。3.醫(yī)療領(lǐng)域醫(yī)療數(shù)據(jù)包括影像數(shù)據(jù)、病歷數(shù)據(jù)、檢驗(yàn)檢查結(jié)果、診療費(fèi)用等在內(nèi)的各種數(shù)據(jù),合理利用這些數(shù)據(jù)可產(chǎn)生巨大的商業(yè)價(jià)值。大數(shù)據(jù)技術(shù)在醫(yī)療行業(yè)的應(yīng)用將包含以下方向:臨床數(shù)據(jù)對(duì)比、藥品研發(fā)、臨床決策支持、實(shí)時(shí)統(tǒng)計(jì)分析、基本藥物臨床應(yīng)用分析、遠(yuǎn)程病人數(shù)據(jù)分析、人口統(tǒng)計(jì)學(xué)分析、新農(nóng)合基金數(shù)據(jù)分析、就診行為分析、新的服務(wù)模式等。4.金融領(lǐng)域客戶(hù)畫(huà)像應(yīng)用:客戶(hù)畫(huà)像應(yīng)用主要分為個(gè)人客戶(hù)畫(huà)像和企業(yè)客戶(hù)畫(huà)像。精準(zhǔn)營(yíng)銷(xiāo):在客戶(hù)畫(huà)像的基礎(chǔ)上,根據(jù)客戶(hù)的喜好進(jìn)行服務(wù)或者銀行產(chǎn)品的個(gè)性化推薦。風(fēng)險(xiǎn)管控:包括中小企業(yè)貸款風(fēng)險(xiǎn)評(píng)估和欺詐交易識(shí)別等手段。企業(yè)運(yùn)營(yíng)管理,包括業(yè)務(wù)運(yùn)營(yíng)監(jiān)控和經(jīng)營(yíng)分析。運(yùn)營(yíng)優(yōu)化:包括市場(chǎng)和渠道分析優(yōu)化、產(chǎn)品和服務(wù)優(yōu)化等。
大數(shù)據(jù)體系結(jié)構(gòu)目錄
大數(shù)據(jù)背景
Lambda架構(gòu)
本章小結(jié)
本章習(xí)題
重要大數(shù)據(jù)平臺(tái)簡(jiǎn)介大數(shù)據(jù)體系結(jié)構(gòu)數(shù)據(jù)可視化層操作框架層(監(jiān)控管理、基準(zhǔn)測(cè)試)數(shù)據(jù)分析層(數(shù)據(jù)倉(cāng)庫(kù))計(jì)算框架層(批處理、交互式、流式、選代式)資源管理與協(xié)調(diào)層數(shù)據(jù)存儲(chǔ)層數(shù)據(jù)收集層(提取、轉(zhuǎn)換、加載)大數(shù)據(jù)體系架構(gòu)主要包括數(shù)據(jù)收集層、數(shù)據(jù)存儲(chǔ)層、資源管理與協(xié)調(diào)層、計(jì)算架構(gòu)層、數(shù)據(jù)分析層、操作架構(gòu)層與數(shù)據(jù)可視化層,在不同層次上,都面臨不同程度的技術(shù)挑戰(zhàn)。數(shù)據(jù)收集層數(shù)據(jù)收集層由直接跟數(shù)據(jù)源對(duì)接的模塊構(gòu)成,負(fù)責(zé)將數(shù)據(jù)源中的數(shù)據(jù)近實(shí)時(shí)或?qū)崟r(shí)收集到一起。數(shù)據(jù)源特點(diǎn):分布式:數(shù)據(jù)源通常分布在不同機(jī)器或設(shè)備上,并通過(guò)網(wǎng)絡(luò)連接在一起。異構(gòu)性:任何能夠產(chǎn)生數(shù)據(jù)的系統(tǒng)均可以稱(chēng)為數(shù)據(jù)源多樣化:數(shù)據(jù)的格式是多種多種多樣的流式產(chǎn)生:數(shù)據(jù)源如同“水龍頭”一樣,會(huì)源源不斷地產(chǎn)生“流水”(數(shù)據(jù))數(shù)據(jù)收集層由于數(shù)據(jù)源的特點(diǎn),一個(gè)適用于大數(shù)據(jù)領(lǐng)域的收集系統(tǒng),一般具備以下幾個(gè)特點(diǎn):擴(kuò)展性:能夠靈活適配不同的數(shù)據(jù)源,并能接入大量數(shù)據(jù)源而不會(huì)產(chǎn)生系統(tǒng)瓶頸;可靠性:數(shù)據(jù)在傳輸過(guò)程中不能夠丟失(有些應(yīng)用可容忍少量數(shù)據(jù)丟失)。安全性:對(duì)于一些敏感數(shù)據(jù),應(yīng)有機(jī)制保證數(shù)據(jù)收集過(guò)程中不會(huì)產(chǎn)生安全隱患。低延遲:數(shù)據(jù)源產(chǎn)生的數(shù)據(jù)量往往非常龐大,收集系統(tǒng)應(yīng)該能夠在較低延遲的前提下將數(shù)據(jù)傳輸?shù)胶蠖舜鎯?chǔ)系統(tǒng)中。數(shù)據(jù)存儲(chǔ)層數(shù)據(jù)存儲(chǔ)層主要負(fù)責(zé)海量結(jié)構(gòu)化與非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)(比如MySQL)和文件系統(tǒng)(比如Linux文件系統(tǒng))因在存儲(chǔ)容量、擴(kuò)展性及容錯(cuò)性等方面的限制,很難適應(yīng)大數(shù)據(jù)應(yīng)用場(chǎng)景。大數(shù)據(jù)時(shí)代對(duì)數(shù)據(jù)存儲(chǔ)層的要求:擴(kuò)展性:在實(shí)際應(yīng)用中,數(shù)據(jù)量會(huì)不斷增加,現(xiàn)有集群的存儲(chǔ)能力很快將達(dá)到上限,此時(shí)需要增加新的機(jī)器擴(kuò)充存儲(chǔ)能力,這要求存儲(chǔ)系統(tǒng)本身具備非常好的線(xiàn)性擴(kuò)展能力。容錯(cuò)性:考慮到成本等因素,大數(shù)據(jù)系統(tǒng)從最初就假設(shè)構(gòu)建在廉價(jià)機(jī)器上,這就要求系統(tǒng)本身就有良好的容錯(cuò)機(jī)制確保在機(jī)器出現(xiàn)故障時(shí)不會(huì)導(dǎo)致數(shù)據(jù)丟失。存儲(chǔ)模型:由于數(shù)據(jù)具有多樣性,數(shù)據(jù)存儲(chǔ)層應(yīng)支持多種數(shù)據(jù)模型,確保結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù)能夠很容易保存下來(lái)。資源管理與協(xié)調(diào)層為解決將每類(lèi)應(yīng)用單獨(dú)部署到獨(dú)立的服務(wù)器的傳統(tǒng)方法帶來(lái)的資源利用率低、運(yùn)維成本高和數(shù)據(jù)共享困難等問(wèn)題,公司將不同應(yīng)用部署到一個(gè)公共集群中,共享資源,采用輕量級(jí)隔離方案,保證應(yīng)用安全。因此便誕生了輕量級(jí)彈性資源管理平臺(tái)。在構(gòu)建分布式大數(shù)據(jù)系統(tǒng)時(shí),會(huì)面臨很多共同的問(wèn)題,包括leader選舉、服務(wù)命名、分布式隊(duì)列、分布式鎖、發(fā)布訂閱功能等,為了避免重復(fù)開(kāi)發(fā)這些功能,通常會(huì)構(gòu)建一個(gè)統(tǒng)一的服務(wù)協(xié)調(diào)組件,包含了開(kāi)發(fā)分布式系統(tǒng)過(guò)程中通用的功能。資源管理與協(xié)調(diào)層引入資源統(tǒng)一管理層可以帶來(lái)眾多好處:資源利用率高:共享集群模式通過(guò)多種應(yīng)用共享資源,使得集群中的資源得到充分利用。運(yùn)維成本低:共享模式通常需要少數(shù)管理員即可完成多個(gè)框架的統(tǒng)一管理。數(shù)據(jù)共享:共享集群模式可讓多種應(yīng)用共享數(shù)據(jù)和硬件資源,這將大大減小數(shù)據(jù)移動(dòng)帶來(lái)的成本。計(jì)算框架層在實(shí)際生產(chǎn)環(huán)境中,針對(duì)不同的應(yīng)用場(chǎng)景,用一個(gè)系統(tǒng)完美解決所有類(lèi)型的計(jì)算任務(wù)是不現(xiàn)實(shí)的,因此計(jì)算框架現(xiàn)在的發(fā)展方向,是追求“小而美”,即針對(duì)不同應(yīng)用場(chǎng)景,單獨(dú)構(gòu)建一個(gè)計(jì)算框架,每種計(jì)算框架只專(zhuān)注于解決某一類(lèi)問(wèn)題,進(jìn)而形成了多樣化的計(jì)算框架。計(jì)算框架層按照對(duì)時(shí)間性能的要求,將計(jì)算框架分為三類(lèi):實(shí)時(shí)處理:該類(lèi)計(jì)算框架對(duì)時(shí)間要求最高,一般處理延遲在秒級(jí)以?xún)?nèi),典型的應(yīng)用有廣告系統(tǒng)、輿情監(jiān)測(cè)、信用卡欺詐等。交互式處理:該類(lèi)計(jì)算框架對(duì)時(shí)間要求比較高,一般要求處理時(shí)間為秒級(jí)別,這類(lèi)系統(tǒng)需要跟人進(jìn)行交互,因此會(huì)提供類(lèi)SQL的語(yǔ)言便于用戶(hù)使用,典型的應(yīng)用有數(shù)據(jù)查詢(xún)、參數(shù)化報(bào)表生成、OLAP等。批處理:該類(lèi)計(jì)算框架對(duì)時(shí)間要求最低,一般處理時(shí)間為分鐘到小時(shí)級(jí)別,甚至天級(jí)別,它追求的是高吞吐率,即單位時(shí)間內(nèi)處理的數(shù)據(jù)量盡可能大,典型的應(yīng)用有搜索引擎構(gòu)建索引、數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)等。數(shù)據(jù)分析層數(shù)據(jù)分析層直接跟用戶(hù)應(yīng)用程序?qū)?,為其提供易用的?shù)據(jù)處理工具。為了讓用戶(hù)分析數(shù)據(jù)更加容易,計(jì)算引擎會(huì)提供多樣化的工具。操作框架層操作框架層提供可擴(kuò)展的性能監(jiān)測(cè)管理和基準(zhǔn)測(cè)試框架,其構(gòu)建了一套衡量標(biāo)準(zhǔn)和測(cè)試基準(zhǔn),從而來(lái)評(píng)價(jià)各種大數(shù)據(jù)框架的性能優(yōu)劣。在操作性框架中,還包括一些性能優(yōu)化的工具,借助它們來(lái)實(shí)現(xiàn)工作負(fù)載的平衡。數(shù)據(jù)可視化層數(shù)據(jù)可視化層是直接面向用戶(hù)展示結(jié)果的一層,由于該層直接對(duì)接用戶(hù),是展示大數(shù)據(jù)價(jià)值的“門(mén)戶(hù)”,因此數(shù)據(jù)可視化是極具意義的。
重要大數(shù)據(jù)平臺(tái)簡(jiǎn)介目錄
大數(shù)據(jù)體系結(jié)構(gòu)
Lambda架構(gòu)
本章小結(jié)
本章習(xí)題
大數(shù)據(jù)背景KafkaKafka最初由Linkedin公司開(kāi)發(fā),是一個(gè)分布式、分區(qū)的、多副本的、多訂閱者,基于zookeeper協(xié)調(diào)的分布式日志系統(tǒng),常見(jiàn)可以用于web/nginx日志,訪(fǎng)問(wèn)日志,消息服務(wù)等等。Kafka主要功能有:發(fā)布和訂閱事件流,包括從其他系統(tǒng)連續(xù)導(dǎo)入/導(dǎo)出數(shù)據(jù);持久可靠地存儲(chǔ)事件流;當(dāng)事件發(fā)生或追溯時(shí)處理事件流。Kafka優(yōu)點(diǎn):解耦冗余(副本)順序保證靈活性和峰值處理能力擴(kuò)展性可恢復(fù)性異步通信緩沖HDFSHDFS作為GoogleFileSystem(GFS)的實(shí)現(xiàn),是Hadoop項(xiàng)目的核心子項(xiàng)目,是分布式計(jì)算中數(shù)據(jù)存儲(chǔ)管理的基礎(chǔ),是基于流數(shù)據(jù)模式訪(fǎng)問(wèn)和處理超大文件的需求而開(kāi)發(fā)的,可以運(yùn)行于廉價(jià)的商用服務(wù)器上。它所具有的高容錯(cuò)、高可靠性、高可擴(kuò)展性、高獲得性、高吞吐率等特征為海量數(shù)據(jù)提供了安全可靠的存儲(chǔ),為超大型數(shù)據(jù)集的處理帶來(lái)了很多便利。HDFSHDFS局限性:不支持低延遲訪(fǎng)問(wèn);不適合小文件存儲(chǔ);不支持并發(fā)寫(xiě)入;不支持修改。HDFS優(yōu)點(diǎn):HDFS可以存儲(chǔ)極大數(shù)目的信息,將數(shù)據(jù)保存到大量的節(jié)點(diǎn)當(dāng)中,支持很大的單個(gè)文件。HDFS支持對(duì)數(shù)據(jù)的一次寫(xiě)入,多次讀取HDFS對(duì)數(shù)據(jù)讀取進(jìn)行了優(yōu)化,支持大量數(shù)據(jù)的快速順序讀出HDFS提供良好的可擴(kuò)展性,通過(guò)簡(jiǎn)單加入更多服務(wù)器快速擴(kuò)充系統(tǒng)容量HBaseHBase是一個(gè)高可靠、高性能、面向列、可伸縮的非關(guān)系型分布式數(shù)據(jù)庫(kù),是谷歌BigTable的開(kāi)源實(shí)現(xiàn),主要用來(lái)存儲(chǔ)非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。HBase與傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)的區(qū)別:傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)HBase數(shù)據(jù)類(lèi)型采用關(guān)系模型,具有豐富的數(shù)據(jù)類(lèi)型和存儲(chǔ)方式采用更加簡(jiǎn)單的數(shù)據(jù)模型,把數(shù)據(jù)存儲(chǔ)為未經(jīng)解釋的字符串。數(shù)據(jù)操作包含了豐富的操作,其中會(huì)涉及復(fù)雜的多表連接。不存在復(fù)雜的表與表之間的關(guān)系,只有簡(jiǎn)單的插入、查詢(xún)、刪除、清空等存儲(chǔ)模式基于行模式存儲(chǔ)基于列存儲(chǔ)數(shù)據(jù)索引可以針對(duì)不同列構(gòu)建復(fù)雜的多個(gè)索引只有一個(gè)索引——行鍵數(shù)據(jù)維護(hù)更新操作會(huì)用最新的當(dāng)前值去替換記錄中原來(lái)的舊值執(zhí)行更新操作時(shí),并不會(huì)刪除數(shù)據(jù)舊的版本,而是生成一個(gè)新的版本可伸縮性很難實(shí)現(xiàn)橫向擴(kuò)展,縱向擴(kuò)展的空間也比較有限能夠輕易地通過(guò)在集群中增加或者減少硬件數(shù)量來(lái)實(shí)現(xiàn)性能的伸縮MapReduceGoogle公司2004年提出的MapReduce編程模型是最具代表性的批處理模型。MapReduce架構(gòu)的程序能夠在大量的普通配置的計(jì)算機(jī)上實(shí)現(xiàn)并行化處理。MapReduce編程模型的原理即利用一個(gè)輸入鍵-值(Key/Value)對(duì)集合來(lái)產(chǎn)生一個(gè)輸出的key/value對(duì)集合。MapReduce庫(kù)的用戶(hù)用兩個(gè)函數(shù)表達(dá)這個(gè)計(jì)算:Map和Reduce。目前針對(duì)MapReduce性能提升研究主要有以下幾個(gè)方面:多核硬件與GPU上的性能提高;索引技術(shù)與連接技術(shù)的優(yōu)化;調(diào)度技術(shù)優(yōu)化等。SparkSpark使用Scala語(yǔ)言進(jìn)行實(shí)現(xiàn),它是一種面向?qū)ο蟆⒑瘮?shù)式編程語(yǔ)言,能夠像操作本地集合對(duì)象一樣輕松地操作分布式數(shù)據(jù)集Spark具有以下特點(diǎn):運(yùn)行速度快:基于內(nèi)存計(jì)算,比HadoopMapReduce快10-100倍。易用性好:支持Scala、Java和Python編程語(yǔ)言,易于開(kāi)發(fā)。通用性強(qiáng):支持批處理、實(shí)時(shí)流處理、SQL查詢(xún)、機(jī)器學(xué)習(xí)和圖計(jì)算等多種應(yīng)用場(chǎng)景。隨處運(yùn)行:支持多種資源管理器和存儲(chǔ)系統(tǒng),可部署在各種環(huán)境中。SparkSpark是在借鑒了MapReduce之上發(fā)展而來(lái)的,繼承了其分布式并行計(jì)算的優(yōu)點(diǎn)并改進(jìn)了MapReduce明顯的缺陷對(duì)比MapReduce,Spark的優(yōu)點(diǎn):Spark把中間數(shù)據(jù)放到內(nèi)存中,迭代運(yùn)算效率高。Spark容錯(cuò)性高。Spark更加通用。Spark應(yīng)用場(chǎng)景:Spark是基于內(nèi)存的迭代計(jì)算框架,適用于需要多次操作特定數(shù)據(jù)集的應(yīng)用場(chǎng)合。由于RDD的特性,Spark不適用那種異步細(xì)粒度更新?tīng)顟B(tài)的應(yīng)用數(shù)據(jù)量不是特別大,但是要求實(shí)時(shí)統(tǒng)計(jì)分析需求。FlinkFlink是一個(gè)分布式流批一體化的開(kāi)源平臺(tái)。Flink的核心是一個(gè)提供數(shù)據(jù)分發(fā)、通信以及自動(dòng)容錯(cuò)的流計(jì)算引擎。Flink在流計(jì)算之上構(gòu)建批處理,并且原生的支持迭代計(jì)算,內(nèi)存管理以及程序優(yōu)化。Flink的優(yōu)勢(shì):事件時(shí)間(event-time)和處理時(shí)間(processing-tme
)語(yǔ)義。即使對(duì)于無(wú)序事件流,事件時(shí)間語(yǔ)義仍然能提供一致且準(zhǔn)確的結(jié)果。而處理時(shí)間語(yǔ)義可用于具有極低延遲要求的應(yīng)用程序。精確一次(exactly-once)的狀態(tài)一致性保證。每秒處理數(shù)百萬(wàn)個(gè)事件,毫秒級(jí)延遲。Flink應(yīng)用程序可以擴(kuò)展為在數(shù)千個(gè)核(cores)上運(yùn)行。分層API,具有不同的權(quán)衡表現(xiàn)力和易用性。連接到最常用的存儲(chǔ)系統(tǒng),如ApacheKafka,ApacheCassandra,Elasticsearch,JDBC,Kinesis和(分布式)文件系統(tǒng),如HDFS和S3。能與Kubernetes,YARN和ApacheMesos等資源管理框架緊密集成,具有高可用設(shè)置以及快速恢復(fù)和動(dòng)態(tài)擴(kuò)展任務(wù)的能力。能夠更新應(yīng)用程序代碼并將作業(yè)(jobs)遷移到不同的Flink集群,而不丟失應(yīng)用程序的狀態(tài)。詳細(xì)且可自定義的系統(tǒng)和應(yīng)用程序指標(biāo)集合,以提前識(shí)別問(wèn)題并對(duì)其做出反應(yīng)。Flink是一個(gè)成熟的批處理器。ZookeeperZooKeeper是一個(gè)高可用的分布式數(shù)據(jù)管理與系統(tǒng)協(xié)調(diào)框架?;趯?duì)Paxos算法的實(shí)現(xiàn),使該框架保證了分布式環(huán)境中數(shù)據(jù)的一致性,也正是基于這樣的特性,使得它能夠應(yīng)用于很多場(chǎng)景。ZooKeeper的特性:順序一致性:來(lái)自相同客戶(hù)端提交的事務(wù),ZooKeeper將按照其提交順序依次執(zhí)行;原子性:于ZooKeeper集群中提交事務(wù),事務(wù)將“全部完成”或“全部未完成”,不存在“部分完成”;單一系統(tǒng)鏡像:客戶(hù)端連接到ZooKeeper集群的任意節(jié)點(diǎn),其獲得的數(shù)據(jù)視圖都是相同的;可靠性:事務(wù)一旦完成,其產(chǎn)生的狀態(tài)變化將永久保留,直到其他事務(wù)進(jìn)行覆蓋;
實(shí)時(shí)性:事務(wù)一旦完成,客戶(hù)端將于限定的時(shí)間段內(nèi),獲得最新的數(shù)據(jù)。HiveHive是建立在Hadoop基礎(chǔ)上的數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)構(gòu)架,定義了簡(jiǎn)單的類(lèi)SQL查詢(xún)語(yǔ)言,允許熟悉SQL的用戶(hù)查詢(xún)數(shù)據(jù)。Hive作為Hadoop的數(shù)據(jù)倉(cāng)庫(kù)處理工具,其所有的數(shù)據(jù)都存儲(chǔ)在Hadoop兼容的文件系統(tǒng)中。Hive的設(shè)計(jì)特點(diǎn):支持索引,加快數(shù)據(jù)查詢(xún)。不同的存儲(chǔ)類(lèi)型,例如,純文本文件、HBase中的文件。將元數(shù)據(jù)保存在關(guān)系數(shù)據(jù)庫(kù)中,減少了在查詢(xún)中執(zhí)行語(yǔ)義檢查時(shí)間。可以直接使用存儲(chǔ)在Hadoop文件系統(tǒng)中的數(shù)據(jù)。支持用戶(hù)擴(kuò)展UDF函數(shù)來(lái)完成內(nèi)置函數(shù)無(wú)法實(shí)現(xiàn)的操作。類(lèi)SQL的查詢(xún)方式,將SQL查詢(xún)轉(zhuǎn)換為MapReduce的job在Hadoop集群上執(zhí)行。編碼跟Hadoop同樣使用UTF-8字符集。Hive是一個(gè)SQL解析引擎,它將SQL語(yǔ)句轉(zhuǎn)譯成MapReduce作業(yè)并在Hadoop上執(zhí)行。Hive不支持基于行記錄的更新、刪除、增加,但是用戶(hù)可以通過(guò)查詢(xún)生成新表,或者將查詢(xún)結(jié)果導(dǎo)入文件中來(lái)“實(shí)現(xiàn)”Hive基于行記錄的操作。Hive的優(yōu)點(diǎn):操作接口采用類(lèi)SQL語(yǔ)法,提供快速開(kāi)發(fā)的能力(簡(jiǎn)單、容易上手);避免了去寫(xiě)MapReduce,減少開(kāi)發(fā)人員的學(xué)習(xí)成本;統(tǒng)一的元數(shù)據(jù)管理,可與Impala/Spark等共享元數(shù)據(jù);易擴(kuò)展??梢詳U(kuò)展集群規(guī)模;支持自定義函數(shù);數(shù)據(jù)的離線(xiàn)處理。比如日志分析,海量結(jié)構(gòu)化數(shù)據(jù)離線(xiàn)分析等;HiveHive的執(zhí)行延遲比較高,因此hive常用于數(shù)據(jù)分析的,對(duì)實(shí)時(shí)性要求不高的場(chǎng)合;Hive優(yōu)勢(shì)在于處理大數(shù)據(jù),對(duì)于處理小數(shù)據(jù)沒(méi)有優(yōu)勢(shì),因?yàn)镠ive的執(zhí)行延遲比較高。BeamApacheBeam是Google開(kāi)源的統(tǒng)一批處理和流處理的編程模型和SDK,支持批處理和流處理,并可以將用Beam編程模型構(gòu)造出來(lái)的程序,在多個(gè)計(jì)算引擎(ApacheApex,
ApacheFlink,
ApacheSpark,
GoogleCloudDataflow等)上運(yùn)行。大數(shù)據(jù)開(kāi)發(fā)工具繁多,眾多開(kāi)源框架、工具、類(lèi)庫(kù)、平臺(tái),整合起來(lái)很困難,而ApacheBeam提供了一個(gè)解決方案。ApacheBeam項(xiàng)目的重點(diǎn),在于數(shù)據(jù)處理的編程范式和接口定義,其本身并不涉及具體的執(zhí)行引擎的實(shí)現(xiàn)
Lambda架構(gòu)目錄
本章小結(jié)
本章習(xí)題
重要大數(shù)據(jù)平臺(tái)簡(jiǎn)介
大數(shù)據(jù)體系結(jié)構(gòu)
大數(shù)據(jù)背景Lambda架構(gòu)Lambda架構(gòu)并不是一個(gè)具有實(shí)體的軟件產(chǎn)品,而是一個(gè)指導(dǎo)大數(shù)據(jù)系統(tǒng)搭建的架構(gòu)模型。因此,用戶(hù)可以根據(jù)自己的需要,在架構(gòu)模型中任意集成Hadoop,Hbase,Kafka,Storm,Spark、Flink等各類(lèi)大數(shù)據(jù)組件。Lambda架構(gòu)是由Storm的作者NathanMarz提出的一個(gè)實(shí)時(shí)大數(shù)據(jù)處理框架。Lambda架構(gòu)的目標(biāo)是設(shè)計(jì)出一個(gè)能滿(mǎn)足實(shí)時(shí)大數(shù)據(jù)系統(tǒng)關(guān)鍵特性的架構(gòu),具有高容錯(cuò)、低延時(shí)和可擴(kuò)展等特性。背景介紹Lambda架構(gòu)架構(gòu)設(shè)計(jì)大數(shù)據(jù)系統(tǒng)的關(guān)鍵問(wèn)題:如何實(shí)時(shí)地在任意大數(shù)據(jù)集上進(jìn)行查詢(xún)?最簡(jiǎn)單的方法是,直接在全體數(shù)據(jù)集上運(yùn)行查詢(xún)函數(shù)得到結(jié)果,但是這種方法的計(jì)算開(kāi)銷(xiāo)過(guò)大,并不現(xiàn)實(shí)。Lambda架構(gòu)通過(guò)分解的三層架構(gòu)來(lái)解決該問(wèn)題:批處理層,流式處理層和服務(wù)層產(chǎn)生的數(shù)據(jù)批處理層流式處理層服務(wù)層結(jié)果批處理層架構(gòu)設(shè)計(jì)批處理層功能:存儲(chǔ)數(shù)據(jù)集。在數(shù)據(jù)集上預(yù)先計(jì)算查詢(xún)函數(shù),構(gòu)建查詢(xún)所對(duì)應(yīng)的視圖。批處理層可以看成是一個(gè)數(shù)據(jù)預(yù)處理的過(guò)程。我們把針對(duì)查詢(xún)預(yù)先計(jì)算并保存的結(jié)果稱(chēng)為視圖,通過(guò)視圖可以快速得到查詢(xún)結(jié)果。視圖的創(chuàng)建需要從業(yè)務(wù)需求出發(fā),根據(jù)業(yè)務(wù)需求定義視圖。流式處理層架構(gòu)設(shè)計(jì)流式處理層是用來(lái)處理增量的實(shí)時(shí)數(shù)據(jù),能對(duì)數(shù)據(jù)進(jìn)行計(jì)算并生成實(shí)時(shí)視圖。流式處理層與批處理層的主要區(qū)別:流式處理層處理的數(shù)據(jù)為最近的增量數(shù)據(jù)流,批處理層處理的數(shù)據(jù)是全體數(shù)據(jù)集。流式處理層為了效率,接收到新數(shù)據(jù)時(shí)不斷更新實(shí)時(shí)視圖,而批處理層根據(jù)全體離線(xiàn)數(shù)據(jù)集直接得到整體視圖。服務(wù)層架構(gòu)設(shè)計(jì)服務(wù)層用于響應(yīng)用戶(hù)的查詢(xún)請(qǐng)求,合并批處理視圖和實(shí)時(shí)視圖中的結(jié)果數(shù)據(jù)集得到最終的數(shù)據(jù)集。Lambda架構(gòu)將數(shù)據(jù)處理分解為批處理層和流式處理層的優(yōu)點(diǎn):容錯(cuò)性:流式處理層處理中引入的錯(cuò)誤,在批處理層重新計(jì)算時(shí)都可以得到修正。復(fù)雜性隔離:通過(guò)分開(kāi)批處理層和流式處理層,把復(fù)雜性隔離到流式處理層,可以很好的提高整個(gè)系統(tǒng)的魯棒性和可靠性。架構(gòu)設(shè)計(jì)所有數(shù)據(jù)批處理層流式處理層實(shí)時(shí)數(shù)據(jù)流新增視圖批處理視圖批處理視圖實(shí)時(shí)視圖實(shí)時(shí)視圖重算預(yù)計(jì)算結(jié)果合并輸入數(shù)據(jù)結(jié)果數(shù)據(jù)集服務(wù)層Lambda架構(gòu)的完整視圖:
本章小結(jié)目錄
本章習(xí)題
重要大數(shù)據(jù)平臺(tái)簡(jiǎn)介
大數(shù)據(jù)體系結(jié)構(gòu)
大數(shù)據(jù)背景
Lambda架構(gòu)本章小結(jié)本章主要講述了大數(shù)據(jù)產(chǎn)生的背景與應(yīng)用場(chǎng)景,介紹了大數(shù)據(jù)體系架構(gòu),包括數(shù)據(jù)收集層、數(shù)據(jù)存儲(chǔ)層、資源管理與協(xié)調(diào)層等,還簡(jiǎn)單介紹了當(dāng)前應(yīng)用廣泛的重要大數(shù)據(jù)平臺(tái)技術(shù),最后介紹了Lambda架構(gòu)的相關(guān)知識(shí)。
本章習(xí)題目錄
重要大數(shù)據(jù)平臺(tái)簡(jiǎn)介
大數(shù)據(jù)體系結(jié)構(gòu)
大數(shù)據(jù)背景
Lambda架構(gòu)
本章小結(jié)習(xí)題1-1大數(shù)據(jù)產(chǎn)生的背景有哪幾個(gè)方面?習(xí)題1-2大數(shù)據(jù)技術(shù)可以應(yīng)用于哪些領(lǐng)域?請(qǐng)舉例具體說(shuō)明。習(xí)題1-3大數(shù)據(jù)體系架構(gòu)主要包括幾個(gè)層次,分別是哪些?習(xí)題1-4請(qǐng)你簡(jiǎn)述一些重要的大數(shù)據(jù)技術(shù)與其對(duì)應(yīng)的大數(shù)據(jù)體系架構(gòu)層次。習(xí)題1-5Lambda架構(gòu)解決的大數(shù)據(jù)系統(tǒng)的關(guān)鍵問(wèn)題是什么?是如何解決的?習(xí)題第2章Hadoop概述
Hadoop生態(tài)目錄
Hadoop1.0
本章小結(jié)
本章習(xí)題
Hadoop2.0Hadoop生態(tài)在大數(shù)據(jù)處理軟件系統(tǒng)上,隨著ApacheHadoop系統(tǒng)開(kāi)源化的發(fā)展,在最初包含HDFS、MapReduce、HBase等基本子系統(tǒng)的基礎(chǔ)上,至今Hadoop平臺(tái)已經(jīng)演進(jìn)為一個(gè)包含很多相關(guān)子系統(tǒng)的完整的大數(shù)據(jù)處理生態(tài)系統(tǒng)。Hadoop生態(tài)系統(tǒng)與支撐平臺(tái)分布式協(xié)調(diào)服服務(wù)框架ZooKeeper其他第三方工具關(guān)系數(shù)據(jù)交換工具Sqoop日志數(shù)據(jù)收集工具Flume科學(xué)計(jì)算基礎(chǔ)工具庫(kù)Hama數(shù)據(jù)分析挖掘工具庫(kù)Mahout鍵值對(duì)數(shù)據(jù)庫(kù)系統(tǒng)Cassandra數(shù)據(jù)流處理工具PigMapReduce并行計(jì)算框架分布式海量數(shù)據(jù)存儲(chǔ)與管理分布式文件系統(tǒng)HDFS公共服務(wù)模塊Common數(shù)據(jù)序列化系統(tǒng)Avro分布式存儲(chǔ)和并行計(jì)算集群數(shù)據(jù)倉(cāng)庫(kù)處理工具Hive日志數(shù)據(jù)處理系統(tǒng)Chukwa分布式數(shù)據(jù)庫(kù)管理系統(tǒng)HBaseHadoop平臺(tái)的基本組成與生態(tài)系統(tǒng)Hadoop生態(tài)MapReduce并行計(jì)算框架MapReduce并行計(jì)算框架是一個(gè)并行化程序執(zhí)行系統(tǒng)。它提供了一個(gè)包含Map和Reduce兩階段的并行處理模型和過(guò)程,提供一組完整的供程序員開(kāi)發(fā)MapReduce應(yīng)用程序的編程接口。
在程序執(zhí)行時(shí),MapReduce并行計(jì)算框架將負(fù)責(zé)調(diào)度和分配計(jì)算資源,劃分和輸入輸出數(shù)據(jù),調(diào)度程序的執(zhí)行,監(jiān)控程序的執(zhí)行狀態(tài),并負(fù)責(zé)程序執(zhí)行各計(jì)算節(jié)點(diǎn)的同步以及中間結(jié)果的收集整理。Hadoop生態(tài)分布式文件系統(tǒng)HDFSHDFS是一個(gè)類(lèi)似于GoogleGFS的開(kāi)源的分布式文件系統(tǒng)。它提供了一個(gè)可擴(kuò)展、高可靠、高可用的大規(guī)模數(shù)據(jù)分布式存儲(chǔ)管理系統(tǒng),基于物理上分布在各個(gè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的本地Linux系統(tǒng)的文件系統(tǒng),HDFS采用多副本(默認(rèn)為3個(gè)副本)數(shù)據(jù)冗余存儲(chǔ)機(jī)制,并提供了有效的數(shù)據(jù)出錯(cuò)檢測(cè)和數(shù)據(jù)恢復(fù)機(jī)制,大大提高了數(shù)據(jù)存儲(chǔ)的可靠性。分布式數(shù)據(jù)庫(kù)管理系統(tǒng)HBbaseHBase是一個(gè)建立在HDFS之上的分布式數(shù)據(jù)庫(kù),它是一個(gè)分布式可擴(kuò)展的NoSQL數(shù)據(jù)庫(kù),提供了對(duì)結(jié)構(gòu)化、半結(jié)構(gòu)化甚至非結(jié)構(gòu)化大數(shù)據(jù)的實(shí)時(shí)讀寫(xiě)和隨機(jī)訪(fǎng)問(wèn)能力。HBase提供了一個(gè)基于行、列和時(shí)間戳的三維數(shù)據(jù)管理模型。Hadoop生態(tài)公共服務(wù)模塊CommonCommon是一套為整個(gè)Hadoop系統(tǒng)提供底層支撐服務(wù)和常用工具的類(lèi)庫(kù)和API編程接口,這些底層服務(wù)包括Hadoop抽象文件系統(tǒng)FileSystem、遠(yuǎn)程過(guò)程調(diào)用RPC、系統(tǒng)配置工具Configuration以及序列化機(jī)制。在0.20及以前的版本中,Common包含HDFS、MapReduce和其他公共的項(xiàng)目?jī)?nèi)容;從0.21版本開(kāi)始,HDFS和MapReduce被分離為獨(dú)立的子項(xiàng)目,其余部分內(nèi)容構(gòu)成HadoopCommon。數(shù)據(jù)序列化系統(tǒng)AvroAvro是一個(gè)數(shù)據(jù)序列化系統(tǒng),用于將數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)對(duì)象轉(zhuǎn)換成便于數(shù)據(jù)存儲(chǔ)和網(wǎng)絡(luò)傳輸?shù)母袷?。Avro提供了豐富的數(shù)據(jù)結(jié)構(gòu)類(lèi)型,快速可壓縮的二進(jìn)制數(shù)據(jù)格式,存儲(chǔ)持久性數(shù)據(jù)的文件集,遠(yuǎn)程調(diào)用RPC和簡(jiǎn)單動(dòng)態(tài)語(yǔ)言集成等功能。Hadoop生態(tài)分布式協(xié)調(diào)服務(wù)框架ZookeeperZookeeper是一個(gè)分布式協(xié)調(diào)服務(wù)框架,主要用于解決分布式環(huán)境中的一致性問(wèn)題。Zookeeper主要用于提供分布式應(yīng)用中經(jīng)常需要的系統(tǒng)可靠性維護(hù)、數(shù)據(jù)狀態(tài)同步、統(tǒng)一命名服務(wù)、分布式應(yīng)用配置項(xiàng)管理等功能。Zookeeper可用來(lái)在分布式環(huán)境下維護(hù)系統(tǒng)運(yùn)行管理中的一些數(shù)據(jù)量不大的重要狀態(tài)數(shù)據(jù),并提供監(jiān)測(cè)數(shù)據(jù)狀態(tài)變化的機(jī)制,以此配合其他Hadoop子系統(tǒng)(如HBase、Hama等)或者用戶(hù)開(kāi)發(fā)的應(yīng)用系統(tǒng),解決分布式環(huán)境下系統(tǒng)可靠性管理和數(shù)據(jù)狀態(tài)維護(hù)等問(wèn)題。Hadoop生態(tài)分布式數(shù)據(jù)倉(cāng)庫(kù)處理工具HiveHive是一個(gè)建立在Hadoop之上的數(shù)據(jù)倉(cāng)庫(kù),用于管理存儲(chǔ)于HDFS或HBase中的結(jié)構(gòu)化/半結(jié)構(gòu)化數(shù)據(jù)。Hive允許直接用類(lèi)似SQL的HiveQL查詢(xún)語(yǔ)言作為編程接口編寫(xiě)數(shù)據(jù)查詢(xún)分析程序,并提供數(shù)據(jù)倉(cāng)庫(kù)所需要的數(shù)據(jù)抽取轉(zhuǎn)換、存儲(chǔ)管理和查詢(xún)分析功能,而HiveQL語(yǔ)句在底層實(shí)現(xiàn)時(shí)被轉(zhuǎn)換為相應(yīng)的MapReduce程序加以執(zhí)行。Hadoop生態(tài)數(shù)據(jù)流處理工具PigPig是一個(gè)用來(lái)處理大規(guī)模數(shù)據(jù)集的平臺(tái),它簡(jiǎn)化了使用Hadoop進(jìn)行數(shù)據(jù)分析處理的難度,提供一個(gè)面向領(lǐng)城的高層抽象語(yǔ)言PigLatin,通過(guò)該語(yǔ)言,程序員可以將復(fù)雜的數(shù)據(jù)分析任務(wù)實(shí)現(xiàn)為Pig操作上的數(shù)據(jù)流腳本,這些腳本最終執(zhí)行時(shí)將被系統(tǒng)自動(dòng)轉(zhuǎn)換為MapReduce任務(wù)鏈,在Hadoop上加以執(zhí)行。Hadoop生態(tài)鍵值對(duì)數(shù)據(jù)庫(kù)系統(tǒng)CassandraCassandra是一套分布式的K-V型的數(shù)據(jù)庫(kù)系統(tǒng),Cassandra以Amazon專(zhuān)有的完全分布式Dynamo為基礎(chǔ),結(jié)合了GoogleBigTable基于列族(ColumnFamily)的數(shù)據(jù)模型,提供了一套高度可擴(kuò)展、最終一致、分布式的結(jié)構(gòu)化鍵值存儲(chǔ)系統(tǒng)。它結(jié)合了Dynamo的分布技術(shù)和Google的BigTable數(shù)據(jù)模型,更好地滿(mǎn)足了海量數(shù)據(jù)存儲(chǔ)的需求。同時(shí),Cassandra變更垂直擴(kuò)展為水平擴(kuò)展,相比其他典型的鍵值數(shù)據(jù)存儲(chǔ)模型,Cassandra提供了更為豐富的功能。Hadoop生態(tài)日志數(shù)據(jù)處理系統(tǒng)ChukwaChukwa是一個(gè)由Yahoo!貢獻(xiàn)的開(kāi)源的數(shù)據(jù)收集系統(tǒng),主要用于日志的收集和數(shù)據(jù)的監(jiān)控,并與MapReduce協(xié)同處理數(shù)據(jù)。Chukwa是一個(gè)基于Hadoop的大規(guī)模集群監(jiān)控系統(tǒng),繼承了Hadoop系統(tǒng)的可靠性,具有良好的適應(yīng)性和擴(kuò)展性。它使用HDFS來(lái)存儲(chǔ)數(shù)據(jù),使用MapReduce來(lái)處理數(shù)據(jù),同時(shí)還提供靈活強(qiáng)大的輔助工具用以分析、顯示、監(jiān)視數(shù)據(jù)結(jié)果。Hadoop生態(tài)科學(xué)計(jì)算基礎(chǔ)工具庫(kù)HamaHama是一個(gè)基于BSP并行計(jì)算模型(BulkSynchronousParallel,大同步并行模型)的計(jì)算框架,主要提供一套支撐框架和工具,支持大規(guī)模科學(xué)計(jì)算或者具有復(fù)雜數(shù)據(jù)關(guān)聯(lián)性的圖計(jì)算。Hama可以與Hadoop的HDFS進(jìn)行完美的整合,利用HDFS對(duì)需要運(yùn)行的任務(wù)和數(shù)據(jù)進(jìn)行持久化存儲(chǔ)。由于BSP在并行化計(jì)算模型上的靈活性,Hama框架可在大規(guī)??茖W(xué)計(jì)算和圖計(jì)算方面得到較多應(yīng)用,完成矩陣計(jì)算、排序計(jì)算、PageRank、BFS等不同的大數(shù)據(jù)計(jì)算和處理任務(wù)。Hadoop生態(tài)數(shù)據(jù)分析挖掘工具庫(kù)MahoutMahout來(lái)源于ApacheLucene子項(xiàng)目,其主要目標(biāo)是創(chuàng)建并提供經(jīng)典的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘并行化算法類(lèi)庫(kù),Mahout現(xiàn)在已經(jīng)包含了聚類(lèi)、分類(lèi)、推薦引擎、頻繁項(xiàng)集挖掘等廣泛使用的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘算法。此外,它還提供了包含數(shù)據(jù)輸入輸出工具,以及與其他數(shù)據(jù)存儲(chǔ)管理系統(tǒng)進(jìn)行數(shù)據(jù)集成的工具和構(gòu)架。Hadoop生態(tài)關(guān)系數(shù)據(jù)交換工具SqoopSqoop是SQL-to-Hadoop的縮寫(xiě),是一個(gè)在關(guān)系數(shù)據(jù)庫(kù)與Hadoop平臺(tái)間進(jìn)行快速批量數(shù)據(jù)交換的工具。它可以將一個(gè)關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)批量導(dǎo)入Hadoop的HDFS、HBase、Hive中,也可以反過(guò)來(lái)將Hadoop平臺(tái)中的數(shù)據(jù)導(dǎo)入關(guān)系數(shù)據(jù)庫(kù)中。Sqoop充分利用了HadoopMapReduce的并行化優(yōu)點(diǎn),整個(gè)數(shù)據(jù)交換過(guò)程基于MapReduce實(shí)現(xiàn)并行化的快速處理。Hadoop生態(tài)日志數(shù)據(jù)收集工具FlumeFlume是由Cloudera開(kāi)發(fā)維護(hù)的一個(gè)分布式、高可靠、高可用、適合復(fù)雜環(huán)境下大規(guī)模日志數(shù)據(jù)采集的系統(tǒng)。它將數(shù)據(jù)從產(chǎn)生、傳輸、處理、輸出的過(guò)程抽象為數(shù)據(jù)流,并允許在數(shù)據(jù)源中定義數(shù)據(jù)發(fā)送方,從而支持收集基于各種不同傳輸協(xié)議的數(shù)據(jù),并提供對(duì)日志數(shù)據(jù)進(jìn)行簡(jiǎn)單的數(shù)據(jù)過(guò)濾、格式轉(zhuǎn)換等處理能力。輸出時(shí),F(xiàn)lume可支持將日志數(shù)據(jù)寫(xiě)往用戶(hù)定制的輸出日標(biāo)。
Hadoop1.0目錄
Hadoop生態(tài)
本章小結(jié)
本章習(xí)題
Hadoop2.0Hadoop1.0Hadoop1.0指的是版本為ApacheHadoop0.20.x、1.x或者CDH3系列的Hadoop,內(nèi)核主要由HDFS和MapReduce兩個(gè)系統(tǒng)組成,如右圖所示。其中,MapReduce是一個(gè)離線(xiàn)處理框架,由編程模型(新舊API)、運(yùn)行時(shí)環(huán)境(JobTracker和TaskTracker)和數(shù)據(jù)處理引擎(MapTask和ReduceTask)三部分組成。Hadoop1.0MapReduce(集群資源管理與數(shù)據(jù)處理)HDFS(分布式存儲(chǔ))Hadoop1.0從節(jié)點(diǎn)TaskTrackerDataNode本地Linux文件系統(tǒng)MapReduce主控節(jié)點(diǎn)JobTrackerMapReduce主控節(jié)點(diǎn)NameNodeMapReduce并行計(jì)算框架HDFS分布式文件系統(tǒng)從節(jié)點(diǎn)TaskTrackerDataNode本地Linux文件系統(tǒng)從節(jié)點(diǎn)TaskTrackerDataNode本地Linux文件系統(tǒng)集群主控節(jié)點(diǎn)分布式存儲(chǔ)和并行計(jì)算集群從軟件系統(tǒng)角度看,Hadoop系統(tǒng)包括分布式存儲(chǔ)和并行計(jì)算兩個(gè)部分,如右圖所示。分布式存儲(chǔ)構(gòu)架上,Hadoop基于每個(gè)從節(jié)點(diǎn)上的本地文件系統(tǒng),構(gòu)建一個(gè)邏輯上整體化的分布式文件系統(tǒng),以此提供大規(guī)??蓴U(kuò)展的分布式數(shù)據(jù)存儲(chǔ)功能,即HDFS。并行計(jì)算上,Hadoop提供了一個(gè)稱(chēng)為MapReduce的并行化計(jì)算框架。該框架能有效管理和調(diào)度整個(gè)集群中的節(jié)點(diǎn)來(lái)完成并行化程序的執(zhí)行和數(shù)據(jù)處理,并能讓每個(gè)從節(jié)點(diǎn)盡可能對(duì)本地節(jié)點(diǎn)上的數(shù)據(jù)進(jìn)行本地化計(jì)算Hadoop1.0HDFSHDFS中負(fù)責(zé)控制和管理整個(gè)分布式文件系統(tǒng)的主控節(jié)點(diǎn)稱(chēng)為NameNode,而每個(gè)具體負(fù)責(zé)數(shù)據(jù)存儲(chǔ)的從節(jié)點(diǎn)稱(chēng)為DataNode。MapReduceMapReduce中負(fù)責(zé)管理和調(diào)度整個(gè)集群進(jìn)行計(jì)算的主控節(jié)點(diǎn)稱(chēng)為JobTracker,而每個(gè)負(fù)責(zé)具體的數(shù)據(jù)計(jì)算的從節(jié)點(diǎn)稱(chēng)為T(mén)askTracker。JobTracker可以與負(fù)責(zé)管理數(shù)據(jù)存儲(chǔ)的主控節(jié)點(diǎn)NameNode設(shè)置在同一個(gè)物理的主控服務(wù)器上,在系統(tǒng)規(guī)模較大、各自負(fù)載較重時(shí)兩者也可以分開(kāi)設(shè)置。但數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)DataNode與計(jì)算節(jié)點(diǎn)TaskTracker會(huì)配對(duì)地設(shè)置在同一個(gè)物理的從節(jié)點(diǎn)服務(wù)器上。Hadoop1.0Hadoop1.0資源管理由兩部分組成:資源表示模型:使用“槽位”(slot)組織各節(jié)點(diǎn)上的資源,一個(gè)slot代表一份CPU、內(nèi)存和磁盤(pán)等資源。資源分配模型:由插拔式的調(diào)度器完成,負(fù)責(zé)將資源分配給各個(gè)作業(yè)/任務(wù)。SlotHadoop將各個(gè)節(jié)點(diǎn)上的資源(CPU、內(nèi)存和磁盤(pán)等)等量切分成若干份,每一份用一個(gè)slot表示,將多維度資源抽象成一種資源,簡(jiǎn)化了資源管理問(wèn)題。slot是任務(wù)運(yùn)行的資源單位,任務(wù)只有獲得slot才能運(yùn)行。每個(gè)節(jié)點(diǎn)上的slot數(shù)目決定了該節(jié)點(diǎn)的最大并發(fā)任務(wù)數(shù)。slot分為Mapslot和Reduceslot兩種,分別用于運(yùn)行MapReduce作業(yè)的Map任務(wù)和Reduce任務(wù)。Hadoop集群管理員可以根據(jù)各個(gè)節(jié)點(diǎn)硬件配置和應(yīng)用特點(diǎn)為它們分配不同的Mapslot數(shù)和Reduceslot數(shù)。Hadoop1.0Hadoop1.0中的資源管理存在以下幾個(gè)缺點(diǎn):靜態(tài)資源配置:采用了靜態(tài)資源設(shè)置策略,即每個(gè)節(jié)點(diǎn)實(shí)現(xiàn)配置好可用的slot總數(shù),這些slot數(shù)目一旦啟動(dòng)后無(wú)法再動(dòng)態(tài)修改。資源無(wú)法共享:將slot分為Mapslot和Reduceslot兩種,且不允許共享。造成資源浪費(fèi),降低slot利用率。資源劃分粒度過(guò)大:采用無(wú)類(lèi)別slot的資源劃分方法,劃分粒度過(guò)粗糙。導(dǎo)致資源碎片化,降低集群資源利用率。無(wú)法滿(mǎn)足不同任務(wù)對(duì)資源需求的差異性,可能造成資源搶占現(xiàn)象。沒(méi)引入有效的資源隔離機(jī)制:僅采用了基于JVM的資源隔離機(jī)制,隔離效果不佳。導(dǎo)致同一個(gè)節(jié)點(diǎn)上的任務(wù)之間干擾嚴(yán)重,影響任務(wù)運(yùn)行效率。
Hadoop2.0目錄
Hadoop1.0
本章小結(jié)
本章習(xí)題
Hadoop生態(tài)Hadoop2.0Hadoop2.0指的是版本為ApacheHadoop0.23.x、2.x或者CDH4系列的Hadoop,內(nèi)核主要由HDFS、MapReduce和YARN三個(gè)系統(tǒng)組成,如右圖所示。其中,YARN是一個(gè)資源管理系統(tǒng),負(fù)責(zé)集群資源管理和調(diào)度,MapReduce則是運(yùn)行在YARN上離線(xiàn)處理框架,它與Hadoop1.0中的MapReduce在編程模型(新舊API)和數(shù)據(jù)處理引擎(MapTask和ReduceTask)兩個(gè)方面是相同的。Hadoop2.0MapReduce(數(shù)據(jù)處理)Others(數(shù)據(jù)處理)YARN(集群資源管理)HDFS(分布式存儲(chǔ))Hadoop2.0資源分配的本質(zhì),即根據(jù)任務(wù)資源需求為其分配系統(tǒng)中的各類(lèi)資源。在實(shí)際系統(tǒng)中,資源本身是多維度的,包括CPU、內(nèi)存、網(wǎng)絡(luò)I/O和磁盤(pán)I/O等,因此,如果想精確控制資源分配,不能再有slot的概念,最直接的方法是讓任務(wù)直接向調(diào)度器申請(qǐng)自己需要的資源。Hadoop2.0采用了這種基于真實(shí)資源量的資源分配方案,引入了YARN用于資源的管理與調(diào)度。ApacheYarn(YetAnotherResourceNegotiator)最初是為了改善MapReduce的實(shí)現(xiàn),其具有通用性,同樣可執(zhí)行于其他分布式計(jì)算模式。Hadoop2.0MapReduce1.0具有如下局限性:擴(kuò)展性差:JobTracker兼顧資源管理和作業(yè)控制跟蹤功能跟蹤任務(wù),啟動(dòng)失敗或遲緩的任務(wù),記錄任務(wù)的執(zhí)行狀態(tài),維護(hù)計(jì)數(shù)器,壓力大,容易成為系統(tǒng)性能的瓶頸;可靠性差:采用了master/slave結(jié)構(gòu),master容易單點(diǎn)故障;資源利用率低:基于槽位的資源分配模型,槽位是一種粗粒度的資源劃分單位,通常一個(gè)任務(wù)不會(huì)用完一個(gè)槽位的資源,Hadoop1.0分為mapslot和reduceslot,而它們之間的資源不共享,造成資源閑置;不支持多框架:不支持多種計(jì)算框架并行。Hadoop2.0YARN從整體上還是屬于master/slave模型,主要依賴(lài)于三個(gè)組件來(lái)實(shí)現(xiàn)功能:ResourceManager:集群資源的仲裁者,是一個(gè)全局的、通用的資源管理器,它包括兩部分:一個(gè)是可插拔式的調(diào)度Scheduler,一個(gè)是ApplicationManager,用于管理集群中的用戶(hù)作業(yè)。NodeManager:管理該節(jié)點(diǎn)上的用戶(hù)作業(yè)和工作流,也會(huì)不斷發(fā)送自己Container使用情況給ResourceManager。ApplicationMaster:是用戶(hù)作業(yè)生命周期的管理者,它的主要功能就是向ResourceManager申請(qǐng)計(jì)算資源(Containers)并且和NodeManager交互來(lái)執(zhí)行和監(jiān)控具體的Task。YARN很好解決了MapReduce1.0中的局限性。具有支持非MapReduce應(yīng)用的需求、可擴(kuò)展性、資源利用率高、用戶(hù)敏捷性、高可用的特性。Hadoop2.0Hadoop2.0(YARN)允許每個(gè)節(jié)點(diǎn)(NodeManager)配置可用的CPU和內(nèi)存資源總量,而中央調(diào)度器則會(huì)根據(jù)這些資源總量分配給應(yīng)用程序。節(jié)點(diǎn)(NodeManager)配置參數(shù)如下:(1)yarn.nodemanager.resource.memory-mb可分配的物理內(nèi)存總量,默認(rèn)是8*1024,即8GB。(2)yarn.nodemanager.vmem-pmem-ratio任務(wù)使用單位物理內(nèi)存量對(duì)應(yīng)最多可使用的虛擬內(nèi)存量,默認(rèn)值是2.1,表示每使用1MB的物理內(nèi)存,最多可以使用2.1MB的虛擬內(nèi)存總量。(3)yarn.nodemanager.resource.cpu-vcore可分配的虛擬CPU個(gè)數(shù),默認(rèn)是8。對(duì)比Hadoop1.0僅采用了基于JVM的資源隔離,粒度相對(duì)粗糙的情況,Hadoop2.0還引入了基于cgroups的輕量級(jí)資源隔離方案,大大降低了同節(jié)點(diǎn)上任務(wù)間的相互干擾。
本章小結(jié)目錄
本章習(xí)題
Hadoop2.0
Hadoop1.0
Hadoop生態(tài)本章小結(jié)Hadoop是Apache最大的一個(gè)開(kāi)源項(xiàng)目,本章主要講述了Hadoop系統(tǒng)的發(fā)展歷史,介紹了Hadoop平臺(tái)的基本組成與生態(tài)系統(tǒng),包括MapRedcue并行計(jì)算框架、分布式文件系統(tǒng)HDFS、分布式數(shù)據(jù)庫(kù)管理系統(tǒng)Hbase等,最后介紹了Hadoop1.0內(nèi)核、Hadoop1.0系統(tǒng)的局限性,以及其改進(jìn)Hadoop2.0系統(tǒng)。
本章習(xí)題目錄
Hadoop2.0
Hadoop1.0
Hadoop生態(tài)
本章小結(jié)習(xí)題2-1MapReduce的基本設(shè)計(jì)思想出自哪里?習(xí)題2-2Hadoop平臺(tái)的基本組成與生態(tài)系統(tǒng)包含哪些子系統(tǒng)?習(xí)題2-3Hadoop1.0內(nèi)核組成是什么?習(xí)題2-4Hadoop1.0中的資源管理有哪些缺點(diǎn)?習(xí)題2-5Hadoop2.0內(nèi)核的組成是什么?請(qǐng)與Hadoop1.0內(nèi)核進(jìn)行對(duì)比說(shuō)明。習(xí)題2-6Hadoop2.0解決了Hadoop1.0的哪些局限性?習(xí)題第3章Hadoop分布式文件系統(tǒng)背景大數(shù)據(jù)處理面臨的第一個(gè)問(wèn)題是,如何有效存儲(chǔ)規(guī)模巨大的數(shù)據(jù)。傳統(tǒng)集中式存儲(chǔ)方案無(wú)法滿(mǎn)足大數(shù)據(jù)的存儲(chǔ)需求,為了解決大數(shù)據(jù)存儲(chǔ)挑戰(zhàn),需要采用分布式文件系統(tǒng),將數(shù)據(jù)分散存儲(chǔ)在多個(gè)節(jié)點(diǎn)上,以提高存儲(chǔ)容量、讀寫(xiě)性能和擴(kuò)展性。為了提供可擴(kuò)展的大數(shù)據(jù)存儲(chǔ)能力,Hadoop設(shè)計(jì)提供了一個(gè)分布式文件系統(tǒng)HDFS(HadoopDistributedFileSystem)。
HDFS的基本特征和架構(gòu)目錄
HDFS可靠性設(shè)計(jì)
HDFS文件系統(tǒng)操作命令
HDFS基本編程接口
HDFS文件系統(tǒng)
本章習(xí)題
本章小結(jié)HDFS的基本特征和架構(gòu)HDFS被設(shè)計(jì)成在普通的商用服務(wù)器節(jié)點(diǎn)構(gòu)成的集群上即可運(yùn)行,它和已有的分布式文件系統(tǒng)有很多相似的地方。但是,HDFS在某些重要的方面,具有有別于其他系統(tǒng)的獨(dú)特優(yōu)點(diǎn)。這個(gè)特殊的文件系統(tǒng)具有相當(dāng)強(qiáng)大的容錯(cuò)能力,保證其在成本低廉的普通商用服務(wù)器上也能很好地運(yùn)行,同時(shí)HDFS可以提供很高的數(shù)據(jù)吞吐能力。另外,HDFS可以采用流式訪(fǎng)問(wèn)的方式讀寫(xiě)數(shù)據(jù),在編程方式上,除了API的名稱(chēng)不一樣以外,通過(guò)HDFS讀寫(xiě)文件和通過(guò)本地文件系統(tǒng)讀寫(xiě)文件在代碼上基本類(lèi)似,因而非常易于編程使用。HDFS的基本特征2.高并發(fā)訪(fǎng)問(wèn)能力以多節(jié)點(diǎn)并發(fā)訪(fǎng)問(wèn)方式提供很高的數(shù)據(jù)訪(fǎng)問(wèn)帶寬(高數(shù)據(jù)吞吐率)??梢园褞挼拇笮〉缺壤龜U(kuò)展到集群中的全部節(jié)點(diǎn)上。1.大規(guī)模數(shù)據(jù)分布存儲(chǔ)能力以分布式存儲(chǔ)方式和良好的可擴(kuò)展性提供了大規(guī)模數(shù)據(jù)的存儲(chǔ)能力??苫诖罅糠植脊?jié)點(diǎn)上的本地文件系統(tǒng),構(gòu)建一個(gè)邏輯上具有巨大容量的分布式文件系統(tǒng)。整個(gè)文件系統(tǒng)的容量可隨集群中節(jié)點(diǎn)的增加而線(xiàn)性擴(kuò)展??纱鎯?chǔ)GB級(jí)到TB級(jí)別大小的單個(gè)文件,還可以支持在一個(gè)文件系統(tǒng)中存儲(chǔ)高達(dá)數(shù)千萬(wàn)量級(jí)的文件數(shù)量。為上層的大數(shù)據(jù)處理應(yīng)用程序提供了完全透明的數(shù)據(jù)存儲(chǔ)和訪(fǎng)問(wèn)功能支撐。3.強(qiáng)大的容錯(cuò)能力將數(shù)據(jù)以多副本的形式存儲(chǔ)(默認(rèn)副本數(shù)目是3),按照塊的方式隨機(jī)選擇存儲(chǔ)節(jié)點(diǎn)。在經(jīng)常有節(jié)點(diǎn)發(fā)生硬件故障的情況下,也能正確檢測(cè)硬件故障,并且能自動(dòng)從故障中快速恢復(fù),確保數(shù)據(jù)不丟失。4.順序式文件訪(fǎng)問(wèn)針對(duì)大數(shù)據(jù)批處理在大多數(shù)情況下都是大量簡(jiǎn)單數(shù)據(jù)記錄的順序處理特性,對(duì)順序式讀讀取進(jìn)行了優(yōu)化。支持大量數(shù)據(jù)的快速順序讀出。代價(jià)是對(duì)于隨機(jī)的訪(fǎng)問(wèn)負(fù)載較高。HDFS的基本特征5.簡(jiǎn)單的一致性模型(一次寫(xiě)多次讀)采用了簡(jiǎn)單的“一次寫(xiě)多次讀”模式訪(fǎng)問(wèn)文件。支持大量數(shù)據(jù)的一次寫(xiě)入、多次讀取。不支持已寫(xiě)入數(shù)據(jù)的更新操作,但允許在文件尾部添加新的數(shù)據(jù)。6.數(shù)據(jù)塊存儲(chǔ)模式與常規(guī)的文件系統(tǒng)不同,采用基于大粒度數(shù)據(jù)塊的方式存儲(chǔ)文件,默認(rèn)的塊大小是64MB。這樣做的好處是可以減少元數(shù)據(jù)的數(shù)量,并且可以允許將這些數(shù)據(jù)塊通過(guò)隨機(jī)方式選擇節(jié)點(diǎn),分布存儲(chǔ)在不同的地方。HDFS的基本特征HDFS架構(gòu)SecondaryNameNodeNameSpaceStateBlockMapNameNodeClientClientb1b2b3b2b3b4b1b2b4b4b1b3DataNodeDataNodeDataNodeDataNodeHeaatbeat&BlockReportHDFS是一個(gè)分布式文件系統(tǒng),具有高容錯(cuò)的特點(diǎn)。它可以部署在廉價(jià)的通用硬件上,提供高吞吐率的數(shù)據(jù)訪(fǎng)問(wèn),適合需要處理海量數(shù)據(jù)集的應(yīng)用程序。HDFS1.0的架構(gòu)總體采用了master/slave架構(gòu),主要由以下幾個(gè)組件組成
:Client、NameNode、SecondaryNameNode和DataNode
Client:Client(代表用戶(hù))通過(guò)與NameNode和DataNode交互訪(fǎng)問(wèn)HDFS中的文件。Client提供了一個(gè)類(lèi)似POSIX的文件系統(tǒng)接口供用戶(hù)調(diào)用。HDFS架構(gòu)NameNode:整個(gè)Hadoop集群中只有一個(gè)NameNode。它是整個(gè)系統(tǒng)的“總管”,負(fù)責(zé)管理HDFS的目錄樹(shù)和相關(guān)的文件元數(shù)據(jù)信息。這些信息是以“fsimage”(HDFS元數(shù)據(jù)鏡像文件)和“editlog”(HDFS文件改動(dòng)日志)兩個(gè)文件形式存放在本地磁盤(pán)。NameNode還負(fù)責(zé)監(jiān)控各個(gè)DataNode的健康狀態(tài),一旦發(fā)現(xiàn)某個(gè)DataNode宕掉,則將該DataNode移出HDFS并重新備份其上面的數(shù)據(jù)。HDFS架構(gòu)SecondaryNameNode:SecondaryNameNode最重要的任務(wù)并不是為NameNode元數(shù)據(jù)進(jìn)行熱備份,而是定期合并fsimage和edits日志,并傳輸給NameNode。DataNode:一般而言,每個(gè)Slave節(jié)點(diǎn)上安裝一個(gè)DataNode,它負(fù)責(zé)實(shí)際的數(shù)據(jù)存儲(chǔ),并將數(shù)據(jù)信息定期匯報(bào)給NameNode。DataNode以固定大小的block為基本單位組織文件內(nèi)容,默認(rèn)情況下block大小為64MB。為了保證數(shù)據(jù)可靠性,同一個(gè)block會(huì)被復(fù)制到多個(gè)DataNode上(默認(rèn)副本數(shù)為3)。HDFS架構(gòu)JNJNJNDNDNDNDNNNActiveNNStandbyDataNode會(huì)同時(shí)向兩個(gè)NN發(fā)送塊信息但只由活躍的NN控制傳遞NameNode節(jié)點(diǎn)狀態(tài)給JN進(jìn)行共享存儲(chǔ)到HDFS2.0時(shí),為了解決HDFS1.0版本中存在的NN單點(diǎn)故障問(wèn)題,提出使用主備N(xiāo)ameNode的方案,如圖所示。兩個(gè)namenode分別是activenamenode和standbynamenode,standby作為熱備份,從而在主namenode發(fā)生故障是迅速進(jìn)行故障轉(zhuǎn)移,兩個(gè)namenode只能一主一輔通過(guò)使用journalnode完成兩個(gè)namenode的元數(shù)據(jù)同步,通過(guò)使用zookeeper完成namenode的故障轉(zhuǎn)移(自動(dòng))。HDFS架構(gòu)HDFS的其他概念數(shù)據(jù)塊每個(gè)磁盤(pán)都有默認(rèn)的數(shù)據(jù)塊大小,這是磁盤(pán)進(jìn)行數(shù)據(jù)讀/寫(xiě)的最小單位。文件系統(tǒng)塊一般為幾千字節(jié),而磁盤(pán)塊一般為512字節(jié)。HDFS的塊大小默認(rèn)為128MB,
文件被劃分為多個(gè)塊進(jìn)行存儲(chǔ)。對(duì)分布式文件系統(tǒng)中的塊進(jìn)行抽象會(huì)帶來(lái)很多好處:一個(gè)文件的大小可以大于網(wǎng)絡(luò)中任意一個(gè)磁盤(pán)的容量,文件的所有塊并不需要存儲(chǔ)在同一個(gè)磁盤(pán)上,因此它們可以利用集群上的任意一個(gè)磁盤(pán)進(jìn)行存儲(chǔ)。用抽象塊而非整個(gè)文件作為存儲(chǔ)單元,大大簡(jiǎn)化了存儲(chǔ)子系統(tǒng)的設(shè)計(jì)。簡(jiǎn)化了存儲(chǔ)管理,同時(shí)也消除了對(duì)元數(shù)據(jù)的顧慮。塊還非常適合用于數(shù)據(jù)備份進(jìn)而提供數(shù)據(jù)容錯(cuò)能力和提高可用性。命名空間HDFS中的文件命名遵循了傳統(tǒng)的“目錄/子目錄/文件”格式。通過(guò)命令行或者是API可以創(chuàng)建目錄,并且將文件保存在目錄中;也可以對(duì)文件進(jìn)行創(chuàng)建、刪除、重命名操作。不過(guò),HDPS中不允許使用鏈接(硬鏈接和符號(hào)鏈接都不允許)。命名空間由NameNode管理,所有對(duì)命名空間的改動(dòng)(包括創(chuàng)建、刪除、重命名,或是改變屬性等,但是不包括打開(kāi)讀取、寫(xiě)入數(shù)據(jù))都會(huì)被HDFS記錄下來(lái)。HDFS允許用戶(hù)配置文件在HDFS上保存的副本數(shù)量,保存的副本數(shù)稱(chēng)作“副本因(ReplicationFactor),這個(gè)信息也保存在NameNode中HDFS的其他概念通信協(xié)議作為一個(gè)分布式文件系統(tǒng),HDFS中大部分的數(shù)據(jù)都是通過(guò)網(wǎng)絡(luò)進(jìn)行傳輸?shù)?。為了保證傳輸?shù)目煽啃裕琀DFS采用TCP協(xié)議作為底層的支撐協(xié)議。而用戶(hù)和DataNode的交互是通過(guò)發(fā)起遠(yuǎn)程過(guò)程調(diào)用(RemoteProcedureCall,RPC)、并由NameNode響應(yīng)來(lái)完成的。另外,NameNode不會(huì)主動(dòng)發(fā)起遠(yuǎn)程過(guò)程調(diào)用請(qǐng)求。應(yīng)用可以向NameNode主動(dòng)發(fā)起TCP連接。應(yīng)用和NameNode交互的協(xié)議稱(chēng)為Client協(xié)議,NameNode和DataNode交互的協(xié)議稱(chēng)為DataNode協(xié)議。HDFS的其他概念客戶(hù)端客戶(hù)端為用戶(hù)提供了一種可以通過(guò)與Linux中的Shell類(lèi)似的方式訪(fǎng)問(wèn)HDFS的數(shù)據(jù)??蛻?hù)端支持最常見(jiàn)的操作如(打開(kāi)、讀取、寫(xiě)入等);而且命令的格式也和Shell十分相似,大大方便了程序員和管理員的操作。除了命令行客戶(hù)端以外,HDFS還提供了應(yīng)用程序開(kāi)發(fā)時(shí)訪(fǎng)問(wèn)文件系統(tǒng)的客戶(hù)端編程接口。HDFS的其他概念塊緩存通常DataNode從磁盤(pán)中讀取塊,但對(duì)于訪(fǎng)問(wèn)頻繁的文件,其對(duì)應(yīng)的塊可能被顯式地緩存在DataNode的內(nèi)存中,以堆外塊緩存(off-heapblockcache)的形式存在。作業(yè)調(diào)度器通過(guò)在緩存塊的DataNode上運(yùn)行任務(wù),可以利用塊緩存的優(yōu)勢(shì)提高讀操作的性能。用戶(hù)或應(yīng)用通過(guò)在緩存池(Cachepool)中增加一個(gè)CacheDirective來(lái)告訴NameNode需要緩存哪些文件及存多久。緩存池是一個(gè)用于管理緩存權(quán)限和資源使用的管理性分組。HDFS的其他概念
HDFS可靠性設(shè)計(jì)目錄
HDFS的基本特征和架構(gòu)
HDFS文件系統(tǒng)操作命令
HDFS基本編程接口
HDFS文件系統(tǒng)
本章習(xí)題
本章小結(jié)HDFS數(shù)據(jù)塊多副本存儲(chǔ)設(shè)計(jì)作為一個(gè)分布式文件系統(tǒng),HDFS采用了在系統(tǒng)中保存多個(gè)副本的方式保存數(shù)據(jù)(以下簡(jiǎn)稱(chēng)多副本),且同一個(gè)數(shù)據(jù)塊的多個(gè)副本會(huì)存放在不同節(jié)點(diǎn)上。HDFS按照塊的方式隨機(jī)選擇存儲(chǔ)節(jié)點(diǎn),為了可以判斷文件是否出錯(cuò),副本個(gè)數(shù)默認(rèn)為3。出于數(shù)據(jù)傳輸代價(jià)以及錯(cuò)誤恢復(fù)等多方面的考慮,副本的保存并不是均勻分布在集群之中的。用這種多副本方式有以下幾個(gè)優(yōu)點(diǎn):采用多副本,可以讓客戶(hù)從不同的數(shù)據(jù)塊中讀取數(shù)據(jù),加快傳輸速度;因?yàn)镠DFS的DataNode之間通過(guò)網(wǎng)絡(luò)傳輸數(shù)據(jù),如果采用多個(gè)副本可以判斷數(shù)據(jù)傳輸是否出錯(cuò);多副本可以保證某個(gè)DataNode失效的情況下,不會(huì)丟失數(shù)據(jù)。HDFS高可靠性實(shí)現(xiàn)1.安全模式:HDFS啟動(dòng)時(shí),NameNode會(huì)進(jìn)入安全模式,檢查數(shù)據(jù)塊信息,確保數(shù)據(jù)安全。只有安全數(shù)據(jù)塊比例達(dá)到閾值,NameNode才會(huì)退出安全模式。2.SecondaryNameNode:SecondaryNameNode會(huì)備份NameNode元數(shù)據(jù),用于在NameNode失效時(shí)恢復(fù)。SecondaryNameNode周期性保存NameNode的FsImage和EditLog,
在NameNode失效,通過(guò)Se保存的FsImage和EditLog數(shù)據(jù)恢復(fù)出NameNode最近的狀態(tài),3.心跳包(HeartBeats)和副本重新創(chuàng)建(re-replication):NameNode定期向DataNode發(fā)送心跳包,檢查DataNode活性,DataNode收到心跳包后回復(fù)并執(zhí)行命令。發(fā)現(xiàn)DataNode失效后,重新創(chuàng)建副本到其他DataNode。HDFS高可靠性實(shí)現(xiàn)4.數(shù)據(jù)一致性:使用數(shù)據(jù)校驗(yàn)和機(jī)制保證數(shù)據(jù)傳輸?shù)囊恢滦?。傳輸?shù)據(jù)時(shí),數(shù)據(jù)和校驗(yàn)和一起傳輸。應(yīng)用收到數(shù)據(jù)后進(jìn)行校驗(yàn),確保數(shù)據(jù)完整性。5.租約:為防止多個(gè)進(jìn)程同時(shí)寫(xiě)入同一個(gè)文件??蛻?hù)端獲得租約后才能寫(xiě)入文件。租約到期后,客戶(hù)端需重新申請(qǐng)。可有效避免多人寫(xiě)入沖突。6.回滾:用于在升級(jí)導(dǎo)致問(wèn)題時(shí)回滾到舊版本。HDFS安裝或升級(jí)時(shí)會(huì)保存當(dāng)前版本信息。升級(jí)成功后會(huì)重新保存版本信息。升級(jí)失敗時(shí)可根據(jù)舊版本信息恢復(fù)HDFS。
HDFS文件系統(tǒng)目錄
HDFS的基本特征和架構(gòu)
HDFS文件系統(tǒng)操作命令
HDFS基本編程接口
HDFS可靠性設(shè)計(jì)
本章習(xí)題
本章小結(jié)NameNode目錄結(jié)構(gòu)NameNode的目錄結(jié)構(gòu)和內(nèi)容如上圖所示NameNode借助本地文件系統(tǒng)來(lái)保存數(shù)據(jù)保存的文件夾位置由配置選項(xiàng){.dir}決定(未配置此選項(xiàng),則為hadoop安裝目錄下的/tmp/dfs/name),所以,這里我們以${.dir}代表NameNode節(jié)點(diǎn)管理的根目錄目錄下的文件和子目錄則以${.dir}/file和${.dir}/subdir的格式表示。文件數(shù)據(jù)的存儲(chǔ)組織在NameNode的${.dir}之下有3個(gè)文件夾和1個(gè)文件:current目錄:主要包含如下的內(nèi)容和結(jié)構(gòu):a)文件VERSION:保存了當(dāng)前運(yùn)行的HDFS版本信息。b)FsImage:是整個(gè)系統(tǒng)的空間鏡像文件。c)Edit:EditLog編輯日志。d)Fstime:上一次檢查點(diǎn)的時(shí)間。previous.checkpoint目錄:和current內(nèi)容結(jié)構(gòu)一致,不同之處在于,此目錄保存的是上一次檢查點(diǎn)的內(nèi)容。image目錄:舊版本(版本<0.13)的FsImage存儲(chǔ)位置。in_use.lock:
NameNode鎖,只在NameNode有效(啟動(dòng)并且能和DataNode正常交互)時(shí)存在;不滿(mǎn)足上述情況時(shí),該文件不存在。這一文件具有“鎖”的功能,可以防止多個(gè)NameNode共享同一目錄。NameNode目錄結(jié)構(gòu)DataNode的目錄結(jié)構(gòu)和內(nèi)容如上圖所示。DataNode借助本地文件系統(tǒng)來(lái)保存數(shù)據(jù),一般情況下,保存的文件夾位置由配置選項(xiàng){dfs.data.dir}決定(未配置此選項(xiàng),則為hadoop安裝目錄下的/tmp/dfs/data)。所以,這里我們以${dfs.data.dir}代表DataNode節(jié)點(diǎn)管理的數(shù)據(jù)目錄的根目錄,目錄下的文件和子目錄則以${dfs.data.dir}/file和${dfs.data.dir}/subdir的格式表示。文件數(shù)據(jù)的存儲(chǔ)組織DataNode目錄結(jié)構(gòu)一般來(lái)說(shuō),在${dfs.data.dir}之下有4個(gè)子目錄和2個(gè)文件:
current目錄:已經(jīng)成功寫(xiě)入的數(shù)據(jù)塊,以及一些系統(tǒng)需要的文件。包括以下內(nèi)容:a)文件VERSION:保存了當(dāng)前運(yùn)行的HDFS版本信息。b)Blk_XXXXX和Blk_XXXXX.Meta:分別是數(shù)據(jù)塊和數(shù)據(jù)塊對(duì)應(yīng)的元數(shù)據(jù)(比如校驗(yàn)信息等)。c)subdirXX:當(dāng)同一目錄下文件數(shù)超過(guò)一定限制(比如64)時(shí),會(huì)新建一個(gè)subdir目錄,保存多出來(lái)的數(shù)據(jù)塊和元數(shù)據(jù);這樣可以保證同一目錄下目錄+文件數(shù)不會(huì)太多,可以提高搜索效率。DataNode目錄結(jié)構(gòu)detach目錄:用于DataNode升級(jí)。storage文件:由于舊版本(版本<0.13)的存儲(chǔ)目錄是storage,因此如果在新版本的DataNode中啟動(dòng)舊版的HDFS,會(huì)因?yàn)闊o(wú)法打開(kāi)storage目錄而啟動(dòng)失敗,這樣可以防止因版本不同帶來(lái)的風(fēng)險(xiǎn)。in_use.lock文件:DataNode鎖,只有在DataNode有效(啟動(dòng)并且能和NameNode正常交互)時(shí)存在;不滿(mǎn)足上述情況時(shí),該文件不存在。這一文件具有“鎖”的功能,可以防止多個(gè)DataNode共享同一目錄tmp目錄和blocksBeingWritten目錄:正在寫(xiě)入的數(shù)據(jù)塊,tmp目錄保存的是用戶(hù)操作引發(fā)的寫(xiě)入操作對(duì)應(yīng)的數(shù)據(jù)塊,blocksBeingWritten目錄是HDFS系統(tǒng)內(nèi)部副本創(chuàng)建時(shí)(當(dāng)出現(xiàn)副本錯(cuò)誤或者數(shù)量不夠等情況時(shí))引發(fā)的寫(xiě)入操作對(duì)應(yīng)的數(shù)據(jù)塊。DataNode目錄結(jié)構(gòu)CheckPointNode目錄結(jié)構(gòu)CheckPointNode的目錄結(jié)構(gòu)和內(nèi)容如上圖所示。CheckPointNode和舊版本的SecondaryNameNode作用類(lèi)似,所以目錄結(jié)構(gòu)也十分相近。CheckPointNode借助本地文件系統(tǒng)來(lái)保存數(shù)據(jù),一般情況下,保存的文件夾位置由配置選項(xiàng){dfs.checkpoint.dir}決定(未配置此選項(xiàng),則為hadoop安裝目錄下的/tmp/dfs/namesecondary)。文件數(shù)據(jù)的存儲(chǔ)組織CheckPointNode目錄結(jié)構(gòu)我們以${dfs.checkpoint.dir}代表CheckPointNode節(jié)點(diǎn)管理的數(shù)據(jù)目錄的根目錄,目錄下的文件和子目錄則以${dfs.checkpoint.dir}和file,${dfs.checkpoint.dir}/subdir的格式表示CheckPointNode目錄下的文件和NameNode目錄下的同名文件作用基本一致,不同之處在于CheckPointNode保存的是自上一個(gè)檢查點(diǎn)之后的臨時(shí)鏡像和日志。HDFS客戶(hù)端FSDataInputStreamDistribudedFileSysytem客戶(hù)端JVM客戶(hù)端節(jié)點(diǎn)DataNodeDataNodeDataNodeDataNodeHDFS元數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)1.打開(kāi)文件6.關(guān)閉文件3.讀取請(qǐng)求2.讀取數(shù)據(jù)塊信息4.5:(可能)讀取數(shù)據(jù)塊信息4.讀取數(shù)據(jù)5.讀取數(shù)據(jù)數(shù)據(jù)讀取過(guò)程1)首先,客戶(hù)端調(diào)用FileSystem實(shí)例的open方法,獲得這個(gè)文件對(duì)應(yīng)的輸入流,在HDFS中就是DFSInputStream。數(shù)據(jù)讀寫(xiě)過(guò)程HDFS客戶(hù)端FSDataInputStreamDistribudedFileSysytem客戶(hù)端JVM客戶(hù)端節(jié)點(diǎn)DataNodeDataNodeDataNodeDataNodeHDFS元數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)1.打開(kāi)文件6.關(guān)閉文件3.讀取請(qǐng)求2.讀取數(shù)據(jù)塊信息4.5:(可能)讀取數(shù)據(jù)塊信息4.讀取數(shù)據(jù)5.讀取數(shù)據(jù)數(shù)據(jù)讀取過(guò)程2)構(gòu)造第1步中的輸入流DFSInputStream時(shí),通過(guò)RPC遠(yuǎn)程調(diào)用NameNode可以獲得NameNode中此文件對(duì)應(yīng)的數(shù)據(jù)塊保存位置,包括這個(gè)文件的副本的保存位置(主要是各DataNode的地址)。注意,在輸人流中會(huì)按照網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),根據(jù)與客戶(hù)端距離對(duì)DataNode進(jìn)行簡(jiǎn)單排序。HDFS客戶(hù)端FSDataInputStreamDistribudedFileSysytem客戶(hù)端JVM客戶(hù)端節(jié)點(diǎn)DataNodeDataNodeDataNodeDataNodeHDFS元數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)1.打開(kāi)文件6.關(guān)閉文件3.讀取請(qǐng)求2.讀取數(shù)據(jù)塊信息4.5:(可能)讀取數(shù)據(jù)塊信息4.讀取數(shù)據(jù)5.讀取數(shù)據(jù)3~4)獲得此輸入流之后,客戶(hù)端調(diào)用read方法讀取數(shù)據(jù)。輸入流DFSInputStream會(huì)根據(jù)前面的排序結(jié)果,選擇最近的DataNode建立連接并讀取數(shù)據(jù)。如果客戶(hù)端和其中一個(gè)DataNode位于同一機(jī)器(比如MapReduce過(guò)程中的mapper和reducer),那么就會(huì)直接從本地讀取數(shù)據(jù)。數(shù)據(jù)讀取過(guò)程HDFS客戶(hù)端FSDataInputStreamDistribudedFileSysytem客戶(hù)端JVM客戶(hù)端節(jié)點(diǎn)DataNodeDataNodeDataNodeDataNodeHDFS元數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)1.打開(kāi)文件6.關(guān)閉文件3.讀取請(qǐng)求2.讀取數(shù)據(jù)塊信息4.5:(可能)讀取數(shù)據(jù)塊信息4.讀取數(shù)據(jù)5.讀取數(shù)據(jù)5)如果已到達(dá)數(shù)據(jù)塊末端,那么關(guān)閉與這個(gè)DataNode的連接,然后重新查找下一個(gè)數(shù)據(jù)塊。不斷執(zhí)行第2~5步直到數(shù)據(jù)全部讀完,然后調(diào)用close。6)客戶(hù)端調(diào)用close,關(guān)閉輸入流DFSInputStream。數(shù)據(jù)讀取過(guò)程HDFS客戶(hù)端FSDataOutputStreamDistribudedFileSysytem客戶(hù)端JVM客戶(hù)端節(jié)點(diǎn)DataNodeDataNodeDataNodeDataNodeHDFS元數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)1.創(chuàng)建文件請(qǐng)求6.關(guān)閉文件3.寫(xiě)入數(shù)據(jù)2.創(chuàng)建文件元數(shù)據(jù)7.寫(xiě)操作完成4.寫(xiě)入數(shù)據(jù)包5.接受ACK45451~2)客戶(hù)端調(diào)用FileSystem實(shí)例的create方法,創(chuàng)建文件。NameNode通過(guò)一些檢查,比如文件是否存在,客戶(hù)端是否擁有創(chuàng)建權(quán)限等;通過(guò)檢查之后,在NameNode添加文件信息。注意,因?yàn)榇藭r(shí)文件沒(méi)有數(shù)據(jù),所以NameNode上也沒(méi)有文件數(shù)據(jù)塊的信息。在創(chuàng)建任務(wù)結(jié)束之后,HDFS會(huì)返回一個(gè)輸出流DFSDataOutputStream給客戶(hù)端。數(shù)據(jù)寫(xiě)入過(guò)程數(shù)據(jù)讀寫(xiě)過(guò)程HDFS客戶(hù)端FSDataOutputStreamDistribudedFileSysytem客戶(hù)端JVM客戶(hù)端節(jié)點(diǎn)DataNodeDataNodeDataNodeDataNodeHDFS元數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)1.創(chuàng)建文件請(qǐng)求6.關(guān)閉文件3.寫(xiě)入數(shù)據(jù)2.創(chuàng)建文件元數(shù)據(jù)7.寫(xiě)操作完成4.寫(xiě)入數(shù)據(jù)包5.接受ACK45453)客戶(hù)端調(diào)用輸出流DFSDataOutputStream的write方法向HDFS中對(duì)應(yīng)的文件寫(xiě)入數(shù)據(jù)。數(shù)據(jù)首先會(huì)被分包,這些分包會(huì)寫(xiě)入一個(gè)輸出流的內(nèi)部隊(duì)列Data隊(duì)列中,接收完數(shù)據(jù)分包,輸出流DFSDataOutputStream會(huì)向NameNode申請(qǐng)保存文件和副本數(shù)據(jù)塊的若干個(gè)DataNode,這若干個(gè)DataNode會(huì)形成一個(gè)數(shù)據(jù)傳輸管道。數(shù)據(jù)寫(xiě)入過(guò)程HDFS客戶(hù)端FSDataOutputStreamDistribudedFileSysytem客戶(hù)端JVM客戶(hù)端節(jié)點(diǎn)DataNodeDataNodeDataNodeDataNodeHDFS元數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)1.創(chuàng)建文件請(qǐng)求6.關(guān)閉文件3.寫(xiě)入數(shù)據(jù)2.創(chuàng)建文件元數(shù)據(jù)7.寫(xiě)操作完成4.寫(xiě)入數(shù)據(jù)包5.接受ACK45454)DFSDataOutputStream會(huì)(根據(jù)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)排序)將數(shù)據(jù)傳輸給距離上最短的DataNode,這個(gè)DataNode接收到數(shù)據(jù)包之后會(huì)傳給下一個(gè)DataNode。數(shù)據(jù)在各DataNode之間通過(guò)管道流動(dòng),而不是全部由輸出流分發(fā),這樣可以減少傳輸開(kāi)銷(xiāo)。數(shù)據(jù)寫(xiě)入過(guò)程HDFS客戶(hù)端FSDataOutputStreamDistribudedFileSysytem客戶(hù)端JVM客戶(hù)端節(jié)點(diǎn)DataNodeDataNodeDataNodeDataNodeHDFS元數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)HDFS數(shù)據(jù)1.創(chuàng)建文件請(qǐng)求6.關(guān)閉文件3.寫(xiě)入數(shù)據(jù)2.創(chuàng)建文件元數(shù)據(jù)7.寫(xiě)操作完成4.寫(xiě)入數(shù)據(jù)包5.接受ACK45455)因?yàn)楦鱀ataNode位于不同機(jī)器上,數(shù)據(jù)需要通過(guò)網(wǎng)絡(luò)發(fā)送,所以,為了保證所有DataNode的數(shù)據(jù)都是準(zhǔn)確的,接收到數(shù)據(jù)的DataNode要向發(fā)送者發(fā)送確認(rèn)包(ACKPacket)。對(duì)于某個(gè)數(shù)據(jù)塊,只有當(dāng)DFSDataOutputStream收到了所有DataNode的正確ACK,才能確認(rèn)傳輸結(jié)束。DFSDataOutputStream內(nèi)部專(zhuān)門(mén)維護(hù)了一個(gè)等待ACK隊(duì)列這一隊(duì)列保存已經(jīng)進(jìn)入管道傳輸數(shù)據(jù)、但是并未被完全確認(rèn)的數(shù)據(jù)包。數(shù)據(jù)寫(xiě)入過(guò)程HD
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《健康管理與治理》課件
- 學(xué)校vi合同范例
- 公寓租賃辦公合同模板
- 制作娃娃協(xié)議合同范例
- 影視合作合同范例
- 新質(zhì)生產(chǎn)力支持智慧養(yǎng)老
- 工地工人雇傭合同模板
- IT行業(yè)新潮:突圍之道
- 開(kāi)荒保潔施工合同模板
- 在新一批援疆教師歡送會(huì)上的演講稿
- 形式發(fā)票樣本(Proforma Invoice)
- 醫(yī)院車(chē)輛加油卡管理制度
- 臨床路徑實(shí)施情況、存在問(wèn)題及整改措施
- 數(shù)獨(dú)題目高級(jí)50題(后附答案)【最新】
- (完整word版)上海博物館文物術(shù)語(yǔ)中英文對(duì)照
- 問(wèn)題線(xiàn)索辦理呈批表
- 調(diào)度自動(dòng)化及通信技術(shù)監(jiān)督實(shí)施細(xì)則
- 學(xué)、練、評(píng)一體化課堂模式下賽的兩個(gè)問(wèn)題與對(duì)策
- 陜西省尾礦資源綜合利用
- 磁懸浮列車(chē)(課堂PPT)
- 常見(jiàn)藥品配伍表
評(píng)論
0/150
提交評(píng)論