Hbase記憶體磁碟大致關係

2021-07-13 04:31:35 字數 1358 閱讀 5009

disknum*diskcapacity/replications =hbase.hregion.max.filesize *regions

regionserver維護master分配給它的region,處理對這些region的io請求,負責切分在執行過程中變得過大的region, 由於集群效能( 分配的記憶體和磁碟是有限的 )有限的,那麼hbase單個regionserver的region數目肯定是有上限的。

regionserver的region數目取決於memstore的記憶體使用,每個region擁有一組memstore(memstore的數量有hstore決定,hstore的資料由建立表時的指定的列族個數決定,所以 每個region的memstore的個數 = 表的列族的個數 ),可以通過配置來修改memstore占用記憶體的大小,一般設定在 128 m – 256m之間。

regionserver 分配一定比例的記憶體給它下面的所有memstore( 該比例大小 可通過hbase.regionserver.global.memstore.upperlimit 進行修改 ), 如果記憶體溢位(使用了太多的memstore),它可能會導致嚴重的後果,如伺服器反應遲鈍 或compact風暴。比較好的計算每rs(假設乙個表)region的數量的公式為:

((rs memory) * (total memstore fraction)) / ((memstore size)*(# column families))

例如: 如果 乙個regionserver配置的記憶體是16g,使用預設配置( hbase預設regionserver分給memstore的比例是0.4 , 預設的menstore的占用128m記憶體 ), 乙個cf,那麼這個regionserver下的region的個數大約為 16384 * 0.4 / (128*1) = 51個,實際測試大於這個數 一兩倍 也沒太大的問題。 乙個hbase表包含一至多個region,那麼表的數目上限也是可以估算出來的。每台 regionserver 管理 1000 個左右 regions 效果最好。

hbase底層使用hfile儲存資料,hfile最小儲存單元block,hfile物理存放形式是乙個block的序列外加這些hbase的索引。這意味著,從hbase裡讀取乙個block需要在索引上查詢一次該block然後從磁碟讀取資料。block是建立索引的最小資料單元,也是從磁碟讀取的最小資料單元,block大小可以在列簇設定,預設64kb。如果主要用於隨機查詢,可能需要細粒度的block索引,小一點的block更好些。block變小會導致索引變大,進而消耗更多記憶體,如果需要經常順序掃瞄,一次讀取多個block,大一點的block效果更好,block變大索引項變小,索引變小,節省記憶體

cpu 記憶體 磁碟關係

cpu是處理器,是大腦和核心,記憶體和硬碟都是儲存器,受cpu的指揮。cpu工作的時候 1 需要從儲存器裡取資料出來。2 進行運算,要不停地用儲存器讀寫。3 計算出結果再返回到儲存器裡。如果硬碟夠快的話,電腦就不需要記憶體了。但硬碟太慢了,所以,由硬碟來擔任1和3的工作,由記憶體來分擔硬碟2的工作。...

快取和記憶體,磁碟的關係

快取嚴格來說就是一種臨時儲存,和記憶體原理上沒有什麼區別。因為在大資料交換中,儲存器不能及時和運算器 控制器交換資料的話,就會出現問題,所以人們發明了快取。說白了假設運算器和控制器是工廠,儲存器 比如硬碟 光碟機等 是大倉庫的話,記憶體就是乙個大型中轉中心 當然它也是倉庫,但是是乙個大型的中轉倉庫 ...

CPU 記憶體 磁碟IO之間的關係

當程式或者操作者對cpu發出指令,這些指令和資料暫存在記憶體裡,在cpu空閒時傳送給cpu,cpu處理後把結果輸出到輸出裝置上,輸出裝置就是顯示器,印表機等。在沒有顯示完之前,這些資料也儲存在記憶體裡,如果記憶體不足,那麼系統自動從硬碟上劃分一部分空間作為虛擬記憶體來用。但寫入和讀取的速度 跟物理記...