Hbase細節概要

HBase是建立在Hadoop文件系統之上的分佈式面向列的數據庫,HBase是一個數據模型,類似於谷歌的BigTable,可以提供快速隨機訪問海量結構化數據。它是Hadoop的生態系統,提供對數據的隨機實時讀/寫訪問,是Hadoop文件系統的一部分,可以直接通過HBase存儲HDFS數據。 HBase在Hadoop的文件系統之上,並提供了讀寫訪問。

本片文章比較偏向於HBase的基礎理論,適合初入HBase的新手或者作為一個基礎回顧

目錄結構

HBase 基礎

1. 一致性模型

2. 表-行-列和單元格

3. 分區(sharding)

4. HBase⾃自動分區

HBase基礎配置

HBase API操作

HBase 基礎特性

一致性模型介紹

HBase是⼀一個分佈式的,具有持久的,強⼀一致性的存儲系統,所謂⼀一致性是保證數據庫客戶端操作的正確性,每⼀一步的操作都是從⼀一個⼀一致性的狀態進⼊入另⼀一個⼀一致性的狀態中。

在CAP理論中 [Consistency (一致性)Availability (可用性)Partition tolerance (分區容錯性) ⾸首字⺟母的縮寫]提出,任何分佈式系統在可用性、一致性、分區容錯性方面,不能兼得,最多隻能滿⾜足其中兩個。

在這⾥裡HBase是⼀一種基於CP的實現 (分佈式系統一般是在C和A之間做一個選擇,因為對於分佈式系統而言,分區容錯性是必須的,否則會存在單點問題)

HBase的Consistency主要是因為對於每一個region分區的操作同時只有一個region server對它進⾏行服務,region的讀寫都是由region server去響應的,所以他是強一致性的。當regionserver掛掉之後,這時faildover 回到其他的region server去redo region(通過WAL log),然後redo之後的region是不可⽤用的,所以失去了可⽤用性。

Hbase細節概要

表/行/列/單元格

HBase中最簡單的單位是列(Column),一列或者多列形成一行(Row),由一個唯一的主鍵(Row key)來形成存儲。行鍵時唯一的並且是任意的字節數組,一行由若干列組成,若干列構成了一個列族(列族有助於構建數據的語義以及設置特性)每一個列族的列存儲在同一個底層存儲文件中,這個存儲⽂文件就是HFile,一個表會有若干行,其中每列有多個版本,在每一個單元格中存儲了不同的值

Hbase細節概要

分區

分區(sharding):主要描述了邏輯上水平劃分數據的方案,分區的特點就是將數據分文件或者分服務器存儲,而不是連續存儲

HBase自動分區:

HBase中擴展和負載均衡的基本單位時region,region本質上是以行鍵排序的連續存儲的區間,如果region過⼤大,那麼HBase會將它動態的分為多個region,反之,則會將多個region合併,從而減少存儲文件的數量(HDFS不適宜存儲小文件)

HBase 預分區設計:

HBase開始一個表默認只有一個region,當數據量達到一定閥值時,會自動的分為多個region,但是當數據量增速的很快的時候進行region分區,會造成⼀一定程度的資源消耗,所以可以在創建表的時

候就對HBase進⾏行預分區。

create 't1','ed', SPLITS => ['10','15','21’]

Hbase細節概要

當put一條數據到rowkey為15的時候,就會放在region2中

HBase基礎配置操作

分佈式系統的配置參數是性能調優中很重要的一部分,通過參數調優可能很好的利⽤用集群規模。如果我們不添加或者修改一些配置的話,那麼系統自身就會使用自己默認的參數(比較基礎和公用,需要根據⾃自⾝身業務進⾏行調整)。

HBase的配置文件放置在conf/下,其中hive-env.sh 主要是一些環境變量以及JVM的啟動參數比如堆棧大小和垃圾回收策略,我們需要修改的主要配置文件就是hbase-site.xml 這樣⽂文件是由我們進行配置定義的,另外hbase-default.xml包含了默認hbase使用的配置參數,可以參考著hbase-default.xml中的配置節點在配置hbase-sitex.xml, HBase在啟動的時候,會先加在hbase-default.xml中的配置,然後在加載hbase-site.xml,hbase-site.xml中的配置會覆蓋掉hive-default.xml中的配置。

hbase-env.sh 配置環境變量

export JAVA_HOME=/opt/java/java8

export HBASE_HOME=/opt/hbase/hbase1.1

export HBASE_LOG_DIR=/var/logs/hbase

具體的配置列表移步這⾥裡看吧,太多了(後續會結合經驗寫⼀一些參數調優的⽂文章) :

https://hbase.apache.org/book.html#_configuration_files

HBase 特性介紹

過濾器:

通常我們在查詢HBase數據時採⽤用的是get()和scan()函數,也可以指定一些條件來限制查詢到的數量,比如指定某些列,列族,時間等,但是這些都是比較粗的查詢方式,過濾器Filter就可以幫助我們查詢細粒度的,通過實現Filter過濾器接口,然後編寫客戶端代碼(HBase內部也實現了一部分過濾器),過濾器在客戶端創建,然後通過RPC傳送到服務器(regionServer),然後服務器端執行過濾操作。

通過HBase過濾器可以幫助我們提高處理表的效率,HBase提供了內置的過濾器同時也可以自己定義過濾器

計數器:

通過計數器特性,我們可以很方便的,快速的進行計數操作,從而避免了行鎖帶來的資源競爭問題,通過計數器特性可以用來做一些實時數據展示的功能,只需要將標識存入計數器列中

單計數器:

每一次增加都只操作一個計數器,需要自己來設定使用哪一列。

Hbase細節概要

給x表x⾏行x列族添加⼀一個計算器:

incr 'table', ‘row-1', 'cf1:count', 10

後續繼續總結複習〜~〜~。

為了方便大家相互交流學習,創建了一個公眾號同名微信群:《大數據和雲計算技術交流群》,人數已經2000+,歡迎大家加我微信。


分享到:


相關文章: