hbase是面向列儲存的nosql資料庫。行的每一列被劃分到某一列族,調優和儲存都是基於列族完成的。在資料庫中,行的每一列作為儲存的基本單位,其結構關係為,每一行包含乙個或多個列族,乙個列族包含多個列,這樣可通過行鍵確定行,列族名確定列族,列名確定列,從而定位到某一行的某一列。例如,行鍵為1,列族為a,列為a1,那麼在hbase中存放形式為rowkey=1,col=a:a1,value=…,timestamp=… 這作為一條記錄儲存。一行可有任意列構成,很容易增加列。列族需要預先定義,不能在插入內容時新增或刪除。在hbase中預設是按照行鍵字典公升序儲存。
hbase資料庫是為了處理大規模資料而產生的。對於大規模資料實現分布式儲存。當資料量達到一定規模時,hbase會將表中資料進行分割槽。分割槽是按照行鍵來分割槽,將開始第乙個分割槽按照行鍵中間值一分為二,比如原分割槽的行鍵範圍為(0,50),那麼分成(0,25)和(25,50)兩個分割槽,這樣做的原因是插入資料的行鍵是由外部使用者指定,你不能確定插入資料的鍵是屬於那乙個範圍,所以將一分為二,讓行鍵範圍內能夠有插入資料的空間。
同乙個表中的所有分割槽可以存放在多個節點上,以實現負載均衡。存放分割槽的節點稱為regionserver,它會管理當前節點上的所有分割槽和對分割槽資料進行讀寫操作。與hdfs類似,habse是主從結構,hmaster是主節點,它負責將分割槽分配給regionserver、恢復regionserver故障。
hbase內部儲存著-root-表、.meta表,.meta表用來存放分割槽名、分割槽所在位置等資訊。當資料量非常大的時候,.meta表資料量也會相當龐大,所以.meta表也做分布式儲存處理,定義-root-表中儲存.meta表分割槽列表資訊、分割槽中行鍵範圍。客戶端訪問分割槽時,先從-root表中獲取儲存所請求行所在分割槽資訊的.meta表分割槽位置,鎖定.meta分割槽位置,從中獲取所請求行所在分割槽資訊,而後鎖定分割槽位置。
總的來說,就是表資料量大,為了實現分布式儲存,將其分割槽,分割槽資訊存放在.meta表中,當分割槽資訊資料達到一定規模後,.meta表資料量大,也難以處理,於是將.meta表也進行分割槽處理,-root-表存放.meta表分割槽資訊,這樣一來如果-root-表資料量過大時,又需要對其進行分割槽。不過就目前而言預設兩級分割槽已經足夠。
分割槽時,分割槽表的行鍵由表名、起始行鍵、隨機hash串構成,列就是regionserver對應主機名,分割槽表按行鍵字典公升序排列。
當regionserver接收到寫請求之後,先將寫操作寫入到」提交日誌」,而後將資料存到memstore中,等到memstore緩衝區滿,執行寫資料操作到hdfs檔案系統。當regionserver崩潰之後,將提交日誌按區域進行分割,每個區域重啟之前先找到對應提交日誌,重做其中未來得及做的操作。
Hadoop學習筆記之Hadoop簡介
apache hadoop 是乙個開源的 可靠的 靈活的 分布式的計算系統 來自官網 主要受google 三篇 的啟發 gfs mapreduce bigtable hadoop 海量資料的儲存 hdfs hadoop distributed file system 海量資料的分析 mapreduc...
hadoop學習筆記之zookeeper 安裝配置
zookeeper是乙個分布式的,開放原始碼的分布式應用程式協調服務,是google的chubby乙個開源的實現,是hadoop和hbase的重要元件。它是乙個為分布式應用提供一致性服務的軟體,提供的功能包括 配置維護 網域名稱服務 分布式同步 組服務等。由於工程師不能很好地使用鎖機制以及基於訊息協...
Hadoop學習筆記之YARN
yarn service框架提供了一流的支援和api,可以在yarn中本地化時間執行的服務。簡而言之 in a nutshell 它作為乙個容器編排平台,用於管理yarn上的貨櫃化服務。它支援yarn中的docker容器和傳統的基於程序的容器。該框架的職責包括執行配置解決方案和安裝,生命週期管理 如...