淺談Hbase以及部署使用
阿新 • • 發佈:2018-12-01
一、Hbase簡介
1.1
Apache Hbase 是Hadoop資料庫,一個分散式、可伸縮的大資料儲存。
1.2 Hbase的特點
大:一個表可以有數十億行,上百萬列。
無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動態增加,同一張表中不同的行可以有截然不同的列;
面向列:面向列(族)的 儲存和許可權控制,列(族)獨立檢索;
稀疏:對於空的列,並不佔用儲存空間,表可以設計的非常稀疏;
資料多版本:每個單元的資料可以有多個版本,預設情況下版本號自動分配,是單元格插入時的時間戳;
資料型別單一: Hbase 中的資料都是字串,沒有型別。
二、Hbase 的角色
2.1 Hmaster 功能:
- 監控RegionServer
2.處理RegionServer 的故障轉移
3.處理資料的變更
4.處理region的分配或轉移
5.在空閒時間進行資料的負載均衡
6.通過Zookeeper釋出自己的位置給客戶端
2.2 RegionServer
功能:
1.負責儲存Hbase的實際資料
2.處理分配給他的Region
3.重新整理快取到HDFS
4.維護Hlog
5.執行壓縮
6.負責處理Region分片
元件:
1.Write-Ahead logs
Hbase 的修改記錄,當時Hbase讀寫資料的時候,資料不是直接寫進磁碟,它會在記憶體中保留一段時間。但把資料儲存在記憶體中可能有更高的概率引起熟路丟失,為了解決該問題,資料會先寫到一個 Write-Ahead logs的檔案中,然後再寫入記憶體中。所以系統出現故障的時候,資料可以通過這個日誌檔案重建。
2.Hfile
這是在磁碟上儲存原始資料的實際的物理檔案,是實際的儲存檔案。
3.Store
Hflie儲存在Store中,一個Store對應HBase表中的一個列族。
4.MemStore
是指記憶體儲存,位於記憶體中,用來儲存當前的資料操作,所以當資料儲存在WAL中之後,RegsionServer 會在記憶體中儲存鍵值對。
5.Region
Hbase表的分片,Hbase表會根據RewKey 值被切分成不同的region儲存在RegionServer中,在一個RegionServer 中可以有多個不同的region。
2.3 架構圖
讀資料流程:
1)HRegionServer 儲存著 meta 表以及表資料,要訪問表資料,首先 Client 先去訪問 zookeeper ,從 zookeeper 裡面獲取 meta 表所在的位置資訊,即找到這個 meta 表在哪個 HRegionServer 上儲存著。
2)接著Client 通過剛才獲取到的HRegionServer 的 IP 來訪問meta 表所在的 HRegionServer, 從而讀取到 Meta,進而獲取到 Meta 表中存放的元資料。
3)Client 通過元資料中儲存的資訊,訪問對應的 HRegionServer,然後掃描所在 HRegionServer 的 Memstore 和 Storefile 來查詢資料。
最後 HRegionServer 把查詢的資料響應給 Client
寫資料流程:
1)Client 也是先訪問 zookeeper,找到 Meta 表,並獲取Meta 表資訊。
2)確定當前將要寫入的資料所對應的 RegionServer 伺服器和 Region。
3)Client 向該 RegionServer 伺服器發起寫入資料請求,然後 RegionServer 收到請求並響應。
4)Client 先把資料寫入到 Hlog ,防止資料丟失。
5)然後將資料寫入到 Memstore.
6)如果 Hlog 和 Memstore 均寫入成功,則這條資料寫入成功。在此過程中,如果 Memstore 到達閾值,會把 Memstore 中的資料 flush 到 StoreFile 中。
7)當 StoreFile 越來越多,會觸發 Compact 合併操作,把過多的Storefile 合併成一個大的StoreFile 。當StoreFile 越來越大,Region 也會越來越大,達到閾值後,會觸發 Split 操作,將 Region 一分為二。
三、Hbase 部署與使用
3.1部署
1.Zookeeper正常部署
首先保證Zookeeper叢集的正常部署,並且啟動:
#:/usr/local/zookeeper-3.1.0/bin/zkServer.sh start
2.Hadoop正常部署
Hadoop叢集的正常部署並且啟動:
#:/usr/local/hadoop-2.7.2/bin/start-dfs.sh
#:/usr/local/hadoop-2.7.2/bin/start-yarn.sh
3.Hbase的解壓
#:tar -zxvf hbase-1.3.1-bin.tar.gz -C /usr/local
4.Hbase的配置檔案
export JAVA_HOME=/usr/local/jdk1.8.0_121
export HBASE_MANAGES_ZK=false
hbase-site.xml修改內容:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop01:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 0.98 後的新變動,之前版本沒有.port,預設埠為 60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/zookeeper-3.1.0/zkData</value>
</property>
</configuration>
regionservers:
hadoop01
hadoop02
hadoop03
3.2 Hbase 需要依賴的jar包
由於Habse需要依賴於Hadoop,所以替換Hbase的lib 的目錄下的 jar 包,以解決相容問題:
1.刪除原有的jar包
rm -rf /usr/lcoal/hbase-1.3.1/lib/hadoop-*
rm -rf /usr/local/hbase-1.3.1/lib/zookeeper-3.4.6.jar
2.拷貝新jar包
hadoop-annotations-2.7.2.jar
hadoop-auth-2.7.2.jar
hadoop-client-2.7.2.jar
hadoop-common-2.7.2.jar
hadoop-hdfs-2.7.2.jar
hadoop-mapreduce-client-app-2.7.2.jar
hadoop-mapreduce-client-common-2.7.2.jar
hadoop-mapreduce-client-core-2.7.2.jar
hadoop-mapreduce-client-hs-2.7.2.jar
hadoop-mapreduce-client-hs-plugins-2.7.2.jar
hadoop-mapreduce-client-jobclient-2.7.2.jar
hadoop-mapreduce-client-jobclient-2.7.2-tests.jar
hadoop-mapreduce-client-shuffle-2.7.2.jar
hadoop-yarn-api-2.7.2.jar
hadoop-yarn-applications-distributedshell-2.7.2.jar
hadoop-yarn-applications-unmanaged-am-launcher-2.7.2.jar
hadoop-yarn-client-2.7.2.jar
hadoop-yarn-common-2.7.2.jar
hadoop-yarn-server-applicationhistoryservice-2.7.2.jar
hadoop-yarn-server-common-2.7.2.jar
hadoop-yarn-server-nodemanager-2.7.2.jar
hadoop-yarn-server-resourcemanager
hadoop-yarn-server-tests-2.7.2.jar
hadoop-yarn-server-web-proxy-2.7.2.jar
zookeeper-3.4.5.jar
特別提示:這些 jar 包的對應版本應替換成你目前使用的 hadoop 版本,具體情況具體分析。
3.3 Hbase軟連線Hadoop配置
ln -s /usr/local/hadoop-2.7.2/etc/hadoop/core-site.xml
/usr/lcoal/hbase-1.3.1/conf/core-site.xml
ln -s /usr/local/hadoop-2.7.2/etc/hadoop/hdfs-site.xml
/usr/local/hbase-1.3.1/conf/hdfs-site.xml