1. 程式人生 > >H B A S E

H B A S E

1.sql 結構化查詢語言 欄位和型別都是固定的

2.什麼是hbase?

HBase是一個分散式的、面向列的開源資料庫,
HBase不同於一般的關係資料庫,它是一個適合於非結構化資料儲存的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。

3.nosql的作用?

為了解決大規模資料集合、多重資料種類帶來的挑戰,尤其是大資料應用難題。

4.常見nosql? 常見sql?

NOSql(非關係型資料庫):列儲存(HBase)、文件型儲存(MongoDb)、記憶體式儲存(redis)、圖形模型(Graph)
SQL(關係型資料庫):Oracle、DB2、Microsoft SQL Server、MySQL、

5.hbase的作用? 可以有數億行 數百萬列

儲存大量結果集資料,並提供低延遲的隨機查詢。
相比較關係型資料庫,能夠儲存的資料量更大(比關係型資料庫大很多很多),同時查詢延遲相比較與其他hadoop產品(pig、hive)要低。

6.hbase和hive 有什麼區別?

Hive的定位是資料倉庫工具,雖然也有增刪改查,但其刪改查對應的是整張表而不是單行資料,查詢的延遲較高。其本質是更加方便的使用mr的威力來進行離線分析的一個數據分析工具。

HBase的定位是hadoop的資料庫,是一個典型的Nosql,所以HBase是用來在大量資料中進行低延遲的隨機查詢的。

7.安裝:單機 偽分散式 全分散式

8.hbase 埠號?

預設地址為:http://master:16010/
注意:0.9x極以前的版本中,webUI地址的預設埠為60010。

9. hbase 的二級索引?如何構建?

本質列值與行健之間的的對映關係

10.什麼座標?

一個單元格是行、列族和列限定符的結合,也就是說,通過這三個值(也稱之為座標)來唯一確定一個單元格。

11. 表 行 列(列族和列限定符) 單元格 由什麼組成?

HBase表由多行組成。

行在HBase中由  行鍵和一個或多個列的值組成

單元格是行、列族和列限定符的結合

列是表中的最基本元素,HBase的列包含一個列族和一個列限定符,列屬於一個列族,
	列族中可以包含多個列,列限定符即指一個列族中的某個列
	
	列族屬於一個行。列中的內容不需要指定型別,這也是與關係型資料不同的地方,
	也是HBase被稱之為無型別的資料庫的原因。HBase的列與關係型資料庫不同,
	在於其含有版本的概念,一個列的資料可以有多個歷史版本,體現形式就是時間戳。

12.行健有哪些特點?

有序 唯一

13.行健的設計原則?

RowKey長度原則,不要超過16個位元組.
	原因如下:
	(1)資料的持久化檔案HFile中是按照KeyValue儲存的,如果RowKey過長比如100個位元組,1000萬列資料光RowKey就要佔10萬億個位元組,將近1G資料,這回極大影響				Hfie的儲存效率
	(2)MenStore將快取部分資料到記憶體,如果RowKey欄位過長記憶體的有效利用率會降低,系統將無法快取更多的資料,這會降低檢索效率,因此RowKey的位元組長度越短越好.
	(3)目前作業系統都是64位系統,記憶體8位元組對齊,控制在16位元組

RowKey雜湊原則
	如果RowKey是按時間戳的方式遞增,不要講時間放在二進位制碼的前面,建議將RowKey的高位作為雜湊欄位,由程式迴圈生成,地位放時間欄位,
	這樣將提升資料均衡分佈在每個RegionServer實現負載均衡的機率,如果沒有雜湊欄位,
	首欄位直接是時間資訊將產生所有新資料都在一個RegionServer上堆積的熱點現象,這樣在做資料檢索的時候負載將會集中在個別RegionServer 降低查詢效率.

	1.隨機數
	2.UUID
	3.MD5,Hash,等加密演算法
	4.業務有序數反向

RowKey唯一原則
	必須在設計上保證其唯一性
	RowKey是hashBase裡面唯一的索引,對於某些查詢頻繁的限定條件資料需要把內容放在rowkey裡面

14. 高表 寬表 厚表

寬表是指很多列較少行,即列多行少的表,一行中的資料量較大,行數少;
高表是指很多行較少列,即行多列少,一行中的資料量較少,行數大

在HBase中使用寬表、高表的優劣總結如下:

查詢效能:高表更好,因為查詢條件都在row key中, 是全域性分散式索引的一部分。高表一行中的資料較少。所以查詢快取BlockCache能快取更多的行,以行數為單位的吞吐量會更高。
分片能力:高表分片粒度更細,各個分片的大小更均衡。因為高表一行的資料較少,寬表一行的資料較多。HBase按行來分片。
元資料開銷:高表元資料開銷更大。高錶行多,row key多,可能造成region數量也多,- root -、 .meta表資料量更大。過大的元資料開銷,可能引起HBase叢集的不穩定、master更大的負擔(這方面後續再好好總結)。

事務能力:寬表事務性更好。HBase對一行的寫入(Put)是有事務原子性的,一行的所有列要麼全部寫入成功,要麼全部沒有寫入。但是多行的更新之間沒有事務性保證。 資料壓縮比:如果我們對一行內的資料進行壓縮,寬表能獲得更高的壓縮比。因為寬表中,一行的資料量較大,往往存在更多相似的二進位制位元組,有利於提高壓縮比。通過壓縮,緩解了寬表一行資料量太大,並導致分片大小不均勻的問題。查詢時,我們根據row key找到壓縮後的資料,進行解壓縮。而且解壓縮可以通過協處理器(coproesssor)在HBase伺服器上做,而不是在業務應用的伺服器上做,以充分應用HBase叢集的CPU能力。

15.hbase 一個列族 包含多和Hfile

16.列族 HFile memstore bolckcache 對應的關係?

一個列族包含多個HFile,一個memstore,一個bolckcache

17.hbase 負載均衡的基本單元? 本質? 如何進行負載均衡?

基本單元:region
region本質:是以行鍵排序的連續儲存的區間
負載均衡:如果region太大,系統就會把它們動態拆分;region太小,就把它們合併,以減少儲存檔案數量

18.hbase 讀 寫 刪 流程?

讀:HBase在讀流程操作上使用了IRU(最近最少使用演算法)快取技術。這種快取也叫做blockcache,和Memstore在一個JVM堆裡。blockCache設計用來儲存從HFile裡讀入記憶體的頻繁訪問的資料,避免硬碟讀。每個列族都有自己的blockCache。掌握blockcache石油化HBase效能的一個重要部分。

寫:預設情況下,執行寫入時會寫入到兩個地方:預寫入日誌(WAL,也稱HLog)和Memstore.HBase的預設方式是把寫入動作記錄在這兩個地方,以保證資料持久換。只有當這兩個地方的變化資訊都寫入並確認後,才認為寫動作完成。

刪:delete命令並不立即刪除內容。實際上,他只是給記錄打上標記。就是說,針對那個內容的一條新“墓碑”記錄寫進來,作為刪除的標記。墓碑即可用來標誌刪除的內容不能再get和scan命令中返回結果。因為hfile檔案是不能改變的,直到執行一次大合併,這些墓碑記錄才會被處理,被刪除記錄

19.blockcache 機制?

IRU(最近最少使用演算法)

20.小合併和大合併?

兩者將會重整儲存在HFile裡的資料。
小合併把多個小HFile合併生成一個大HFile。
大合併將處理給定region的一個列族的所有hfile。大合併完成之後,這個列族的所有hfile合併成一個檔案。

21.hbase 元件 及 作用?

1、zookeeper 
儲存Hbase元資料資訊
實時監控RegionServer
儲存所有Region的定址入口
保證Hbase叢集中只有一個Master

2、client
管理類操作,client與HMaster進行RPC通訊
資料讀寫操作,client與RegionServer進行RPC通訊

3、HMaster
HMaster沒有單點問題,在Hbase中可以啟動多個HMaster,通過Zookeeper的Master選舉機制保證總有一個Master正常執行並提供服務,其他HMaster作為備選時刻準備提供服務。HMaster主要負責Table和Region的管理工作。
管理使用者對錶的增刪改查
管理RegionServer的負載均衡,調整region分佈
在region分裂後,負責新region的分配
在regionserver宕機後,負責失效RegionServer上的Region遷移

4、HRegionServer
內部管理一系列HRegion物件,每個HRegion對應了Table中的一個Region
HRegion由多個HStore組成,每個HStore對應了Table中的一個Column Family的儲存
HStore儲存是Hbase儲存的核心,由兩部分組成:MemStore和StoreFile
    使用者寫入的資料首先會放入MemStore中,當MemStore滿了以後會緩衝成一個StoreFile(底層實現是HFile),當StoreFile檔案數量達到一定的閥值,會觸發Compact操作,將多個StoreFile合併成一個StoreFile,在合併的過程中會進行版本合併和資料刪除,因此可以看出Hbase實際只有資料新增,所有的更新和刪除操作都是在後續的Compact過程中進行的,這使得使用者的寫操作只要進記憶體中就可以了立即返回了,保證了Hbase I/O的高效能。
    StoreFile在Compact之後,會形成越來越大的StoreFile,當單個StoreFile大小超過一定的閥值之後,會觸發split操作,同時把當前的region分裂成2個region,父
region會下線,新分裂的2個子region會被HMaster分配到相應的HRegionServer上。

22.hregionserver 掛掉之後怎麼辦?

當HRegionServer意外終止後,HMaster會通過Zookeeper感知到,HMaster首先會處理遺留的 HLog檔案,將其中不同Region的Log資料進行拆分,分別放到相應region的目錄下,然後再將失效的region重新分配,領取 到這些region的HRegionServer在Load Region的過程中,會發現有歷史HLog需要處理,因此會Replay HLog中的資料到MemStore中,然後flush到StoreFiles,完成資料恢復。

23.列族跟hfile的關係?

一個列族有多個hfile

24.什麼是熱點?怎麼解決?

熱點發生在大量的client直接訪問叢集的一個或極少數個節點(訪問可能是讀,寫或者其他操作)
加鹽、雜湊、反轉、時間戳反轉、

練習hbase shell 事物?

25.hbase兩種特殊的表: -ROOT- 和 .META.

從儲存結構和操作方法的角度來說,-ROOT-、.META.與其他表沒有任何區別。它們與眾不同的地方是HBase用它們來存貯一個重要的系統資訊: -ROOT-:記錄.META.表的Region資訊。 .META.:記錄使用者表的Region資訊。 當用戶表特別大時,使用者表的region也會非常多。.META.表儲存了這些region資訊,也變得非常大,這時.META.自己也需要劃分成多個Region,託管到多個RegionServer上。 這時就出現了一個問題:當.META.被託管在多個RegionServer上,如何去定位.META.呢? HBase的做法是用另外一個表來記錄.META.的Region資訊,就和.META.記錄使用者表的Region資訊一樣,這個表就是-ROOT-表。

26.get 和 scan 有什麼區別?

按指定rowkey獲取唯一一條記錄:get方法。
按指定條件獲取一批記錄:scan方法。
實現條件查詢功能使用的就是scan方式,scan在使用時有以下幾點值的注意:
get訪問一個指定key的資料,而scan可以設定begin和end來訪問一個範圍內所有的資料。
scan可以通過setCaching與setBatch方法提高速度(以空間換時間)
scan可以通過setStartRow與setEndRow來限定範圍。範圍越小,效能越高。
scan可以通過setFilter方法新增過濾器,這也是分頁(效能差)、多條件查詢的基礎。