hbase寬表和高表以及優缺點

2021-10-20 00:13:20 字數 1999 閱讀 9717

寬表總結

二 寬表的不便

三 如何優雅的使用寬表

hbase中的:

hbase 的row key + column family + column qualifier + timestamp + value是hfile中資料排列依據。

hfile據此,對資料的索引到data block級別,而不是行級別。所以這種key是hfile內部的粗粒度(data block粒度)本地索引的主鍵。

高表更好,因為查詢條件都在row key中, 是全域性分布式索引的一部分。高表一行中的資料較少。所以查詢快取blockcache能快取更多的行,以行數為單位的吞吐量會更高。

高表分片粒度更細,各個分片的大小更均衡。因為高表一行的資料較少,寬表一行的資料較多。hbase按行來分片。

高表元資料開銷更大。高錶行多,row key多,可能造成region數量也多,- root -、 .meta表資料量更大。過大的元資料開銷,可能引起hbase集群的不穩定、master更大的負擔(這方面後續再好好總結)。

寬表事務性更好。hbase對一行的寫入(put)是有事務原子性的,一行的所有列要麼全部寫入成功,要麼全部沒有寫入。但是多行的更新之間沒有事務性保證。

如果我們對一行內的資料進行壓縮,寬錶能獲得更高的壓縮比。因為寬表中,一行的資料量較大,往往存在更多相似的二進位制位元組,有利於提高壓縮比。通過壓縮,緩解了寬表一行資料量太大,並導致分片大小不均勻的問題。查詢時,我們根據row key找到壓縮後的資料,進行解壓縮。而且解壓縮可以通過協處理器(coproesssor)在hbase伺服器上做,而不是在業務應用的伺服器上做,以充分應用hbase集群的cpu能力。

設計表時,可以不絕對追求高表、寬表,而是在兩者之間做好平衡。

根據查詢模式,需要分布式索引、分片、有很高選擇度(即能據此查詢條件迅速鎖定很小範圍的一些行)的查詢用字段,應該放入row key;能夠均勻地劃分資料位元組數的字段,也應該放入row key,作為分片的依據。選擇度較低,並且不需要作為分片依據的查詢用字段,放入column family和column qualifier,不放入row key。

寬表淺意上的好處

在當前這個專案中,大量使用了寬表,字段超過一百五十個欄位的寬表有五張,分別是客戶機構級資訊表、客戶客戶經理級資訊表、客戶經理資訊表、集團客戶資訊表、戰略客戶資訊表。

從上面的表名中可以猜到,這是個crm專案,我這裡能列舉出來的優點也是在專案中體現出來的優點。

窺一表知全貌:這個好處很明顯,尤其是收到報表開發人員的歡迎,他們不關心資料如何儲存,只關心這張報表是不是很方便,很快的能開發出來。還有乙個就是資料分析人員,銀行業大部分資料分析人員很討厭做表關聯,他們喜歡一條記錄看到客戶的全貌。

從etl角度講,使用寬表帶給我的痛苦遠遠大於它帶來的快樂,從系統出發解釋寬表帶來的問題。

專案是乙個crm系統,以倉庫資料(td)為基礎,進行建模、資料加工,作為倉庫的乙個集市落地後,在將這部分資料,同步到查詢伺服器(db2)上,每日從td到db2的資料量約為16g,同步資料的方式為td匯出資料生成txt,上傳到ftp伺服器後在通過shell載入到db2。

了解了專案的背景,就可以列舉出在使用寬表時有如下不便

因為要在兩個系統中同步兩張表乙份資料,增刪欄位時一定要考慮一致性,同時要考慮歷史資料如何處理。每次都需要經過如下步驟:

修改td表結構

修改td指令碼

修改匯出資料指令碼

修改db2表結構

修改db2載入資料的shell指令碼

每次變動都伴隨這大量的工作,同時還需要因為這個字段載入新的歷史資料或更新這個欄位的內容,此處在專案後期維護中帶來了很大的工作量。

寬表在倉庫的彙總層大量使用,如客戶、存款、貸款等通用的實體都被設計為寬表。這些寬表會面臨我上面提到的問題嗎?

顯然不會,倉庫的表很少因為個人需求而增減字段,同時倉庫大多只負責原始資料的儲存,不會涉及到太複雜的字段加工邏輯,故大多數彙總層的表都被設計為寬表。

要想優雅的使用寬表,我認為需要注意以下這一點:

字段是否會頻繁增減

對於不涉及到事務的表且字段不會頻繁增加,建議設計為寬表,尤其對於bi系統。

HBase的高表和寬表

hbase中的寬表是指很多列較少行,即列多行少的表,一行中的資料量較大,行數少 hbase中高表是指很多行較少列,即行多列少,一行中的資料量較少,行數大。hbase的row key是分布式的索引,也是分片的依據。hbase的row key column family column qualifier...

HBase 高表與寬表的選擇

hbase中的寬表是指很多列較少行,即列多行少的表,一行中的資料量較大,行數少 高表是指很多行較少列,即行多列少,一行中的資料量較少,行數大。hbase的row key是分布式的索引,也是分片的依據。hbase的row key column family column qualifier times...

HBase學習筆記 高表與寬表的選擇

hbase中的寬表是指很多列較少行,即列多行少的表,一行中的資料量較大,行數少 高表是指很多行較少列,即行多列少,一行中的資料量較少,行數大。hbase的row key是分布式的索引,也是分片的依據。hbase的row key column family column qualifier times...