1/5 HBase( 三 )


當table中的行不斷增多,就會有越來越多的region 。這樣一張完整的表被保存在多個Regionserver上 。
Memstore 與 storefile

  1. 一個region由多個store組成,一個store對應一個CF(列簇)
  2. store包括位于內存中的memstore和位于磁盤的storefile寫操作先寫入 memstore,當memstore中的數據達到某個閾值 , hregionserver會啟動 flashcache進程寫入storefile,每次寫入形成單獨的一個storefile
  3. 當storefile文件的數量增長到一定閾值后,系統會進行合并(minor、 major compaction) , 在合并過程中會進行版本合并和刪除工作 (majar),形成更大的storefile 。
  4. 當一個region所有storefile的大小和超過一定閾值后,會把當前的region 分割為兩個,并由hmaster分配到相應的regionserver服務器,實現負載均衡 。
  5. 客戶端檢索數據 , 先在memstore找,找不到再找storefile
  6. HRegion是HBase中分布式存儲和負載均衡的最小單元 。最小單元就表 示不同的HRegion可以分布在不同的HRegion server上 。
  7. HRegion由一個或者多個Store組成 , 每個store保存一個columns family 。
  8. 每個Strore又由一個memStore和0至多個StoreFile組成 。
如圖:StoreFile 以HFile格式保存在HDFS上 。

1/5 HBase

文章插圖

1/5 HBase

文章插圖
3.3 理解難點1、flush刷新在HDFS上呈現究竟是怎么刷新的呢??我們目前剛剛學習的時候,添加數據 , 都是一條一條的put進去 , 而我們在put的數據比較少(小于128M)的時候,我們put完去HDFS上并未查看到我們put的文件,這是因為數據還在內存中,也就是還在memStore中,所以要想在HDFS中查看到,我們必須手動刷新到磁盤中 , 這是將memStore的數據刷新到StoreFile中去,這樣我們在HDFS中就可以查看到了 。2、為什么Hbase不可以使用像Mysql那樣進行查詢??首先,我們應該可以感受到,我們在插入的時候,每行數據 , 有多少列,列名叫什么完全是我們自己定義的,之所以不支持像MySql那樣對列進行查詢和操作,因為不確定列的個數和名稱 。3、數據最后存在HDFS上的,HDFS不支持刪改,為什么Hbase就可以呢??這里有個思想誤區 , 的確,數據是以HFile形式存在HDFS上的,而且HDFS的確是不支持刪改的,但是為什么Hbase就支持呢?首先,這里的刪除并不是真正意義上的對數據進行刪除,而是對數據進行打上標記,我們再去查的時,就不會查到這個打過標記的數據 , 這個數據Hmaster會每隔1小時清理 。修改是put兩次,Hbase會取最新的數據,過期數據也是這個方式被清理 。四、HBase1.4.6安裝搭建4.1 hbase下載官網下載地址:https://www.apache.org/dyn/closer.lua/hbase/1.4.6/hbase-1.4.6-bin.tar.gz
1/5 HBase

文章插圖
4.2 前期準備(Hadoop,zookeeper,jdk)
啟動hadoop
start-all.sh
驗證
http://master:50070
啟動zookeeper(三臺分別啟動)
zkServer.sh start
檢查狀態
zkServer.sh status4.3 搭建Hbase1、上傳解壓tar -zxvf hbase-1.4.6-bin.tar.gz2、配置環境變量export HBASE_HOME=/usr/local/soft/hbase-1.4.6$HBASE_HOME/bin
source /etc/profile
3、修改hbase-env.sh文件
增加java配置
export JAVA_HOME=/usr/local/soft/jdk1.8.0_171
關閉默認zk配置(原本是注釋的 , 放開修改false)
export HBASE_MANAGES_ZK=false4、修改hbase-site.xml文件   <property>       <name>hbase.rootdir</name>       <value>hdfs://master01:9000/hbase</value>    </property>    <property>       <name>hbase.cluster.distributed</name>       <value>true</value>    </property>    <property>       <name>hbase.zookeeper.quorum</name>       <value>node1,node2,master01</value>    </property>5、修改regionservers文件

推薦閱讀