HBase學習之路——HBase 常用API彙總

前言

       今天剛剛過完HBase入門階段,本來應該周內搞完的,但中途自己的電腦配置太低了以至於虛擬機開個IDEA都卡到爆...好在室友的電腦可用,比預期慢了三天左右完成入門,但學的還算紮實,現就一些常用的程序搞個總結以供以後參考使用。

HBase數據庫常用代碼與HBase API

一、IDEA連接HBase數據庫

1. project配置:IDEA創建maven project,在main目錄下的resource中添加hbase-site.xml文件,同時project加入hbase安裝目錄下lib目錄到libraries目錄,在pom.xml配置文件中加入有關hbase-server和hbase-client的dependency說明(一共maven下載相應的jar包),注意要和系統使用的HBase版本保持一致。

<dependencies>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-server<artifactId>
        <version>2.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client<artifactId>
        <version>2.0.0</version>
    </dependency>
</dependencies>

2. 連接HBase

        一般情況下,在類中會將連接過程直接作爲靜態方法使用static(其他HBase操作方法都會使用到這些過程),configuration、connection、admin對象也都會使用到,因此多提出來作爲private static全局靜態變量使用。connection和admin的資源關閉也可以新建一個static方法完成,其餘方法直接調用即可。(Java中,static方法只能調用static方法,非static方法可調用static方法,多多學習提高代碼的可複用性、可讀性和可移植性)

  • Configuration對象

       首先創建Configuration對象,完成配置,對configuration對象使用set方法配置連接zookeeper的quorum和clientPort。(HBase數據訪問主要是客戶端通過ZooKeeper訪問RegionServer完成的,和Master沒啥關係,因此沒有對master的配置)

       其中,quorum爲HBase服務器的hostname或者ip地址(集羣的話寫每個服務器的ip/hostname即可,用逗號隔開);clientPort爲ZooKeeper訪問端口,一般爲2181(一般需要在hbase-site.xml中有配置,自行百度)

  • Connection對象

       創建好配置Configuration對象後,創建Connection連接對象,建立和HBase數據庫的連接(過程其實和關係型數據連接配置過程相似)

  • Admin對象

       最後創建Admin對象即客戶端管理員對象,其後的HBase數據庫操作基本全是由Admin發出。

注意:connection和admin均佔用系統資源,在使用完以後一定注意使用close方法關閉資源,以免造成資源短缺。

二、判斷表是否存在

        創建表名對象TableName,使用HBase API中的tableExists()方法查看獲取boolean值完成表是否存在的判斷。

三、創建表

        首先判斷表是否存在,若存在則直接返回不再執行後續代碼,若不存在則新建HTableDescriptor對象和HColumnDescriptor對象,新建HColumnDescriptor對象加入cf列族(可使用for循環加入多個列族),將HColumnDescriptor對象通過addFamily方法加入到HTableDescriptor對象中,最後使用HBase API中的createTable方法完成表的創建。

 

四、刪除表

        首先判斷表是否不存在,若不存在則直接返回,若存在則調用HBase API中的disableTable方法和deleteTable方法完成表的刪除曹總。注意一定要先disable掉表再deleteTable,否則會直接報錯。

五、增加/更新表數據

        通過Connection對象的getTable方法建立Table對象,然後以rowkey爲參數創建一個put對象,並對這個put對象調用addColumn方法,最後調用Table對象的put方法,將put對象加入到table對象中即可。注意更新數據在HBase中也是增加一條數據,只是這條數據的版本更高一點。同時在HBase中數據都是以byte[]字節數組的形式存儲的,因此需要通過Bytes.toBytes方法進行數據類型轉換。

六、刪除表數據

        分爲刪除整行、刪除整個列族、刪除某列的最新版本/指定版本、刪除某列的所有版本。流程爲創建Table對象,以rowkey爲參數創建delete對象,通過addColumns方法對delete對象添加刪除的目標,最後通過table對象調用以delete對象爲參數的delete方法完成數據刪除。注意delete刪除表的具體某個列時需要明確addColumns方法和addColumn方法的不同,前者是刪除該列的所有版本,後者是刪除該列數據的最新版本或添加ts時間參數刪除某個指定版本。一般生產環境中使用前者。

七、全表掃描scan

        創建table對象、創建scan對象,以scan對象爲參數通過table對象的 getScanner方法獲取全表掃描集合ResultScanner對象(一個集合),通過for循環獲取scanner對象的cell數組(行鍵:列族:列:版本號)和row(byte[]字節數組類型)(對Results集合遍歷後獲得的Result數據同樣可拆分爲rowkey和cell數組,本身也是一個集合),最後通過對cell數組遍歷打印出全表所有的數據(通過CellUtil類的cloneRow、cloneFamily、cloneQualifier、cloneValue獲取數據的行鍵、列族、列和值。注意此處cloneXXX方法獲取的是byte[]字節數組類型數據,如果需要直接打印則要做Bytes.toString方法的類型轉換

八、get方法獲取某列數據

        創建table對象,以rowkey爲參數創建get對象,爲get對象通過addColumn方法添加列族、列的查詢限制。以get對象爲參數通過table對象的get方法獲取Result對象,對result對象使用rawCells方法獲取Cell單元格數組,對其進行遍歷獲取打印get目標行鍵目標列族目標列的所有數據。注意也可只定義到get對象,不添加cf和cn的限制遍歷獲取目標rowkey一整行的數據,也可以通過addFamily方法查詢某列族所有列的所有數據。

總結

        其實總的來看,方法都挺簡單的,但是還是需要多多練習,熟練掌握HBase API的使用,多多參考官方API文檔掌握最新版本的API使用方法,使自己的代碼質量更高。

        當然此處的這些方法在適當的時候需要根據實際情況需要對參數、返回類型、方法內容等等進行更新修改,但是例如throws IOException和HBase數據庫連接等基本的還是需要牢牢掌握。

        回顧整個HBase入門階段,不到兩週時間,學的還算不錯,後續升級階段和運維階段也要繼續加油呀!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章