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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


※Logback中使用TurboFilter實現日誌級別等內容的動態修改
※詳解node + mongoDb(mongoDb安裝、運行,在node中連接增刪改查)
TAG:程序員小新人學習 |