HBase 搭建使用

HBase 編程語言 XML Apache IT星源 2017-06-16

HBase 搭建使用

HBase(Hadoop Database)是一個開源的非關係型分佈式數據庫(NoSQL),它參考了谷歌的BigTable建模,實現的編程語言為 Java。它是Apache軟件基金會的Hadoop項目的一部分,運行於HDFS文件系統之上,它可以容錯地存儲海量稀疏的數據。

HBase在列上實現了BigTable論文提到的壓縮算法、內存操作和布隆過濾器。HBase的表能夠作為MapReduce任務的輸入和輸出,可以通過Java API來訪問數據,也可以通過REST、Avro或者Thrift的API來訪問。

在 CAP理論中,HBase屬於CP類型的系統。

安裝單機環境

去apache官方網站,下載 HBase 。點擊 stable目錄,然後下載hbase-1.2.6-bin.tar.gz。解壓即可

tar xzvf hbase-1.2.6-bin.tar.gz

cd hbase-1.2.6/

先安裝java環境。設置環境變量JAVA_HOME

編輯 conf/hbase-site.xml 配置hbase.rootdir,來選擇HBase將數據寫到哪個目錄。將 DIRECTORY 替換成你期望寫文件的目錄。默認hbase.rootdir 是指向 /tmp/hbase-${user.name}

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

<name>hbase.rootdir</name>

<value>file:/home/users/xxxxxx/hbase_data/</value>

</property>

</configuration>

啟動HBase

./bin/start-hbase.sh

現在運行的是單機模式的Hbaes,所有的服務都運行在一個JVM上。通過jps命令查看HMaster進程。HBase的日誌放在logs目錄,當你啟動出問題的時候,可以檢查這些日誌。

關閉HBase

./bin/stop-hbase.sh

stopping hbase....................

數據模型

在HBase中,數據存儲在具有行和列的表中。這是與關係數據庫(RDBMS)的術語重疊,但並不相同。相反,HBase表應該被視為多維映射。

表(Table)

HBase表由多行組成。

行(Row)

HBase中的一行由行鍵(row key)和一個或多個列組成。行鍵按字母順序排序,因此,行鍵的設計是非常重要的。目標是相關相近的行存儲在一起。如果你的行鍵是網站域名,你應該可以將它們反向存儲(org.apache.www,org.apache.mail,org.apache.jira)。這樣,所有的apache域名都在表中臨近存儲,而不是由於二級域名而分散。

列(Column)

HBase中的列由列族和列限定符組成,它們由一個:(冒號)字符分隔。

列族(Column Family)

列族經常出於性能考慮,共同定位一組列及其值。每列族都具有一組存儲屬性,例如它的值是否應該緩存在內存中,它的數據如何被壓縮或者它的行鍵如何被編碼等等。表中的每一行都具有相同的列族,儘管某些行可能不會在給定列族中存儲任何內容。

列限定符(Column Qualifier)
列限定符被添加到列族中以提供給定數據片段的索引。 比如列族content,列限定符可能是content:html,另一個可能是content:pdf。 儘管列族在表創建時已經確定,但列限定符是可變的,並且可能不同行的之間有很大不同。

單元(cell)

一個{row, column, version} 元組確定一個HBase中的一個 cell。包含值和時間戳。

時間戳(Timestamp)

時間戳與每個值一起寫入,並且是值的給定版本的標識符。默認情況下,時間戳記表示server端寫入數據的時間,但可以在數據寫入時指定時間戳值。

shell命令

連接到HBase

$ ./bin/hbase shell

hbase(main):001:0>

創建一個名為 t1 的表,這個表只有一個 列族 為 cf

hbase(main):003:0> create 't1','cf'

0 row(s) in 1.2360 seconds

=> Hbase::Table - t1

查看數據表

hbase(main):004:0> list 't1'

TABLE

t1

1 row(s) in 0.0050 seconds

=> ["t1"]

hbase(main):005:0> describe 't1'

Table t1 is ENABLED

t1

COLUMN FAMILIES DESCRIPTION

{NAME => 'cf', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCO

DING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536',

REPLICATION_SCOPE => '0'}

1 row(s) in 0.0940 seconds

插入數據

put 't1', 'row1', 'cf:a', 'value1'

put 't1', 'row2', 'cf:b', 'value2'

put 't1', 'row3', 'cf:c', 'value3'

HBase中的列是由 列族前綴和列的名字組成的,以冒號間隔

掃描全表

hbase(main):011:0> scan 't1'

ROW COLUMN+CELL

row1 column=cf:a, timestamp=1497426156495, value=value1

row2 column=cf:b, timestamp=1497426156519, value=value2

row3 column=cf:c, timestamp=1497426157158, value=value3

3 row(s) in 0.0090 seconds

按範圍查找rowkey

hbase(main):015:0> scan 't1' , {STARTROW=>'row1',STOPROW=>'row2'}

ROW COLUMN+CELL

row1 column=cf:a, timestamp=1497426156495, value=value1

1 row(s) in 0.0100 seconds

查找一行記錄

hbase(main):016:0> get 't1','row1'

COLUMN CELL

cf:a timestamp=1497426156495, value=value1

1 row(s) in 0.0190 seconds

REST接口

HBase附帶的REST服務器,可以作為一個守護進程運行。 使用以下命令之一在前臺或後臺啟動REST服務器。 端口是可選的,默認為8080。

# Foreground

$ bin/hbase rest start -p <port>

# Background, logging to a file in $HBASE_LOGS_DIR

$ bin/hbase-daemon.sh start rest -p <port>

以下命令都可以使用curl或wget命令運行。可以輸入純文本。也可以在HEADER中添加“Accept:text / xml”標頭,接收xml;“application / json”表示json

一般情況下,使用GET請求進行查詢,PUT或POST請求進行創建或更新,刪除使用DELETE。

查看系統版本號

curl -vi -X GET -H "Accept: text/xml" "http://localhost:8081/version/cluster"

也可以直接在瀏覽器中輸入url

查看集群狀態

curl -vi -X GET -H "Accept: text/xml" "http://localhost:8081/status/cluster"

列出非系統數據表

curl -vi -X GET -H "Accept: text/xml" "http://localhost:8081/"

查看某張表的schema

curl -vi -X GET -H "Accept: text/xml" "http://localhost:8081/t1/schema"

相關推薦

推薦中...