首頁>技術>

一、Hbase簡介

1、基礎描述

Hadoop原生的特點是解決大規模資料的離線批次處理場景,HDFS具備強大儲存能力,但是並沒有提供很強的資料查詢機制。HBase元件則是基於HDFS檔案系統之上提供類似於BigTable服務。

HBase是一種分散式、可擴充套件、支援海量結構化資料儲存的NoSQL資料庫。HBase在Hadoop之上提供了類似於Bigtable的能力,基於列儲存模式的而不是基於行的模式。儲存資料特點:非結構化或者鬆散的半結構化資料,儲存大表自然是需要具備水平擴充套件的能力,基於服務叢集處理海量龐大資料。

2、資料模型

基於Hbase的資料結構的基本描述;

表-Table:由行和列組成,列劃分為若干個列族;行-Row:行鍵(Key)作標識,行代表資料物件;列族:列族支援動態擴充套件,以字串形式儲存;列標識:列族中的資料透過列識別符號來定位;單元格:行鍵,列族,列識別符號共同確定一個單元;單元資料:儲存在單元裡的資料稱為單元資料;時間戳:預設基於時間戳來進行版本標識;

HBase的資料模型同關係型資料庫很類似,資料儲存在一張表中,有行有列。但從HBase的底層物理儲存結構看更像是Map(K-V)集合。

資料管理是基於列儲存的特點;簡單的資料模型,內容儲存為字串;沒有複雜的表關係,簡單的增刪查操作;

從整體上看資料模型,HBase是一個稀疏、多維度、排序的對映表,這張表的索引是行鍵、列族、列限定符和時間戳每個值是一個未經解釋的字串。

二、搭建叢集環境

1、解壓檔案

tar -zxvf hbase-1.3.1-bin.tar.gz

2、配置環境變數

vim /etc/profileexport HBASE_HOME=/opt/hbase-1.3.1export PATH=$PATH:$HBASE_HOME/binsource /etc/profile

3、配置:hbase-env

vim /opt/hbase-1.3.1/conf/hbase-env.shexport JAVA_HOME=/opt/jdk1.8export HBASE_MANAGES_ZK=false

4、配置:hbase-site

vim /opt/hbase-1.3.1/conf/regionservershop01hop02hop03

6、配置:軟連線

軟連線hadoop配置檔案到HBase

ln -s /opt/hadoop2.7/etc/hadoop/core-site.xml /opt/hbase-1.3.1/conf/core-site.xmlln -s /opt/hadoop2.7/etc/hadoop/hdfs-site.xml /opt/hbase-1.3.1/conf/hdfs-site.xml

7、同步叢集服務環境

也可以手動配置叢集,或者使用同步命令。

xsync hbase/

8、啟動叢集

在hop01節點啟動即可。

/opt/hbase-1.3.1/bin/start-hbase.sh

啟動日誌:

hop03: starting regionserver, logging to /opt/hbase-1.3.1/bin/../logs/hbase-root-regionserver-hop03.outhop02: starting regionserver, logging to /opt/hbase-1.3.1/bin/../logs/hbase-root-regionserver-hop02.outhop01: starting regionserver, logging to /opt/hbase-1.3.1/bin/../logs/hbase-root-regionserver-hop01.out

9、檢視狀態

jpsHMaster:主節點HRegionServer:分割槽節點

10、停止叢集

在hop01節點停止即可。

/opt/hbase-1.3.1/bin/stop-hbase.sh

11、檢視介面

http://hop01:16010
三、基礎Shell命令

1、切入客戶端

/opt/hbase-1.3.1/bin/hbase shell

2、查看錶

hbase(main):002:0> list

3、建立表

hbase(main):003:0> create 'user','info'0 row(s) in 2.7910 seconds=> Hbase::Table - user

4、查看錶結構

hbase(main):010:0> describe 'user'

5、新增資料

put 'user','id01','info:name','tom'put 'user','id01','info:age','18'put 'user','id01','info:sex','male'put 'user','id02','info:name','jack'put 'user','id02','info:age','20'put 'user','id02','info:sex','female'

6、查看錶資料

hbase(main):010:0> scan 'user'ROW     COLUMN+CELL                                                                             id01    column=info:age, timestamp=1594448524308, value=18                                      id01    column=info:name, timestamp=1594448513534, value=tom                                    id01    column=info:sex, timestamp=1594448530817, value=male                                    id02    column=info:age, timestamp=1594448542631, value=20                                      id02    column=info:name, timestamp=1594448536520, value=jack                                   id02    column=info:sex, timestamp=1594448548005, value=female

這些表結構和資料會在叢集之間自動同步。

7、查詢指定列

hbase(main):012:0> get 'user','id01'COLUMN      CELL                                                                                    info:age    timestamp=1594448524308, value=18                                                       info:name   timestamp=1594448513534, value=tom                                                       info:sex    timestamp=1594448530817, value=male

8、統計行數

hbase(main):014:0> deleteall 'user','id02'

10、清空表資料

hbase(main):018:0> disable 'user'hbase(main):019:0> drop 'user'
四、JDBC基礎查詢

1、核心依賴

<dependency>    <groupId>org.apache.hbase</groupId>    <artifactId>hbase-client</artifactId>    <version>1.3.1</version></dependency>

2、基礎配置

這裡連線zookeeper叢集地址即可。

zookeeper:  address: 叢集地址Url,逗號分隔

編寫HBase配置和常用工具方法。

@Componentpublic class HBaseConfig {    private static String address;    private static final Object lock=new Object();    public static Configuration configuration = null;    public static ExecutorService executor = null;    public static Connection connection = null;    /**     * 獲取連線     */    public static Connection getConnection(){        if(null == connection){            synchronized (lock) {                if(null == connection){                    configuration = new Configuration();                    configuration.set("hbase.zookeeper.quorum", address);                    try {                        executor = Executors.newFixedThreadPool(10);                        connection = ConnectionFactory.createConnection(configuration, executor);                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }        }        return connection;    }    /**     * 獲取 HBaseAdmin     */    public static HBaseAdmin getHBaseAdmin(){        HBaseAdmin admin = null;        try{            admin = (HBaseAdmin)getConnection().getAdmin();        }catch(Exception e){            e.printStackTrace();        }        return admin;    }    /**     * 獲取 Table     */    public static Table getTable(TableName tableName) {        Table table = null ;        try{            table = getConnection().getTable(tableName);        }catch(Exception e){            e.printStackTrace();        }        return table ;    }    /**     * 關閉資源     */    public static void close(HBaseAdmin admin,Table table){        try {            if(admin!=null) {                admin.close();            }            if(table!=null) {                table.close();            }        } catch (IOException e) {            e.printStackTrace();        }    }    @Value("${zookeeper.address}")    public void setAddress (String address) {        HBaseConfig.address = address;    }}

3、查詢案例

查詢資料參考上述全表掃描結果:

8
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • JAVA字元編碼和字符集詳解