當前位置:
首頁 > 知識 > HBase初識、CentOS6.6中HBase安裝與HBase Shell簡單使用

HBase初識、CentOS6.6中HBase安裝與HBase Shell簡單使用

目錄

1. HBase簡介

2. hbase安裝

3. hbase的啟動與關閉

4. 術語

5. HBase Shell命令簡單使用

1. HBase簡介

HBase是一個基於HDFS的面向列的分散式資料庫。HDFS基於流式數據訪問,低時間延遲的數據訪問並不適合在HDFS上運行。所以,如果需要實時地隨機訪問超大規模數據集,使用HBase是更好的選擇。HBase時NoSQL(非關係型資料庫)資料庫,不支持關係型資料庫地SQL,並且是以鍵值對地方式按列存儲,是非關係型資料庫(Not Only SQL)中的一個重要代表。NoSQL目前並沒有明確地範圍和定義,其主要特點是通常被用於大規模數據地存儲、沒有預定義地模式(如表結構)、表和表之間沒有複雜的關係。總體上可將NoSQL資料庫分為以下4類:

基於列存儲地類型

基於文檔存儲的類型

基於鍵值對存儲的類型

基於圖形數據存儲的類型

HBase 是一個可以建立在HDFS上的分散式NoSQL資料庫(非關係型資料庫只有對數據表進行增、刪、查操作;沒有改地操作,要做改的操作,需要先刪除,再插入來代替)。

2. hbase安裝

hbase有三種安裝方式:單機、偽分散式、完全分散式。

【單機hbase】:hbase資料庫的數據文件存在單一的一台設備上,使用的是該設備的文件系統。

【偽分散式hbase】:hbase資料庫的數據文件存在一台設備構成的hdfs上,資料庫也分主從結構。

【完全分散式hbase】:hbase資料庫的數據文件存在多台設備構成的hdfs上,資料庫也分主從結構。

我們這裡為了後期學習,直接採用【完全分散式hbase】方式安裝:

1)獲取hbase安裝包並解壓到node1的/home/hdser/下 並重命名為hbase

[hduser@node1 ~]$ tar -zxvf /home/hduser/桌面/hbase-1.2.0-bin.tar.gz -C /home/hduser/

[hduser@node1 ~]$ mv /home/hduser/hbase-1.2.0/ /home/hduser/hbase

2)配置hbase核心配置文件(hbase-site.xml)

/home/hduser/hbase/conf/下

用安裝的gedit記事本進入:

[hduser@node1 conf]$ gedit hbase-site.xml

增加以下核心內容:

<!-- 設置hbase 在hdfs 數據的存儲位置 即配置HRegionServer的資料庫存儲目錄-->

<property>

<name>hbase.rootdir</name>

<value>hdfs://node1:9000/hbase</value>

</property>

<!-- 設置hbase是完全分散式類型,默認為false,即單機運行,true表示在分布模式運行 -->

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<!-- 指定hbase的HMaster訪問地址、埠 -->

<property>

<name>hbase.master</name>

<value>node1:60000</value>

</property>

<!-- hbase的家庭成員(主從機的網路用戶名) -->

<property>

<name>hbase.zookeeper.quorum</name>

<value>node1,node2,node3</value>

</property>

3)配置hbase環境配置文件(hbase-env.sh)

/home/hduser/hbase/conf/下

用安裝的gedit記事本進入:

[hduser@node1 conf]$ gedit hbase-env.sh

在文末增加以下環境變數配置:

修改JAVA_HOME配置:

export JAVA_HOME=/usr/java/jdk1.8.0_171

增加HADOOP_HOME配置:

export HADOOP_HOME=/home/hduser/hadoop

增加HBASE_HOME配置:

export HBASE_HOME=/home/hduser/hbase

增加啟用hbase 內置zookeeper配置:

export HBASE_MANAGERS_ZK=true

4)配置從機網路用戶名(regionservers)

/home/hduser/hbase/conf/下

用安裝的gedit記事本進入:

[hduser@node1 conf]$ gedit regionservers

將內容更改成從機用戶名信息:

node2

node3

5)拷貝node1的hbase的主目錄到node2,node3下,使得各個節點上都能運行HBase來構建HBase集群,執行以下兩個命令

[hduser@node1 ~]$ scp -r hbase hduser@node2:/home/hduser/

[hduser@node1 ~]$ scp -r hbase hduser@node3:/home/hduser/

6)配置hbase的環境變數

用記事本命令打開配置環境

[hduser@node1 ~]$ sudo gedit /etc/profile

增加以下配置內容:

export HBASE_HOME=/home/hduser/hbase

export PATH=$PATH:$HBASE_HOME/bin

保存並退出,使文件生效:

[hduser@node1 ~]$ source /etc/profile

3. hbase的啟動與關閉

1)啟動(啟動前必須保證hdfs已經啟動)

語法:【$>hbase主目錄下/bin/start-base.sh】

[hduser@node1 ~]$ ./hbase/bin/start-hbase.sh

node1: starting zookeeper, logging to /home/hduser/hbase/logs/hbase-hduser-zookeeper-node1.out

node2: starting zookeeper, logging to /home/hduser/hbase/logs/hbase-hduser-zookeeper-node2.out

node3: starting zookeeper, logging to /home/hduser/hbase/logs/hbase-hduser-zookeeper-node3.out

starting master, logging to /home/hduser/hbase/logs/hbase-hduser-master-node1.out

node3: starting regionserver, logging to /home/hduser/hbase/logs/hbase-hduser-regionserver-node3.out

node2: starting regionserver, logging to /home/hduser/hbase/logs/hbase-hduser-regionserver-node2.out

node3: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0

node3: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

node2: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0

node2: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

Hbase首先啟動的是ZooKeeper,再啟動的是HMaster和HRegionServer,啟動成功後注意node1上增加了兩個java進程—"HQuorumPeer"和"HMaster",分別是ZooKeepper進程和HBase進程:

[hduser@node1 bin]$ jps

12226 HMaster

11186 NameNode

13651 Jps

11526 ResourceManager

11384 SecondaryNameNode

5353 HQuorumPeer

12748 Main

再看從機的Java進程,這裡多了兩個進程「HQuorumPeer」和「HRegionServer」,同樣分別是ZooKeepper進程和HBase進程:

[hduser@node2 bin]$ jps

5444 DataNode

5557 NodeManager

4437 HQuorumPeer

4542 HRegionServer

6303 Jps

2)關閉

語法:【 $>hbase主目錄下/bin/stop-base.sh】

[hduser@node1 hbase]$ /home/hduser/hbase/bin/stop-hbase.sh

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

node3: stopping zookeeper.

node2: stopping zookeeper.

node1: stopping zookeeper.

3)瀏覽器測試:

訪問: http://node1.16010

4)命令測試(登陸進入資料庫)

語法:【$>hbase主目錄下/bin/hbase shell】

[hduser@node1 ~]$ ./hbase/bin/hbase shell

進入HBase Shell後,使用HBase Shell命令「status」可在HBase Shell中查看HBase的運行狀態,如下,表示當前共有兩個HRegionServer正在正常運行:

hbase(main):001:0> status

2 servers, 0 dead, 1.5000 average load

4. 術語

1)hregion

hregion指的是hbase的數據存儲是以區塊(region)存儲的。

2)hregionserver

hregionserver指的是hbase資料庫從機,存具體數據。

3)hmaster

hmaster指的是hbase主機,存儲元數據(結構數據)。

4)行(row)與行鍵(rowkey)

hbase中一條完整的數據即一行,由一個唯一的行鍵+多個列鍵值構成。

行鍵:每一行都有一條內置的主鍵,用於區別其他行數據。

5)列簇(columnfamily)

hbase中列簇指的是一個大列,這個大的列可以有0個(列簇即列)或多個列(column)構成。

如成績表score中course列簇由數學(math)、美術(art)等。

新建表只需要指定列簇,而不需要指定列。

create table score ,"course:".

6)列鍵(column key)

hbase中每一行數據都是由很多列鍵構成的,其中一個列一般都有一個或多個列鍵。

每一個列鍵值都由行鍵、單元格值、時間戳、版本構成。

如:成績表中數學成績結構如下->

行鍵 列 單元格值 時間戳 版本

1001 course:math 55 2019-1*** 1(及時間戳,以1,2,3.....增加)

7)單元格(cell 或者列鍵值)

在hbase中,值是作為一個單元保存在系統中的,要定位一個單元,需要使用」行鍵+列鍵+時間戳「等三要素

8)時間戳(Timestamp)

插入單元格時的時間,默認作為單元格的版本號。

9)來兩個自定義的概要圖理解

5. HBase Shell命令簡單使用

命令都在hbase主目錄下/bin/下,可以配置bin到環境變數PATH下(即上面做的環境變數配置)

注意:所有的表名和列名都要用單引號括起來並以逗號分隔開。

1)查看所有表:list

語法:【$hbase>list】

示例:

hbase(main):006:0> list

TABLE

music

scores

2 row(s) in 0.0310 seconds

=> ["music", "scores"]

2) 查看當前表所有列簇的詳細描述信息:describe

語法:【$hbase>describe "表名"】

示例:

hbase(main):007:0> describe "scores"

Table scores is ENABLED

scores

COLUMN FAMILIES DESCRIPTION

{NAME => "course", BLOOMFILTER => "ROW", VERSIONS => "1", IN_MEMORY => "false",

KEEP_DELETED_CELLS => "FALSE", DATA_BLOCK_ENCODING => "NONE", TTL => "FOREVER",

COMPRESSION => "NONE", MIN_VERSIONS => "0", BLOCKCACHE => "true", BLOCKSIZE => "

65536", REPLICATION_SCOPE => "0"}

{NAME => "grade", BLOOMFILTER => "ROW", VERSIONS => "1", IN_MEMORY => "false", K

EEP_DELETED_CELLS => "FALSE", DATA_BLOCK_ENCODING => "NONE", TTL => "FOREVER", C

OMPRESSION => "NONE", MIN_VERSIONS => "0", BLOCKCACHE => "true", BLOCKSIZE => "6

5536", REPLICATION_SCOPE => "0"}

2 row(s) in 0.3110 seconds

3)新建表、列、列簇:create

簡化方式語法:【$hbase>create "表名』,『列簇1",......"列簇n"】

示例:

hbase(main):005:0> create "scores","grade","course"

0 row(s) in 1.6600 seconds

=> Hbase::Table - scores

完整的語法寫法:【$hbase>create "表名",{NAME=>"列簇名",VERSIONS=>可保存在單元時間版本的最大數量},....】

樣例:

$hbase>create "scores",{NAME=>"grade",VERSIONS=>5},{NAME=>"course",VERSIONS=5}

對比上一個方式,此命令制定了列簇名及可保存的單元時間版本最大數量。可以看出,指定列簇參數的格式為:參數名=>參數值,注意賦值符號為「=>」且參數名必須大寫。如果制定了多個參數,應以逗號分開,最後所有參數以「{}」括起來表示一個列簇。

4)插入數據:put

語法:【$hbase>put "表名","行鍵名","列鍵名稱","單元格值"】

樣例:插入播放記錄

$hbase>put "music","1001","song","music1"

$hbase>put "music","1001","singer","singer1"

$hbase>put "music","1001","playdata","2019-11-1"

示例:

hbase(main):008:0> put "scores","tom","grade:","1"

0 row(s) in 0.2000 seconds

hbase(main):009:0> put "scores","tom","course:art","80"

0 row(s) in 0.0400 seconds

hbase(main):010:0> put "scores","tom","course:math","89"

0 row(s) in 0.0090 seconds

hbase(main):011:0> put "scores","jason","grade:","2"

0 row(s) in 0.0330 seconds

hbase(main):012:0> put "scores","jason","course:art","87"

0 row(s) in 0.0120 seconds

hbase(main):013:0> put "scores","jason","course:math","57"

0 row(s) in 0.0040 seconds

5)掃描一張表:scan

語法:【 $hbase>scan "表名",{COLUMNS=>["列簇名1』,『列簇名2"......],參數名=>參數值....}】 大括弧內的內容為掃描條件,如果不指定則查詢所有數據。

示例1:

hbase(main):014:0> scan "scores"

ROW COLUMN+CELL

jason column=course:art, timestamp=1547563878493, value=87

jason column=course:math, timestamp=1547563894482, value=57

jason column=grade:, timestamp=1547563847271, value=2

tom column=course:art, timestamp=1547563796441, value=80

tom column=course:math, timestamp=1547563812083, value=89

tom column=grade:, timestamp=1547563754447, value=1

2 row(s) in 0.0550 seconds

示例2:以上輸出結果顯示2行數據,因為在scan的結果中,將相同的行鍵的所有單元視為一行。如果對有些列簇不關心,便可以指定只查詢某一個列簇:

hbase(main):015:0> scan "scores",{COLUMNS=>"course"}

ROW COLUMN+CELL

jason column=course:art, timestamp=1547563878493, value=87

jason column=course:math, timestamp=1547563894482, value=57

tom column=course:art, timestamp=1547563796441, value=80

tom column=course:math, timestamp=1547563812083, value=89

2 row(s) in 0.0260 seconds

語法:【 $hbase>scan "表名" ,{COLUNMN=>["列鍵1』,『列鍵2"......],參數名=>參數值....}】將COLUMNS替換成COLUMN,表示當前掃描的目標時列鍵,如下示例中掃描所有行的列鍵為「course:math」的單元,並使用LIMIT參數限制只輸出一個單元:

示例3:

hbase(main):016:0> scan "scores",{COLUMN=>"course:math",LIMIT=>1}

ROW COLUMN+CELL

jason column=course:math, timestamp=1547563894482, value=57

1 row(s) in 0.2050 seconds

6)查詢一行數據(不篩選):get

語法:【 $hbase>get "表名" ,"行主鍵名"】

樣例:只查看 1001的數據

$hbase>get "music","1001"

示例:查找行鍵為「jason」的所有單元

hbase(main):018:0> get "scores","jason"

COLUMN CELL

course:art timestamp=1547563878493, value=87

course:math timestamp=1547563894482, value=57

grade: timestamp=1547563847271, value=2

3 row(s) in 0.1180 seconds

7)查詢一行中某些單元格的數據(篩選):get

語法:【 $hbase>get "表名" ,"行主鍵名",{COLUNMNS=>["列簇名1』,『列簇名2"......],參數名=>參數值....}】

語法:【 $hbase>get "表名" ,"行主鍵名",{COLUNMN=>["列鍵1』,『列鍵2"......],參數名=>參數值....}】

示例:精確查找行鍵為「jason」,列鍵為"course:math"的單元

hbase(main):020:0> get "scores","jason",{COLUMN=>"course:math"}

COLUMN CELL

course:math timestamp=1547563894482, value=57

1 row(s) in 0.0080 seconds

與scan相比多一個行鍵參數。因為scan查找的目標是全表的某個列簇、列鍵,而get查找的目標是某行的某個列簇、列鍵。

提示:

get "scores","jason",{COLUMNS=>"course"} 等價於 get "scores","jason","course"

get "scores","jason",{COLUMN=>"course:math"} 等價於 get "scores","jason","course:math"

get "scores","jason",{COLUMNS=>["course","grade"]} 等價於 get "scores","jason","course","grade"

get "scores","jason",{COLUMN=>["course:math","grade:"]} 等價於 get "scores","jason","course:math","grade:"

7)刪除數據(刪除一行中的一個單元):delete

語法:【$hbase>delete "表名","行主鍵名" {CLOUMNS=>"列鍵值"}】注意:"列鍵值"--->"列簇名:查找的單元名稱"

示例:

hbase(main):021:0> delete "scores","jason","course:art"

0 row(s) in 0.0690 seconds

hbase(main):022:0> get "scores","jason"

COLUMN CELL

course:math timestamp=1547563894482, value=57

grade: timestamp=1547563847271, value=2

2 row(s) in 0.0150 seconds

8)刪除一行:deleteall

語法:【$hbase>deleteall "表名","行主鍵名"】

9)修改表:alter

語法:【$hbase>alter"表名稱",參數名=>參數值,........】為表增加或修改列簇;其中列簇名參數NAME必須提供,如果已存在則修改,否則會增加一個列簇。

示例:將scores表的列簇「course」的「VERSIONS」參數修改為「5」

hbase(main):023:0> alter "scores",NAME=>"course",VERSIONS=>"5"

Updating all regions with the new schema...

1/1 regions updated.

Done.

0 row(s) in 2.4070 seconds

語法:【$hbase>alter"表名稱",{參數名=>參數值,....},{參數名=>參數值,....}.......】 同時修改或增加多個列簇時應用逗號分開,並且每個列簇用「{}」括起來。

示例:將同時修改scores表的兩個列簇

hbase(main):024:0> alter "scores",{NAME=>"grade",VERSIONS=>"5"},{NAME=>"course",VERSIONS=>"5"}

Updating all regions with the new schema...

1/1 regions updated.

Done.

Updating all regions with the new schema...

1/1 regions updated.

Done.

0 row(s) in 3.8990 seconds

10)刪除表:drop

語法:【$hbase>drop "表名"】

HBase表分為兩種狀態:ENABLED和DISABLED,分別表示是否可用。

使用disable將表設置為不可用狀態:

語法:【$hbase>disable"表名"】

使用enable將表設置為可用狀態:

語法:【$hbase>enable "表名"】

當表為ENABLED狀態時,會被禁止刪除,所以必須先將表設置為DISABLED狀態才可以被刪除。

示例:

hbase(main):032:0> disable "scores"

0 row(s) in 2.2610 seconds

hbase(main):033:0> drop "scores"

0 row(s) in 1.2970 seconds

hbase(main):034:0> list

TABLE

music

1 row(s) in 0.0040 seconds

=> ["music"]

hbase(main):035:0>

提示:以上示例的順序不完全是按正常順序操作下來的,所以,應該按照正常的創建,增加,獲取,修改,刪除流程來操作。

---------------------

作者:高風言

原文:https://blog.csdn.net/gaofengyan/article/details/86499043

版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

HBase初識、CentOS6.6中HBase安裝與HBase Shell簡單使用

打開今日頭條,查看更多圖片
喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Logback中使用TurboFilter實現日誌級別等內容的動態修改
詳解node + mongoDb(mongoDb安裝、運行,在node中連接增刪改查)

TAG:程序員小新人學習 |