大數(shù)據(jù)與機(jī)器學(xué)習(xí)第十與十一章_第1頁
大數(shù)據(jù)與機(jī)器學(xué)習(xí)第十與十一章_第2頁
大數(shù)據(jù)與機(jī)器學(xué)習(xí)第十與十一章_第3頁
大數(shù)據(jù)與機(jī)器學(xué)習(xí)第十與十一章_第4頁
大數(shù)據(jù)與機(jī)器學(xué)習(xí)第十與十一章_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

大數(shù)據(jù)與機(jī)器學(xué)習(xí)

第十章Flink介紹產(chǎn)生背景因?yàn)镾park是流處理的實(shí)時計(jì)算,還有0.5秒延遲。而ApacheStorm雖然是實(shí)時計(jì)算引擎,但其吞吐量較小,還會有數(shù)據(jù)丟失和重復(fù)(最多一次和最少一次),而Flink做到了嚴(yán)格一次的容錯語義,且底層是真正的流式計(jì)算。原理Flink主要有兩類進(jìn)程:JobManager和TaskManagerJobManager(masters):協(xié)調(diào)分布式計(jì)算、任務(wù)調(diào)度,協(xié)調(diào)checkpoints,錯誤調(diào)度等,相當(dāng)于一個指揮官吧(實(shí)際部署時,至少需要一個JobManager,實(shí)際生產(chǎn)環(huán)境部署時都會做HA,部署多個JobManager;這個時候,只有一個leader,其他都是standby模式)TaskManager(workers):真正執(zhí)行dataflow的,并對streams進(jìn)行緩存和交換總的來說,運(yùn)行中的Flink集群至少有一個JobManager進(jìn)程和一個TaskManager進(jìn)程。如果將客戶端也算進(jìn)去的話,那么還有一個Client進(jìn)程。各個進(jìn)程一般部署在不同的機(jī)子上,不過也可以部署在同一臺機(jī)子上,就比如說在本地啟動一個集群時(Local模式,通常用于開發(fā)調(diào)試),JobManager進(jìn)程和TaskManager進(jìn)程就是跑在同一臺服務(wù)器上。Flink是基于AkkaActor實(shí)現(xiàn)的JobManager和TaskManager,所以JobManager和TaskManager以及Client之間的信息交互都會通過事件的方式來進(jìn)行處理的。一個簡單的流程就是,Client提交任務(wù)作業(yè)給JobManager,JobManager負(fù)責(zé)該作業(yè)的調(diào)度和資源分配(在Flink集群中,計(jì)算資源被定義為TaskSlot。每個TaskManager會擁有一個或多個Slots),隨后將作業(yè)分給對應(yīng)的TaskManager,TaskManager收到任務(wù)后,啟動線程去執(zhí)行,并向JobManager報告任務(wù)狀態(tài)和自身運(yùn)行狀態(tài)等。當(dāng)任務(wù)結(jié)束后,JobManager將收到通知,并統(tǒng)計(jì)數(shù)據(jù)后發(fā)送給Client。Flink認(rèn)為批處理是流處理的一個特例,這與Spark相反,他將流處理按時間切割,然后批處理。Flink底層引擎是一個流式引擎,在其上實(shí)現(xiàn)了流處理和批處理。而Flink的窗口將流處理(無界數(shù)據(jù))轉(zhuǎn)變?yōu)榕幚恚ㄓ薪鐢?shù)據(jù))。Flink將窗口內(nèi)的數(shù)據(jù)進(jìn)行聚合計(jì)算。Flink是事件型處理,即通過事件觸發(fā)來進(jìn)行流式處理。其窗口分為三類:事件觸發(fā)時間event-time:進(jìn)入時間IngesingtTime:處理時間Processing-time:第十一章HBase介紹Hbase產(chǎn)生背景HBase為NOSQL非關(guān)系型數(shù)據(jù)庫,所以支持半結(jié)構(gòu)和非結(jié)構(gòu)化的海量大數(shù)據(jù)存儲。是關(guān)系型數(shù)據(jù)庫無法滿足海量數(shù)據(jù)需求而誕生的。HBase依賴HDFS的物理存儲,是海量數(shù)據(jù)實(shí)時查詢工具。因其列存儲特性而查詢速度快,被廣泛使用實(shí)時數(shù)據(jù)查詢與監(jiān)控。但僅可支持簡單查詢,隨機(jī)查詢。列式存儲:一條記錄按照姓名進(jìn)行一列存儲。行式存儲:一條記錄按照姓名,年齡,性別的行式存儲。隨機(jī)查詢:相對于順序查詢,可隨機(jī)抽取數(shù)據(jù)查詢。HIVE與HBase區(qū)分HIVE是數(shù)據(jù)統(tǒng)計(jì)查詢:即通過SQL調(diào)用MapReduce的數(shù)據(jù)統(tǒng)計(jì)后的數(shù)據(jù),即在統(tǒng)計(jì)一段時間內(nèi)的數(shù)據(jù)計(jì)算后的結(jié)果數(shù)據(jù)。HBase是海量數(shù)據(jù)的簡單實(shí)時查詢,即實(shí)時查詢網(wǎng)站生成的數(shù)據(jù)(非統(tǒng)計(jì)結(jié)果數(shù)據(jù)),而后通過NOShhQL并以列存儲方式存儲在HDFS上??偨Y(jié):HIVE數(shù)倉工具從HDFS中通過SQL啟動MapReduce來取數(shù)據(jù)進(jìn)行數(shù)據(jù)分析。而HBASE是將日志文件數(shù)據(jù)寫入HDFS過程。當(dāng)然也可以快速隨機(jī)查詢海量數(shù)據(jù)中的某一列或多列數(shù)據(jù),但僅查詢。不像Reduce是進(jìn)行統(tǒng)計(jì)。HBase架構(gòu)原理HBase簡介 Hbase是分布式,列式數(shù)據(jù)庫,適用于非結(jié)構(gòu)化數(shù)據(jù)存儲。它是基于Hadoop中的Bigtable論文思想產(chǎn)生的,即世界上的事務(wù)都可以通過Bigtable來表示。即Bigtable用若干Key-Value來存儲表示。如<學(xué)號:課程><學(xué)號:姓名><學(xué)號:分?jǐn)?shù)>產(chǎn)生背景由于HDFS無法對存儲數(shù)據(jù)修改,因此產(chǎn)生了HBASE,可以在HBAS上進(jìn)行數(shù)據(jù)修改,但每次修改只是插入一條有時間戳的新版本的數(shù)據(jù),而不覆蓋舊數(shù)據(jù)。可通過版本號來區(qū)分?jǐn)?shù)據(jù)。而新的數(shù)據(jù)提取可按照兩種方式:版本指定:通過指定版本保存的范圍。如只提取前10個版本。時間戳指定:通過指定時間保存的范圍。如數(shù)據(jù)只保存7天。列族與元素每個列構(gòu)成列族。列族可以包含多個列。列族需要通過限定符提前定義格式。<列族>:<限定符>,HBASE按照列族存儲數(shù)據(jù),適于數(shù)據(jù)分析和壓縮數(shù)據(jù),提高讀寫速率。行鍵RowKEY相同時,按照B+數(shù)據(jù)索引進(jìn)行相同列族ColumnFamily數(shù)據(jù)索引查詢,列族在相同時候,進(jìn)行TimeStamp時間戳快速排序后查詢。HBASE先橫向切分行數(shù)據(jù),在縱向切分列數(shù)據(jù)。切分的行列數(shù)據(jù)為元素。元素保存同一份數(shù)據(jù)的多個版本,由時間戳區(qū)分。行Key時間戳列族...列族19Contexts:html...Key:Value行鍵:行數(shù)據(jù)檢索的主鍵和唯一標(biāo)識。最大不超過64KB任意字符,按照數(shù)據(jù)字典存儲。物理模型HLog日志文件:操作寫入日志,以便掛掉時候,重新讀取日志恢復(fù)。WAL(Write-Ahead-Log預(yù)寫日志)將更新操作先寫入MemStore內(nèi)存然后持久化寫入HFile,這樣保證了一旦RegionServer掛掉時,還沒將數(shù)據(jù)寫入HFile時數(shù)據(jù)會丟失。此時從日志中讀取操作可以恢復(fù)數(shù)據(jù)。主從節(jié)點(diǎn)HMaster和HRegionServer:HMaster負(fù)責(zé)分配Region給Server。Region就是列族,含有多個列的分布式存儲單元。HMaster將元數(shù)據(jù)信息(Server位置和表、列族位置)存入ZooKeeper,以便Client端讀取。Region含有多個Store即一列數(shù)據(jù),多個列Store構(gòu)成一個列族即Region,多個列族Region構(gòu)成一個表,即RegionServer里只存放一個表的數(shù)據(jù)。而RegionServer數(shù)據(jù)大小是按照HDFS中默認(rèn)的BLOCK行切割,即橫向切割而來的。比如把一個文件橫向相同行間隔128M切割多份保存到Server。當(dāng)RegionServer底層文件HFile越來越大時候,將把原有的Region分列開兩個新的表,即分開為兩個RegionServer分別分布式存儲在新的一臺服務(wù)器上后,將原有的表刪除。ZooKeeper為HMaster提供HA(HighlyAvailable雙機(jī))方案,保證至少一臺Master處于運(yùn)行狀態(tài)。詳細(xì)查看Kafka的failover相似過程。Store即列族中包含MemStore內(nèi)存緩存和StoreFile實(shí)際物理存儲在HDFS上的文件MemStore是HBASE先將數(shù)據(jù)讀入內(nèi)存,當(dāng)內(nèi)存滿了的時候,在將文件寫入多個小文件HFile,當(dāng)多個小文件File達(dá)到閥值標(biāo)準(zhǔn)時候就自動組合成一個大文件StoreFile。此過程與Map和Reduce過程是一樣的,先寫內(nèi)存在寫小文件最后組合成大文件。BlockCache是ReginoServer內(nèi)存構(gòu)成的兩個部分之一。Memstore是寫數(shù)據(jù),BlockCache是讀數(shù)據(jù)。讀請求先到MStore查數(shù)據(jù),查不到就去BlockCache查,再查不到就去StoreFile中去讀,并把讀的結(jié)果放入BlockCache,客戶端會緩存讀取記錄,方便下次查詢直接使用。StoreFile是由多個HFile組成,StoreFile把多個HFile在進(jìn)行封裝。封裝信息和格式如下:首先HFile文件是不定長的,長度固定的只有其中的兩塊:Trailer和FileInfo。正如圖中所示:Trailer中有指針指向其他數(shù)據(jù)塊的起始點(diǎn)。FileInfo中記錄了文件的一些Meta信息,例如:AVG_KEY_LEN,AVG_VALUE_LEN,LAST_KEY,COMPARATOR,MAX_SEQ_ID_KEY等。HFile分為六個部分:DataBlock

段–保存表中的數(shù)據(jù),這部分可以被壓縮MetaBlock

段(可選的)–保存用戶自定義的kv對,可以被壓縮。FileInfo

段–Hfile的元信息,不被壓縮,用戶也可以在這一部分添加自己的元信息。DataBlockIndex

段–DataBlock的索引。每條索引的key是被索引的block的第一條記錄的key。MetaBlockIndex

段(可選的)–MetaBlock的索引。Trailer

段–這一段是定長的。保存了每一段的偏移量,讀取一個HFile時,會首先讀取Trailer,Trailer保存了每個段的起始位置(段的MagicNumber用來做安全check),然后,DataBlockIndex會被讀取到內(nèi)存中,這樣,當(dāng)檢索某個key時,不需要掃描整個HFile,而只需從內(nèi)存中找到key所在的block,通過一次磁盤io將整個block讀取到內(nèi)存中,再找到需要的key。DataBlockIndex采用LRU機(jī)制淘汰。HFile的DataBlock,MetaBlock通常采用壓縮方式存儲,壓縮之后可以大大減少網(wǎng)絡(luò)IO和磁盤IO,隨之而來的開銷當(dāng)然是需要花費(fèi)cpu進(jìn)行壓縮和解壓縮。目標(biāo)Hfile的壓縮支持兩種方式:Gzip,LZO。DataIndex和MetaIndex塊記錄了每個Data塊和Meta塊的起始點(diǎn)。DataBlock是HBaseI/O的基本單元,為了提高效率,HRegionServer中有基于LRU的BlockCache機(jī)制。每個Data塊的大小可以在創(chuàng)建一個Table的時候通過參數(shù)指定,大號的Block有利于順序Scan,小號Block利于隨機(jī)查詢。每個Data塊除了開頭的Magic以外就是一個個KeyValue對拼接而成,Magic內(nèi)容就是一些隨機(jī)數(shù)字,目的是防止數(shù)據(jù)損壞。HFile里面的每個

KeyValue

對就是一個簡單的byte數(shù)組。但是這個byte數(shù)組里面包含了很多項(xiàng),并且有固定的結(jié)構(gòu)。我們來看看里面的具體結(jié)構(gòu):

開始是兩個固定長度的數(shù)值,分別表示Key的長度和Value的長度。緊接著是Key,開始是固定長度的數(shù)值,表示RowKey的長度,緊接著是RowKey,然后是固定長度的數(shù)值,表示Family的長度,然后是Family,接著是Qualifier,然后是兩個固定長度的數(shù)值,表示TimeStamp和KeyType(Put/Delete)。Value部分沒有這么復(fù)雜的結(jié)構(gòu),就是純粹的二進(jìn)制數(shù)據(jù)了。HBas

溫馨提示

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

最新文檔

評論

0/150

提交評論