HBase基本知識和應用場景


HBase基本知識和應用場景

✿ 誕生背景:

      hadoop局限性: Hadoop 只能執行批量處理,並且只以順序方式訪問數據。

hadoop實際應用之一Hadoop+HBase(隨機高效讀取)建立NoSQL分布式數據庫應用

 

一、HBaseHBase以表的形式存儲數據,表有行和列組成。)

1,什么是HBase?

HBase是一個分布式的、面向列的開源數據庫。本質是一個數據庫(適用於分布式的數據庫,它面向列)。

 

HBase 結構,首先是一張表結構,然后與一般表不同的是,一般表:同一個列名下的那些一個個的單元格的值類型是相同的,而 HBase表是同一個列名下的那些一個個的單元格的值類型是不同,且數量不同...
(相比於傳統表,同列名下的一個個單元格,hbase 的單元格內容,可以裝不定長的數據(一些以鍵值對形式存儲的數據,一些則直接也是單個值的形式))

✿ 傳統表:單元格 是一個坑一個蘿卜
✿ HBase表:單元格 是一個坑 一把花生 (花生有雙仁、單仁的哦)

(圖:傳統的表)

 (圖2:HBase 表)

 

列族里的數據通過列限定符或列來定位

通過列限定符來定位例如:Sname:nickName,Sage:female 等等;通過列來定位 的例如:Sname:小紅

 

2,HBase 中的表特點:

(1)大:一個表可以有上十億行,上百萬列

(2)面向列:列可以靈活指定,面向列(族)的存儲和權限控制,列(簇)獨立檢索。

(3)稀疏:對於為空(null)的列,並不占用存儲空間,因此,表可以設計的非常稀疏。

(4)無嚴格模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動態的增加,同一張表中不同的行可以有截然不同的列

 

3.1,HTable一些基本概念1

在HBase中,HTable是其客戶端和服務端通信的java api對象,主要提供對表的put/get/delete/scan等操作

     創建一個 hBase 對象:

Configuration conf = HBaseConfiguration.create();

HTable hTable = new HTable(conf, "tableName");

② HTable 的增刪改查,這里簡單舉幾個例子

●獲取指定行某些單元格對應的值:public Result get(final Get get) throws IOException

●獲取表名:public byte [] getTableName()

●添加值:public void put(final Put put) throws IOException

●刪除指定單元格/行:void delete(Delete delete) throws IOException

......

ps: HBase Java API 代碼開發

常用的幾個主要HBase API類和數據模型之間的對應關系:

 

3.2, HTable一些基本概念2 【表結構邏輯視圖

表:HBase用表來組織數據。

 

行:在表里,數據按行存儲,行由行鍵唯一標識。行鍵沒有數據類型,為字節數組byte[]。

 

列族:行里的數據按照列族分組,列族必須事先定義並且不輕易修改。表中每行擁有相同的列族。

 

列限定符:列族里的數據通過列限定符或列來定位,列限定符不必事先定義。

 

單元:存儲在單元里的數據稱為單元值,值是字節數組。單元由行鍵,列族或列限定符一起確定。

 

時間版本:單元值有時間版本,是一個long類型。

 1、 行鍵(RowKey):

通過單個 row key 訪問
② 通過 row key range
③ 全表掃描

2、 列簇(Column Family):

  • HBase 表中的每個列,都歸屬與某個列簇。列簇是表的 Schema 的一部分(而列不是)
  • 列名都以列簇作為前綴。例如:student:name,student:age,teacher:age 等等 (例子在文章最后的圖1)
  • 訪問控制、磁盤和內存的使用統計等都是在列簇層面進行的。
  • 列簇越多,在取一行數據時所要參與 IO、搜尋的文件就越多,所以,如果沒有必要,不要設置太多的列簇,官網推薦是小於等於 3(最好就一個列簇)

3、 時間戳(TimeStamp):

■  時間戳可以由 HBase (在數據寫入時自動)賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。

■ 每個單元格都保存着同一份數據的多個版本。版本通過時間戳來索引。

■ 如果應用程序要避免數據版本沖突,就必須自己生成具有唯一性的時間戳。

每個單元格中,不同版本的數據按照時間倒序排序,即最新的數據排在最前面。HBase 在查詢的時候,默認返回最新版本/最近的數據。如果需要讀取舊版本的數據,可以指定時間戳。

□    為了避免數據存在過多版本造成的的管理(包括存儲和索引)負擔,HBase 提供了兩種數據版本回收方式:
  保存數據的最后 n 個版本
  
保存最近一段時間內的版本(設置數據的生命周期 TTL)。
  用戶可以針對每個列簇進行設置。

4、 單元格(Cell):

■ 由{RowKey, Column( =<Column Family> + <Qualifier>), Version} 唯一確定的單元。Cell 中的數據是沒有類型的,全部是字節碼形式存儲。

 

 

二、HBase 的安裝和應用

對應於Hadoop,HBase 也有三種運行模式:單機模式、偽分布式模式、分布式模式。

..........(安裝過程遇到的bug,請參考文章)《HBase 安裝之后版本的驗證的bug:(錯誤的替換、找不到或無法加載主類、SLF4J)

 

 

 

附錄

圖1:HBase 表結構

圖2:列名以列簇作為前綴的例子

 

 

列族里的數據通過列限定符或列來定位

通過列限定符來定位例如:Sname:nickName,Sage:female 等等;通過列來定位 的例如:Sname:小紅

 

 

 

 

 

 

參考文章:

 《Hbase總結(五)-hbase常識及habse適合什么場景》https://blog.csdn.net/lifuxiangcaohui/article/details/39894265

 《hBase之HTable踩坑》https://www.jianshu.com/p/8f5fad6d7c9c 

 《HBase基礎知識》https://blog.csdn.net/qq_1018944104/article/details/85013790

 《HBase 的Get(讀),Put(寫),Delete(刪),Scan(掃描)和Increment(列值遞增)》https://www.cnblogs.com/wangleBlogs/p/9935553.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM