大數(shù)據(jù)經(jīng)典面試題答疑---經(jīng)常問(wèn)的原理問(wèn)題總結(jié)(系列文章,持續(xù)更新),幫你解決大數(shù)據(jù)開(kāi)發(fā)中的困擾。
1. hive+MapReduce
答案區(qū):
1.hbase
1.1. hbase基礎(chǔ)
1.1.1. hbase數(shù)據(jù)模型
1.1.2. Row Key
概括:最大64KB;在hbase中以字節(jié)數(shù)組保存;不同rowkey按字典順序排序
1.1.3. Columns Family
列簇 :HBASE表中的每個(gè)列,都?xì)w屬于某個(gè)列族。列族是表的schema的一部分(而列不是),必須在使用表之前定義。列名都以列族作為前綴。例如 courses:history,courses:math都屬于courses 這個(gè)列族。
1.1.4. Cell
由{row key, columnFamily, version} 唯一確定的單元。cell中 的數(shù)據(jù)是沒(méi)有類型的,全部是字節(jié)碼形式存貯。
關(guān)鍵字:無(wú)類型、字節(jié)碼
1.1.5. Time Stamp
HBASE 中通過(guò)rowkey和columns確定的為一個(gè)存貯單元稱為cell。每個(gè) cell都保存 著同一份數(shù)據(jù)的多個(gè)版本。版本通過(guò)時(shí)間戳來(lái)索引。時(shí)間戳的類型是 64位整型。時(shí)間戳可以由HBASE(在數(shù)據(jù)寫(xiě)入時(shí)自動(dòng) )賦值,此時(shí)時(shí)間戳是精確到毫秒的當(dāng)前系統(tǒng)時(shí)間。時(shí)間戳也可以由客戶顯式賦值。如果應(yīng)用程序要避免數(shù)據(jù)版 本沖突,就必須自己生成具有唯一性的時(shí)間戳。每個(gè) cell中,不同版本的數(shù)據(jù)按照時(shí)間倒序排序,即最新的數(shù)據(jù)排在最前面。
為了避免數(shù)據(jù)存在過(guò)多版本造成的的管理 (包括存貯和索引)負(fù)擔(dān),HBASE提供 了兩種數(shù)據(jù)版本回收方式。
一是保存數(shù)據(jù)的最后n個(gè)版本;
二是保存最近一段 時(shí)間內(nèi)的版本(比如最近七天)。用戶可以針對(duì)每個(gè)列族進(jìn)行設(shè)置。
1.2. 原理
Region是Hbase中分布式存儲(chǔ)和負(fù)載均衡的最小單元,不同Region分布到不同RegionServer上。
Region雖然是分布式存儲(chǔ)的最小單元,但并不是存儲(chǔ)的最小單元。Region由一個(gè)或者多個(gè)Store組成,每個(gè)store保存一個(gè)columns family;每個(gè)Strore又由一個(gè)memStore和0至多個(gè)StoreFile組成,StoreFile包含HFile;memStore存儲(chǔ)在內(nèi)存中,StoreFile存儲(chǔ)在HDFS上。
1.2.1. 寫(xiě)流程:
1、client向hregionserver發(fā)送寫(xiě)請(qǐng)求。
2、hregionserver將數(shù)據(jù)寫(xiě)到hlog(write ahead log)。為了數(shù)據(jù)的持久化和恢復(fù)。
3、hregionserver將數(shù)據(jù)寫(xiě)到內(nèi)存(memstore)
4、反饋client寫(xiě)成功。
1.2.2. 數(shù)據(jù)flush:
1、當(dāng)memstore數(shù)據(jù)達(dá)到閾值(默認(rèn)是128M)或region中所有Memstore的大小總和達(dá)到了上限(默認(rèn) 2*128 = 256MB)會(huì)觸發(fā)將將數(shù)據(jù)刷到硬盤,將內(nèi)存中的數(shù)據(jù)刪除,同時(shí)刪除Hlog中的歷史數(shù)據(jù)。
2、并將數(shù)據(jù)存儲(chǔ)到hdfs中。
3、在hlog中做標(biāo)記點(diǎn)。
1.2.3. 數(shù)據(jù)compact(合并):
將storefile 中的hfile 合并成大的hfile;
在hbase中主要存在兩種類型的compaction合并
minor compaction 小合并
在將Store中多個(gè)HFile合并為一個(gè)HFile,對(duì)于超過(guò)了TTL的數(shù)據(jù)、刪除的數(shù)據(jù)僅僅只是做了標(biāo)記。
major compaction 大合并
合并Store中所有的HFile為一個(gè)HFile,清理三類無(wú)意義數(shù)據(jù):被刪除的數(shù)據(jù)、TTL過(guò)期數(shù)據(jù)、版本號(hào)超過(guò)設(shè)定版本號(hào)的數(shù)據(jù)。默認(rèn)7天執(zhí)行一次,并且性能消耗非常大。手動(dòng)觸發(fā):major_compact tableName
1.2.4. 讀流程
1、通過(guò)zookeeper和-ROOT- .META.表定位region
2、hbase會(huì)首先在布隆過(guò)濾器中查詢(如果設(shè)置的話),然后MemStore,BlockCache(LRUCache存放最近讀取數(shù)據(jù)),磁盤的HFile,找到并存儲(chǔ)到BlockCache
3、數(shù)據(jù)塊會(huì)緩存
1.2.5. hregionserver的職責(zé)
HRegion Server主要負(fù)責(zé)響應(yīng)用戶I/O請(qǐng)求,向HDFS文件系統(tǒng)中讀寫(xiě)數(shù)據(jù),是HBASE中最核心的模塊。
HRegion Server管理region。
1.3. hbase 布隆過(guò)濾器
不存在的一定不存在,存在的不一定存在;
1.3.1. 布隆過(guò)濾器的存儲(chǔ)在哪?
對(duì)于hbase而言,當(dāng)我們選擇采用布隆過(guò)濾器之后,HBase會(huì)在生成StoreFile(HFile)時(shí)包含一份布隆過(guò)濾器結(jié)構(gòu)的數(shù)據(jù),稱其為MetaBlock;MetaBlock與DataBlock(真實(shí)的KeyValue數(shù)據(jù))一起由LRUBlockCache維護(hù)。
cell較小的不適用布隆過(guò)濾器;
按行讀,更新數(shù)據(jù)量大,范圍廣(多列),用row;
1.3.2. 協(xié)處理器
observe:通過(guò)鉤子函數(shù),做一些預(yù)處理和后處理;類似于 RDBMS 中的觸發(fā)器,主要在服務(wù)端工作,主要有三種
regionObserve:處理數(shù)據(jù)修改數(shù)據(jù);如:創(chuàng)建二級(jí)索引
maserObserve:管理DDL類型操作
WALObserve:提供針對(duì)WAL的鉤子函數(shù)
endpoint:類似于 RDBMS 中的存儲(chǔ)過(guò)程,主要在服務(wù)端工作,可以實(shí)現(xiàn) min、max、avg、sum、distinct、group by 等功能。
更多關(guān)于大數(shù)據(jù)培訓(xùn)的問(wèn)題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項(xiàng)目實(shí)操的話可以點(diǎn)擊咨詢課程顧問(wèn),獲取試聽(tīng)資格來(lái)試聽(tīng)我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門到精通。