HBase學(xué)習(xí)筆記

HBase概述

Hbase是運(yùn)行在Hadoop上的NoSQL數(shù)據(jù)庫,它是一個分布式的和可擴(kuò)展的大數(shù)據(jù)倉庫,也就是說HBase能夠利用HDFS的分布式處理模式,并從Hadoop的MapReduce程序模型中獲益。這意味著在一組商業(yè)硬件上存儲許多具有數(shù)十億行和上百萬列的大表。除去Hadoop的優(yōu)勢,HBase本身就是十分強(qiáng)大的數(shù)據(jù)庫,它能夠融合key/value存儲模式帶來實(shí)時查詢的能力,以及通過MapReduce進(jìn)行離線處理或者批處理的能力??偟膩碚f,Hbase能夠讓你在大量的數(shù)據(jù)中查詢記錄,也可以從中獲得綜合分析報(bào)告。

HBase不是一個關(guān)系型數(shù)據(jù)庫,它需要不同的方法定義你的數(shù)據(jù)模型,HBase實(shí)際上定義了一個四維數(shù)據(jù)模型,下面就是每一維度的定義:

  • 行鍵:每行都有唯一的行鍵,行鍵沒有數(shù)據(jù)類型,它內(nèi)部被認(rèn)為是一個字節(jié)數(shù)組。
  • 列簇:數(shù)據(jù)在行中被組織成列簇,每行有相同的列簇,但是在行之間,相同的列簇不需要有相同的列修飾符。在引擎中,HBase將列簇存儲在它自己的數(shù)據(jù)文件中,所以,它們需要事先被定義,此外,改變列簇并不容易。
  • 列修飾符:列簇定義真實(shí)的列,被稱之為列修飾符,你可以認(rèn)為列修飾符就是列本身。
  • 版本:每列都可以有一個可配置的版本數(shù)量,你可以通過列修飾符的制定版本獲取數(shù)據(jù)。
image

如圖,通過行鍵獲取一個指定的行,它由一個或多個列簇構(gòu)成,每個列簇有一個或多個列修飾符(圖中稱為列),每列又可以有一個或多個版本。為了獲取指定數(shù)據(jù),你需要知道它的行鍵、列簇、列修飾符以及版本。當(dāng)設(shè)計(jì)HBase數(shù)據(jù)模型時,對考慮數(shù)據(jù)是如何被獲取是十分有幫助的。你可以通過以下兩種方式獲得HBase數(shù)據(jù):

  • 通過他們的行鍵,或者一系列行鍵的表掃描
  • 使用map-reduce進(jìn)行批操作

HBase通過key/value存儲來支持實(shí)時分析,以及通過map-reduce支持批處理分析。讓我們首先來看實(shí)時數(shù)據(jù)獲取,作為key/value存儲,key是行鍵,value是列簇的集合。由于HBase是Key/Value存儲的,所以行鍵的設(shè)計(jì)非常重要。有以下兩個原因:

  1. 表掃描是對行鍵進(jìn)行操作的,行鍵的設(shè)計(jì)控制著你能夠通過HBase執(zhí)行的實(shí)時/直接獲取量
  2. 當(dāng)在生產(chǎn)環(huán)境中運(yùn)行HBase時,它在HDFS上部運(yùn)行,數(shù)據(jù)基于行鍵通過HDFS,如果你所有的行鍵都是以user-開頭,那么很有可能你大部分?jǐn)?shù)據(jù)都被分配一個節(jié)點(diǎn)上(違背了分布式數(shù)據(jù)的初衷),因此,你的行鍵應(yīng)該是有足夠的差異性以便分布式地通過整個部署。

HBase與關(guān)系型數(shù)據(jù)庫比較

比較項(xiàng) HBase 關(guān)系型數(shù)據(jù)庫
存儲方式 列式存儲,不同列的文件是分離的 行式存儲
擴(kuò)展性 列不固定,方便擴(kuò)展 固定列
數(shù)據(jù)查詢 只能通過RowKey查詢 多種查詢
數(shù)據(jù)類型 只有字符 豐富的類型
數(shù)據(jù)操作 表是分離的,表與表沒有關(guān)系 有各種連接操作
數(shù)據(jù)維護(hù) 更新是插入新的數(shù)據(jù) 修改數(shù)據(jù)

關(guān)系型數(shù)據(jù)庫的優(yōu)勢:

  1. 保持?jǐn)?shù)據(jù)的一致性(事務(wù)處理)
    2.由于以標(biāo)準(zhǔn)化為前提,數(shù)據(jù)更新的開銷很?。ㄏ嗤淖侄位旧隙贾挥幸惶帲?/li>
  2. 可以進(jìn)行Join等復(fù)雜查詢
    其中能夠保持?jǐn)?shù)據(jù)的一致性是關(guān)系型數(shù)據(jù)庫的最大優(yōu)勢。

關(guān)系型數(shù)據(jù)庫的不足:

  1. 大量數(shù)據(jù)的寫入處理
  2. 為有數(shù)據(jù)更新的表做索引或表結(jié)構(gòu)(schema)變更
  3. 字段不固定時應(yīng)用
  4. 對簡單查詢需要快速返回結(jié)果的處理

HBase的Shell操作

#創(chuàng)建blog_user表格
create 'blog_user','userInfo'

#往表格寫數(shù)據(jù)
put'blog_user','www.aboutyun.com','userInfo:user_Name','aboutyun'
put'blog_user','www.aboutyun.com','userInfo:user_Password','aboutyun'

#掃描表格數(shù)據(jù)
scan 'blog_user'

#刪除表格列的數(shù)據(jù)
delete 'blog_user','www.aboutyun.com','userInfo:user_Password'

#刪除記錄
deleteall 'blog_user','www.aboutyun.com'

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容