天天看點

HBase概述安裝及操作第2章 HBase安裝第3章 HBase Shell操作第4章 HBase資料結構

第1章 HBase簡介

1.1什麼是HBase

HBase是一個高可靠性、面向列的分布式存儲系統,利用HBASE技術可在廉價PC Server上搭建起大規模結構化存儲叢集。

HBase的目标是存儲并處理大型的資料,更具體來說是僅需使用普通的硬體配置,就能夠處理由成千上萬的行和列所組成的大型資料。

HBase是Google Bigtable的開源實作,但是也有很多不同之處。比如:Google Bigtable利用GFS作為其檔案存儲系統,HBase利用Hadoop HDFS作為其檔案存儲系統;Google運作MAPREDUCE來處理Bigtable中的海量資料,HBase同樣利用Hadoop MapReduce來處理HBase中的海量資料;Google Bigtable利用Chubby作為協同服務,HBase利用Zookeeper作為對應

1.2 Hbase特點

1)海量存儲

Hbase适合存儲PB級别的海量資料,在PB級别的資料以及采用廉價PC存儲的情況下,能在幾十到百毫秒内傳回資料。這與Hbase的極易擴充性相關。正是因為Hbase良好的擴充性,才為海量資料的存儲提供了便利。

2)列式存儲

這裡的列式存儲其實說的是列族存儲,Hbase是根據列族來存儲資料的。列族下面可以有非常多的列,列族在建立表的時候就必須指定。

3)極易擴充

Hbase的擴充性主要展現在兩個方面,一個是基于上層處理能力(RegionServer)的擴充,一個是基于存儲的擴充(HDFS)。

通過橫向添加RegionSever的機器,進行水準擴充,提升Hbase上層的處理能力,提升Hbsae服務更多Region的能力。

備注:RegionServer的作用是管理region、承接業務的通路,通過橫向添加Datanode的機器,進行存儲層擴容,提升Hbase的資料存儲能力和提升後端存儲的讀寫能力。

4)高并發

在并發的情況下,Hbase的單個IO延遲下降并不多。能獲得高并發、低延遲的服務。

5)稀疏

稀疏主要是針對Hbase列的靈活性,在列族中,你可以指定任意多的列,在列資料為空的情況下,是不會占用存儲空間的。

1.3 HBase架構

HBase概述安裝及操作第2章 HBase安裝第3章 HBase Shell操作第4章 HBase資料結構

從圖中可以看出Hbase是由Client、Zookeeper、Master、HRegionServer、HDFS等幾個元件組成,下面來介紹一下幾個元件的相關功能:

1)Client

Client包含了通路Hbase的接口,另外Client還維護了對應的cache來加速Hbase的通路,比如cache的.META.中繼資料的資訊。

2)Zookeeper

HBase通過Zookeeper來做master的高可用、RegionServer的監控、中繼資料的入口以及叢集配置的維護等工作。具體工作如下:

通過Zoopkeeper來保證叢集中隻有1個master在運作,如果master異常,會通過競争機制産生新的master提供服務

通過Zoopkeeper來監控RegionServer的狀态,當RegionSevrer有異常的時候,通過回調的形式通知Master RegionServer上下線的資訊(就是使用zk完成的伺服器上下線機制)

通過Zoopkeeper存儲中繼資料的統一入口位址

3)Hmaster

master節點的主要職責如下:

為RegionServer配置設定Region

維護整個叢集的負載均衡

維護叢集的中繼資料資訊

發現失效的Region,并将失效的Region配置設定到正常的RegionServer上

當RegionSever失效的時候,協調對應Hlog的拆分

4)HregionServer

HregionServer直接對接使用者的讀寫請求,是真正的“幹活”的節點。它的功能概括如下:

管理master為其配置設定的Region

處理來自用戶端的讀寫請求

負責和底層HDFS的互動,存儲資料到HDFS

負責Region變大以後的拆分

負責Storefile的合并工作

5)HDFS

HDFS為Hbase提供最終的底層資料存儲服務,同時為HBase提供高可用(Hlog存在HDFS)的支援,具體功能概括如下:

提供中繼資料和表資料的底層分布式存儲服務

資料多副本,保證高可靠和高可用性

1.3 HBase中的角色

1.3.1 HMaster

功能

1.監控RegionServer

2.處理RegionServer故障轉移

3.進行中繼資料的變更

4.處理region的配置設定或轉移

5.在空閑時間進行資料的負載均衡

6.通過Zookeeper釋出中繼資料的位置給用戶端

1.3.2 RegionServer

功能

1.負責存儲HBase的實際資料

2.處理配置設定給它的Region

3.重新整理緩存到HDFS

4.維護Hlog(每個regionserver都有一個Hlog)

5.執行壓縮

6.負責處理Region分片(自動分片)

1.2.3 其他元件

1.Write-Ahead logs(WAL,HLOG&edits日志)

HBase的修改記錄,當對HBase讀寫資料的時候,資料不是直接寫進磁盤,它會在記憶體中保留一段時間(時間以及資料量門檻值可以設定)。但把資料儲存在記憶體中可能有更高的機率引起資料丢失,為了解決這個問題,資料會先寫在一個叫做Write-Ahead logfile的檔案中,然後再寫入記憶體中。是以在系統出現故障的時候,資料可以通過這個日志檔案重建。

2.Region

Hbase表的分片,HBase表會根據RowKey值被切分成不同的region存儲在RegionServer中,在一個RegionServer中可以有多個不同的region。

3.Store

HFile存儲在Store中,一個Store對應HBase表中的一個列族。

4.MemStore

記憶體存儲,位于記憶體中,用來儲存目前的資料操作,是以當資料儲存在WAL中之後,RegsionServer會在記憶體中存儲鍵值對。

5.HFile

這是在磁盤上儲存原始資料的實際的實體檔案,是實際的存儲檔案。StoreFile是以HFile的形式存儲在HDFS的。

第2章 HBase安裝

2.1 Zookeeper正常部署

首先保證Zookeeper叢集的正常部署,并啟動之:

[[email protected] zookeeper-3.4.10]$ bin/zkServer.sh start

[[email protected] zookeeper-3.4.10]$ bin/zkServer.sh start

[[email protected] zookeeper-3.4.10]$ bin/zkServer.sh start

2.2 Hadoop正常部署

Hadoop叢集的正常部署并啟動:

[[email protected] hadoop-2.7.2]$ sbin/start-dfs.sh

[[email protected] hadoop-2.7.2]$ sbin/start-yarn.sh

2.3 HBase的解壓

解壓HBase到指定目錄:

[[email protected] software]$ tar -zxvf hbase-1.3.1-bin.tar.gz -C /opt/module

2.4 HBase的配置檔案

修改HBase對應的配置檔案。

1)hbase-env.sh修改内容:

export JAVA_HOME=/opt/module/jdk1.8.0_144

export HBASE_MANAGES_ZK=false

2)hbase-site.xml修改内容:

<configuration>

<property>     

<name>hbase.rootdir</name>     

<value>hdfs://hadoop101:9000/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>hadoop101:2181,hadoop102:2181,hadoop103:2181</value>

</property>

<property>  

<name>hbase.zookeeper.property.dataDir</name>

     <value>/opt/module/zookeeper-3.4.10/zkData</value>

</property>

</configuration>

3)regionservers:

hadoop101

hadoop102

hadoop103

4)軟連接配接hadoop配置檔案到hbase:

[[email protected] module]$ ln -s /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml

/opt/module/hbase-1.3.1/conf/core-site.xml

[[email protected] module]$ ln -s /opt/module/hadoop-2.7.2/etc/hadoop/hdfs-site.xml

/opt/module/hbase-1.3.1/conf/hdfs-site.xml

2.5 HBase遠端發送到其他節點

2.6 HBase服務的啟動

1.啟動方式1

[[email protected] hbase]$ bin/hbase-daemon.sh start master

[[email protected] hbase]$ bin/hbase-daemon.sh start regionserver

提示:如果叢集之間的節點時間不同步,會導緻regionserver無法啟動,抛出ClockOutOfSyncException異常。

修複提示:

a、同步時間服務

b、屬性:hbase.master.maxclockskew設定更大的值

<property>

        <name>hbase.master.maxclockskew</name>

        <value>180000</value>

        <description>Time difference of regionserver from master</description>

 </property>

2.啟動方式2

[[email protected] hbase]$ bin/start-hbase.sh

對應的停止服務:

[[email protected] hbase]$ bin/stop-hbase.sh

2.7 檢視HBase頁面

啟動成功後,可以通過“host:port”的方式來通路HBase管理頁面,例如:

http://hadoop:16010

HBase概述安裝及操作第2章 HBase安裝第3章 HBase Shell操作第4章 HBase資料結構

第3章 HBase Shell操作

3.1 基本操作

1.進入HBase用戶端指令行(任意節點均可)

[[email protected] hbase]$ bin/hbase shell

2.檢視幫助指令

hbase(main):001:0> help

3.檢視目前資料庫中有哪些表

hbase(main):002:0> list

3.2 表的操作

1.建立表

hbase(main):002:0> create 'student','info'  (單雙引号無所謂)

2.插入資料到表

hbase(main):003:0> put 'student','1001','info:sex','male'

hbase(main):004:0> put 'student','1001','info:age','18'

hbase(main):005:0> put 'student','1002','info:name','Janna'

hbase(main):006:0> put 'student','1002','info:sex','female'

hbase(main):007:0> put 'student','1002','info:age','20'

3.掃描檢視表資料

hbase(main):008:0> scan 'student'

hbase(main):009:0> scan 'student',{STARTROW => '1001', STOPROW  => '1002'}

hbase(main):010:0> scan 'student',{STARTROW => '1001'}

4.檢視表結構

hbase(main):011:0> describe 'student'

5.更新指定字段的資料

hbase(main):012:0> put 'student','1001','info:name','Nick'

hbase(main):013:0> put 'student','1001','info:age','100'

6.檢視“指定行”或“指定列族:列”的資料

hbase(main):014:0> get 'student','1001'

hbase(main):015:0> get 'student','1001','info:name'

7.統計表資料行數

hbase(main):021:0> count 'student'

8.删除資料

删除某rowkey的全部資料:

hbase(main):016:0> deleteall 'student','1001'

删除某rowkey的某一列資料:

hbase(main):017:0> delete 'student','1002','info:sex'

9.清空表資料(表結構還在)

hbase(main):018:0> truncate 'student'

提示:清空表的操作順序為先disable,然後再truncate。

10.删除表

首先需要先讓該表為disable狀态:

hbase(main):019:0> disable 'student'

然後才能drop這個表:

hbase(main):020:0> drop 'student'

提示:如果直接drop表,會報錯:ERROR: Table student is enabled. Disable it first.

11.變更表資訊

将info列族中的資料存放3個版本:

hbase(main):022:0> alter 'student',{NAME=>'info',VERSIONS=>3}

hbase(main):022:0> get 'student','1001',{COLUMN=>'info:name',VERSIONS=>3}

第4章 HBase資料結構

4.1 RowKey

與nosql資料庫們一樣,RowKey是用來檢索記錄的主鍵。通路HBASE table中的行,隻有三種方式:

1.通過單個RowKey通路

2.通過RowKey的range

3.全表掃描

RowKey行鍵 (RowKey)可以是任意字元串(最大長度是64KB,實際應用中長度一般為 10-100bytes),在HBASE内部,RowKey儲存為位元組數組。存儲時,資料按照RowKey的字典序(byte order)排序存儲。設計RowKey時,要充分利用排序存儲這個特性,将經常一起讀取的行存儲放到一起。(位置相關性)

4.2 Column Family

列族:HBASE表中的每個列,都歸屬于某個列族。列族是表的schema的一部分(而列不是),必須在使用表之前定義。列名都以列族作為字首。例如 courses:history,courses:math都屬于courses 這個列族。

4.3 Time Stamp

HBASE 中通過rowkey和columns确定的為一個存貯單元稱為cell。cell中的資料是沒有類型的,全部是位元組數組形式存貯。每個 cell都儲存 着同一份資料的多個版本。版本通過時間戳來索引。時間戳的類型是 64位整型。時間戳可以由HBASE(在資料寫入時自動 )指派,此時時間戳是精确到毫秒 的目前系統時間。時間戳也可以由客戶顯式指派。如果應用程式要避免資料版 本沖突,就必須自己生成具有唯一性的時間戳。每個 cell中,不同版本的資料按照時間倒序排序,即最新的資料排在最前面。

為了避免資料存在過多版本造成的的管理 (包括存貯和索引)負擔,HBASE提供 了兩種資料版本回收方式。一是儲存資料的最後n個版本,二是儲存最近一段 時間内的版本(比如最近七天)。使用者可以針對每個列族進行設定。

4.5 命名空間

命名空間的結構:

HBase概述安裝及操作第2章 HBase安裝第3章 HBase Shell操作第4章 HBase資料結構

1) Table:表,所有的表都是命名空間的成員,即表必屬于某個命名空間,如果沒有指定,則在default預設的命名空間中。Create_namespace

2) RegionServer group:一個命名空間包含了預設的RegionServer Group。

3) Permission:權限,命名空間能夠讓我們來定義通路控制清單ACL(Access Control List)。例如,建立表,讀取表,删除,更新等等操作。

4) Quota:限額,可以強制一個命名空間可包含的region的數量。

繼續閱讀