HBase環境搭建與編程實踐

HBase環境搭建與編程實踐

重要知識點:
1.HBase是一個分佈式的、面向列的開源數據庫,源於Google的一篇論文《BigTable:一個結構化數據的分佈式存儲系統》。HBase以表的形式存儲數據,表有行和列組成,列劃分爲若干個列族/列簇(column family)。HBase官方網站(http://hbase.apache.org/)。
2.HBase的運行有三種模式:單機模式、僞分佈式模式、分佈式模式。
單機模式:在一臺計算機上安裝和使用HBase,不涉及數據的分佈式存儲;
僞分佈式模式:在一臺計算機上模擬一個小的集羣;
分佈式模式:使用多臺計算機實現物理意義上的分佈式存儲。這裏出於學習目的,我們只重點討論單機模式和僞分佈式模式。本節課實驗採用僞分佈式模式。

開始此實驗之前,要把前面配置的hadoop環境啓動。
在這裏插入圖片描述

實驗內容與步驟:
一、HBase安裝與配置

  1. HBase下載
    網址:http://hbase.apache.org/downloads.html ,建議下載穩定版本。
    穩定版下載地址:http://archive.apache.org/dist/hbase/stable/
    在這裏插入圖片描述

現在穩定版本是 hbase-2.2.5 ,我們此次實驗是以hbase-1.2.6.1爲例子
在這裏插入圖片描述

下載完成後,會自動下載到Downloads目錄下:
在這裏插入圖片描述

  1. HBase安裝
    1)在/opt 目錄下面創建文件夾hbase
    在這裏插入圖片描述

2)解壓安裝包hbase-1.2.6.1-bin.tar.gz至路徑 /opt/hbase,命令如下:
在這裏插入圖片描述

3)查看是否解壓成功
在這裏插入圖片描述

4)配置環境變量
將hbase下的bin目錄添加到path中,這樣,啓動hbase就無需到/opt/hbase/hbase-1.2.6.1目錄下,大大的方便了hbase的使用。編輯/etc/profile文件
在這裏插入圖片描述

如果沒有引入過PATH請在/etc/profile文件尾行添加如下內容:

export PATH=$PATH:/opt/hbase/hbase-1.2.6.1/bin

如果已經引入過PATH請在export PATH這行追加/opt/hbase/hbase-1.2.6.1/bin,也可以先設置HBASE_HOME,在配置PATH。這裏的「:」是分隔符。如下圖:
在這裏插入圖片描述

編輯完成後,再執行source命令使上述配置在當前終端立即生效,命令如下:
在這裏插入圖片描述

5)添加HBase權限
cd /opt/hbase
終端命令:sudo chown -R hadoop ./hbase-1.2.6.1
#將hbase下的所有文件的所有者改爲hadoop,hadoop是當前用戶的用戶名。
在這裏插入圖片描述

終端命令:sudo chmod -R 777 ./hbase-1.2.6.1
在這裏插入圖片描述

6)查看HBase版本,確定hbase安裝成功,命令如下:
在這裏插入圖片描述

  1. HBase配置
    HBase有三種運行模式,單機模式、僞分佈式模式、分佈式模式。作爲學習,我們重點討論單機模式和僞分佈式模式。
    以下先決條件很重要,比如沒有配置JAVA_HOME環境變量,就會報錯。
    – jdk
    – Hadoop( 單機模式不需要,僞分佈式模式和分佈式模式需要)
    – SSH
    本實驗重點講僞分佈式模式配置。單機模式請自行學習。

僞分佈式模式配置:

  1. 配置/opt/hbase/hbase-1.2.6.1/conf/hbase-env.sh。命令如下:

在這裏插入圖片描述

配置JAVA_HOME,HBASE_CLASSPATH,HBASE_MANAGES_ZK.
HBASE_CLASSPATH設置爲本機HBase安裝目錄下的conf目錄.配置HBASE_MANAGES_ZK爲true,表示由hbase自己管理zookeeper,不需要單獨的zookeeper。

export JAVA_HOME=/opt/java/jdk1.8.0_181
export HBASE_HOME=/opt/hbase/hbase-1.2.6.1
export HBASE_CLASSPATH=/opt/hbase/hbase-1.2.6.1/conf
export HBASE_MANAGES_ZK=true

在這裏插入圖片描述

  1. 配置/opt/hbase/hbase-1.2.6.1/conf/hbase-site.xml,打開並編輯hbase-site.xml,命令如下:

在這裏插入圖片描述

修改hbase.rootdir,指定HBase數據在HDFS上的存儲路徑;將屬性hbase.cluter.distributed設置爲true。假設當前Hadoop集羣運行在僞分佈式模式下,在本機上運行,且NameNode運行在9000端口。hbase.rootdir指定HBase的存儲目錄;hbase.cluster.distributed設置集羣處於分佈式模式.

hbase.rootdir hdfs://localhost:9000/hbase hbase.cluster.distributed true ![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20201028100256688.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzY0MDE2MQ==,size_16,color_FFFFFF,t_70#pic_center)
  1. 接下來測試運行HBase。
    第1步:首先登陸ssh,之前設置了無密碼登陸,因此這裏不需要密碼;再啓動hadoop,如果已經啓動hadoop請跳過此步驟。命令如下:
    終端命令:start-all.sh
    輸入命令jps,能看到NameNode,DataNode和SecondaryNameNode都已經成功啓動,表示hadoop啓動成功,截圖如下:

在這裏插入圖片描述

第2步:再啓動HBase.命令如下:
在這裏插入圖片描述

第3步:jps查看是否啓動成功:
在這裏插入圖片描述

第4步:進入shell界面,測試hbase shell是否可用,命令:hbase shell
在這裏插入圖片描述

如果報slf4j-log4j12-1.7.5衝突錯誤,請刪除/hbase-1.2.6.1/lib目錄下的slf4j-log4j12-1.7.5包。原因:該包和hadoop下面的包衝突了。刪掉一個即可。
在這裏插入圖片描述

重新啓動hbase shell

第5步:如果要停止HBase運行,命令如下:stop-hbase.sh
在這裏插入圖片描述

注意:如果在操作HBase的過程中發生錯誤,可以通過{HBASE_HOME}目錄(/opt/hbase)下的logs子目錄中的日誌文件查看錯誤原因。
這裏啓動關閉Hadoop和HBase的順序一定是:
啓動Hadoop—>啓動HBase—>關閉HBase—>關閉Hadoop

二、HBase shell命令編程實踐

  1. HBase中創建表
    HBase中用create命令創建表,具體如下:
    create ‘student’,‘name’,‘sex’,‘age’,‘dept’,‘course’

命令執行截圖如下:
在這裏插入圖片描述

此時,即創建了一個「student」表,屬性有:name,sex,age,dept,course。因爲HBase的表中會有一個系統默認的屬性作爲行鍵,無需自行創建,默認爲put命令操作中表名後第一個數據。創建完「student」表後,可通過describe命令查看「student」表的基本信息。命令執行截圖如下:
在這裏插入圖片描述

  1. HBase數據庫基本操作
    主要練習HBase的增、刪、改、查操作。在添加數據時,HBase會自動爲添加的數據添加一個時間戳,故在需要修改數據時,只需直接添加數據,HBase即會生成一個新的版本,從而完成「改」操作,舊的版本依舊保留,系統會定時回收垃圾數據,只留下最新的幾個版本,保存的版本數可以在創建表的時候指定。

(1)添加數據
HBase中用put命令添加數據,注意:一次只能爲一個表的一行數據的一個列,也就是一個單元格添加一個數據,所以直接用shell命令插入數據效率很低,在實際應用中,一般都是利用編程操作數據。
當運行命令:put ‘student’,’18001’,’name’,’zhangsan’時,即爲student表添加了學號爲18001,名字爲zhangsan的一行數據,其行鍵爲18001。shell命令爲:

put ‘student’,‘18001’,‘name’,‘zhangsan’
命令執行截圖如下,即爲student表添加了學號爲18001,名字爲zhangsan的一行數據,其行鍵爲18001。
在這裏插入圖片描述

Shell命令:
put ‘student’,‘18001’,‘course:math’,‘80’
即爲18001行下的course列族的math列添加了一個數據。截圖如下:
在這裏插入圖片描述

(2)查看數據
HBase中有兩個用於查看數據的命令:
 get命令,用於查看錶的某一行數據;
 scan命令用於查看某個表的全部數據

  1. get命令
    get ‘student’,‘18001’

命令執行截圖如下, 返回的是‘student’表‘18001’行的數據。
在這裏插入圖片描述

  1. scan命令
    scan ‘student’
    命令執行截圖如下, 返回的是‘student’表的全部數據。

在這裏插入圖片描述

(3)刪除數據
在HBase中用delete以及deleteall命令進行刪除數據操作,它們的區別是:1. delete用於刪除一個數據,是put的反向操作;2. delete all操作用於刪除一行數據。

  1. delete命令

    delete ‘student’,‘18001’,‘sex’
    命令執行截圖如下, 即刪除了student表中95001行下的sex列的所有數據。

在這裏插入圖片描述

  1. deleteall命令
    deleteall ‘student’,‘18001’
    命令執行截圖如下,即刪除了student表中的18001行的全部數據。
    在這裏插入圖片描述

(4)刪除表
刪除表有兩步,第一步先讓該表不可用,第二步刪除表。刪除表之前,可以使用list命令查看所有表。命令:
list
disable ‘student’
drop ‘student’
命令執行截圖如下:
在這裏插入圖片描述

(5)查詢表歷史數據
查詢錶的歷史版本,需要兩步。
1、在創建表的時候,指定保存的版本數(假設指定爲5)

create ‘teacher’,{NAME=>‘username’,VERSIONS=>5}
在這裏插入圖片描述

2、插入數據然後更新數據,使其產生歷史版本數據,注意:這裏插入數據和更新數據都是用put命令
put ‘teacher’,‘81001’,‘username’,‘zhangsan’
put ‘teacher’,‘81001’,‘username’,‘lisi’
put ‘teacher’,‘81001’,‘username’,‘wangwu’
put ‘teacher’,‘81001’,‘username’,‘zhaoliu’
put ‘teacher’,‘81001’,‘username’,‘xiaoming’
put ‘teacher’,‘81001’,‘username’,‘xiaoli’

在這裏插入圖片描述

3、查詢時,指定查詢的歷史版本數。默認會查詢出最新的數據。(有效取值爲1到5)
get ‘teacher’,‘81001’,{COLUMN=>‘username’,VERSIONS=>5}
查詢結果截圖如下:

在這裏插入圖片描述

(6)退出HBase數據庫操作
最後退出數據庫操作,輸入exit命令即可退出,注意:這裏退出HBase數據庫是退出對數據庫表的操作,而不是停止啓動HBase數據庫後臺運行。
Shell 命令:exit
在這裏插入圖片描述

到了這一步,本次實驗就完成了,你今天學會了嗎?