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