HBASE列族不能太多的真相
點擊上方藍色字體,選擇“設(shè)為星標”

HRegionServer內(nèi)部管理了一系列HRegion對象,每個HRegion對 應(yīng)了table中的一個region,HRegion中由多 個HStore組成。每個HStore對應(yīng)了Table中的一個column family的存儲,可以看出每個columnfamily其實就是一個集中的存儲單元,因此最好將具備共同IO特性的column放在一個column family中,這樣最高效。
HStore存儲是HBase存儲的核心,由兩部分組成,一部分是MemStore,一 部分是StoreFile。MemStore是 Sorted Memory Buffer,用戶寫入的數(shù)據(jù)首先會放入MemStore,當MemStore滿了以后會Flush成一個StoreFile(底層實現(xiàn)是HFile)。
進行split的條件:該regiion下所有的storeFile中最大的storeFile大小超過閥值即進行split
在文件層次上,不同的列族,存儲在不同的文件中。但是不同的列族,可能會共享一個region。
/hbase/zz/3917ebd872c0adcb9d6c5a9cfd30b87f/a
/hbase/zz/3917ebd872c0adcb9d6c5a9cfd30b87f/a/9210131397650425238
/hbase/zz/3917ebd872c0adcb9d6c5a9cfd30b87f/b
/hbase/zz/3917ebd872c0adcb9d6c5a9cfd30b87f/b/7083844554431109536
如上所示:兩個不同的列族,共享了同一個region(3917ebd872c0adcb9d6c5a9cfd30b87f)。
由于不同的列族會共享region,所以有可能出現(xiàn),一個列族已經(jīng)有1000萬行,而另外一個才100行。當一個要求region分割的時候,會導(dǎo)致100行的列會同樣分布到多個region中。
這樣就出現(xiàn)了基數(shù)問題。(如果表存在多個列族,列族A有100萬行,列族B有10億行,那么列族A可能會被分散到很多個Region上,這會導(dǎo)致掃描列族A的性能低下)
(某個column family在flush的時候,它鄰近的column family也會因關(guān)聯(lián)效應(yīng)被觸發(fā)flush,最終導(dǎo)致系統(tǒng)產(chǎn)生更多的I/O)
所以,一般建議不要設(shè)置多個列族。

版權(quán)聲明:
文章不錯?點個【在看】吧!??




