關(guān)鍵概念
表(Table)
HBase會(huì)將數(shù)據(jù)組織進(jìn)一張張的表里面,但是需要注意的是表名必須是能用在文件路徑里的合法名字,因?yàn)镠Base的表是映射成hdfs上面的文件。
行(Row)
在表里面,每一行代表著一個(gè)數(shù)據(jù)對(duì)象,每一行都是以一個(gè)行鍵(Row Key)來(lái)進(jìn)行唯一標(biāo)識(shí)的,行鍵并沒(méi)有什么特定的數(shù)據(jù)類型,以二進(jìn)制的字節(jié)來(lái)存儲(chǔ)。
列族(Column Family)
在定義HBase表的時(shí)候需要提前設(shè)置好列族, 表中所有的列都需要組織在列族里面,列族一旦確定后,就不能輕易修改,因?yàn)樗鼤?huì)影響到HBase真實(shí)的物理存儲(chǔ)結(jié)構(gòu),但是列族中的列標(biāo)識(shí)(Column Qualifier)以及其對(duì)應(yīng)的值可以動(dòng)態(tài)增刪。表中的每一行都有相同的列族,但是不需要每一行的列族里都有一致的列標(biāo)識(shí)(Column Qualifier)和值,所以說(shuō)是一種稀疏的表結(jié)構(gòu),這樣可以一定程度上避免數(shù)據(jù)的冗余。例如:{row1, userInfo: telephone —> 137XXXXX869 }{row2, userInfo: fax phone —> 0898-66XXXX } 行1和行2都有同一個(gè)列族userinfo,但是行1中的列族只有列標(biāo)識(shí)(Column Qualifier):移動(dòng)電話號(hào)碼,而行2中的列族中只有列標(biāo)識(shí)(Column Qualifier):傳真號(hào)碼。
列標(biāo)識(shí)(Column Qualifier)
列族中的數(shù)據(jù)通過(guò)列標(biāo)識(shí)來(lái)進(jìn)行映射,其實(shí)這里大家可以不用拘泥于“列”這個(gè)概念,也可以理解為一個(gè)鍵值對(duì),Column Qualifier就是Key。列標(biāo)識(shí)也沒(méi)有特定的數(shù)據(jù)類型,以二進(jìn)制字節(jié)來(lái)存儲(chǔ)。
單元(Cell)
每一個(gè) 行鍵,列族和列標(biāo)識(shí)共同組成一個(gè)單元,存儲(chǔ)在單元里的數(shù)據(jù)稱為單元數(shù)據(jù),單元和單元數(shù)據(jù)也沒(méi)有特定的數(shù)據(jù)類型,以二進(jìn)制字節(jié)來(lái)存儲(chǔ)。
表結(jié)構(gòu)關(guān)系
可以把HBase看成一個(gè)多維度的Map模型去理解它的數(shù)據(jù)模型。
- 行鍵映射一個(gè)列族數(shù)組
- 列族數(shù)組中的每個(gè)列族又映射一個(gè)列標(biāo)識(shí)數(shù)組
-
列標(biāo)識(shí)數(shù)組中的每一個(gè)列標(biāo)識(shí)(Column Qualifier)又映射到一個(gè)時(shí)間戳數(shù)組,里面是不同時(shí)間戳映射下不同版本的值,但是默認(rèn)取最近時(shí)間的值,所以可以看成是列標(biāo)識(shí)(Column Qualifier)和它所對(duì)應(yīng)的值的映射。
image
聲明
一直沒(méi)太搞懂hbase表結(jié)構(gòu),看到一篇文章,做一個(gè)整理記錄
參考鏈接https://blog.csdn.net/ymh198816/article/details/51244911