1. 程式人生 > >Hadoop 之 HBase安裝與測試

Hadoop 之 HBase安裝與測試

開發環境和工具

  1. MAC OS
  2. Parallels Desktop 12
  3. SecureCRT
  4. SecureFX

hadoop環境

  1. Centos7
  2. jdk-8u101-linux-x64
  3. Hadoop2.8.1
  4. zookeeper-3.4.10
  5. hbase-1.3.1-bin.tar.gz
hostname NameNode DataNode JournalNode Zookeeper (新增)HMaster (新增)HRegionServer
wpixel01 ✔️ ✔️ ✔️ ✔️ ✔️
wpixel02 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
wpixel03 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
wpixel04 ✔️ ✔️ ✔️

1 .安裝配置Apache HBase

解壓hbase-1.3.1-bin.tar.gz

[root@wpixel01 www]# tar -zxvf hbase-1.3.1-bin.tar.gz 

環境變數配置

[[email protected] www]# vi /etc/profile
export HBASE_HOME=/home/www/hbase-1.3
.1 export PATH=$PATH:$HBASE_HOME/bin

配置檔案介紹

#配置檔案在conf目錄下
[[email protected] www]# cd hbase-1.3.1/conf/
[[email protected] conf]# ll
total 144
#只配置這三個檔案
-rw-r--r--. 1 root root   7468 Feb  5 13:45 hbase-env.sh 環境配置
-rw-r--r--. 1 root root   1725 Feb  5 14:00 hbase-site.xml 核心配置
-rw-r--r--. 1 root root     31 Feb  5 13:55 regionservers 這個就像配置datanode一樣

配置hbase-env.sh

[root@wpixel01 conf]# vi hbase-env.sh 
#修改jdk目錄引數
export JAVA_HOME=/home/www/jdk1.8.0_101
#hbase自帶zookeeper,我已經配置好zookeeper了,就不用hbase自帶的zk,設定為false
export HBASE_MANAGES_ZK=false

配置hbase-site.xml

[[email protected] conf]# vi hbase-site.xml 
 <!-- 這個目錄不需要手動建立,專案啟動後會自行建立,否則會做遷移操作,引發錯誤 -->
 <property>
  <value>hbase.rootdir</value>
  <name>hdfs://wpixel01:9000/hbase</name>
 </property>
 <!-- 設定zk客戶端埠 -->
 <property>
  <name>hbase.zookeeper.property.clientPort</name>
  <value>2181</value>
 </property>
 <!-- zk環境的地址 -->
 <property>
  <name>hbase.zookeeper.quorum</name>
  <value>wpixel01,wpixel02,wpixel03</value>
 </property>
 <!-- 配置zk的資料目錄,與hadoop ha公用,要與zoo.cfg中配置一致 -->
 <property>
  <name>hbase.zookeeper.proprety.dataDir</name>
  <value>/home/www/zookeeper-3.4.10/tmp</value>
 </property>
 <!-- 分散式叢集配置為true,單節點為false-->
 <property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
 </property>
 <property>
  <name>hbase.master.maxclockskew</name>
  <value>180000</value>
 </property>
 <!-- 配置hadoop時配置的副本率為2,這裡一致,否則預設是3,也可以將hadoop的hdfs-site.xml檔案拷貝到hbase的conf目錄下,效果相同 -->
 <property>
  <name>dfs.replication</name>
  <value>2</value>
 </property>
將HBase傳送到wpixel02、wpixel03和wpixel04, 並配置環境變數
[root@wpixel01 www]# scp -r hbase-1.3.1/ root@wpixel02:/home/www/
[root@wpixel01 www]# scp -r hbase-1.3.1/ root@wpixel03:/home/www/
[root@wpixel01 www]# scp -r hbase-1.3.1/ root@wpixel04:/home/www/

2 .啟動HBase

  • 啟動zookeeper (略)
  • 啟動hadoop(略)
  • 啟動zkfc(略)
  • 啟動HMaster
#在wpixel01上啟動HMaster
[root@wpixel01 www]# hbase-daemon.sh start master
#一臺HMaster是不安全的,實現HA
#在wpixel02和wpixel03上啟動HMaster
[root@wpixel02 www]# hbase-daemon.sh start master
[root@wpixel03 www]# hbase-daemon.sh start master
  • 啟動HRegionServer
#在wpixel02、wpixel03和wpixel04上啟動HRegionServer
[root@wpixel02 ~]# hbase-daemon.sh start regionserver
[root@wpixel03 ~]# hbase-daemon.sh start regionserver
[root@wpixel04 ~]# hbase-daemon.sh start regionserver

3 .通過web和jps檢視

web端通過埠16010檢視,不是60000、60010了
HBaseWeb
通過jps檢視
這裡寫圖片描述

通過以上的步驟,hbase就搭建完成了

4 .測試使用HBase

既然搭建起來了,肯定是要用的
[[email protected] hbase-1.3.1]# hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/www/hbase-1.3.1/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/www/hadoop-2.8.1/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.3.1, r930b9a55528fe45d8edce7af42fef2d35e77677a, Thu Apr  6 19:36:54 PDT 2017

hbase(main):001:0> 
噢耶,順利進入hbase互動命令列介面
檢視節點狀態
hbase(main):001:0> status
1 active master, 2 backup masters, 3 servers, 0 dead, 0.6667 average load
#1個active狀態的master節點
#2個standby狀態的master節點
#3臺regionServer
建立表:create ‘表名’,’列族名字’
#1. 建立users表,列族info,grade
hbase(main):001:0> create 'users','info','grade'
0 row(s) in 2.8720 seconds
=> Hbase::Table - users

#2. 這裡檢視users表結構,詳細解析
#describe 'users'或者desc 'users'
hbase(main):008:0> describe 'users' 
#狀態是ENABLED,不能刪除表
Table users is ENABLED                                                                                            
users                          
#這裡是列族                                                                      
COLUMN FAMILIES DESCRIPTION   
#grade列:NAME(列族名稱),VERSIONS(每個單元格上可以儲存的資料個數), IN_MEMORY(是否將資料快取到記憶體),COMPRESSION(壓縮)                                                                                    
{NAME => 'grade', 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'}        
#info列族              
{NAME => 'info', 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'}                             
2 row(s) in 0.0520 seconds
插入資料:put ‘表名’,’rowkey’,’列族:名’,’值’
#put '表名','主鍵','列族:名','值'
hbase(main):020:0> put 'users','w01','info:name','wpixel'
0 row(s) in 0.3110 seconds
hbase(main):022:0> put 'users','w01','info:age','18'
0 row(s) in 0.0210 seconds

有人發現兩條插入的主鍵同為w01,
如果是關係型資料庫(mysql,oracle)會將key相同的當做修改操作,最終為1條資料
hbase作為NoSql資料庫,這裡插入兩次就是兩條資料
效果如下(將就著看吧)

rowkey(行鍵) info(name) info(age) grade
w01 wpixel
w01 18
查詢:scan ‘表名’ 和 get ‘表名’,’rowkey’
#scan操作,相當於  select * from users;
hbase(main):024:0> scan 'users'
ROW                        COLUMN+CELL                                                              
 w01                       column=info:age, timestamp=1517903123893, value=18                       
 w01                       column=info:name, timestamp=1517902873487, value=wpixel                  
1 row(s) in 0.1360 seconds

#get操作,相當於: select * from users where rowkey = ??
hbase(main):026:0> get 'users','w01'
COLUMN                     CELL                                                                     
 info:age                  timestamp=1517903123893, value=18                                        
 info:name                 timestamp=1517902873487, value=wpixel                                    
1 row(s) in 0.2280 seconds
清空表中的資料 truncate ‘表名’

truncate ‘users’ —> 本質:先刪除表,再重建

#清空表資料
hbase(main):027:0> truncate 'users'
Truncating 'users' table (it may take a while):
 - Disabling table...
 - Truncating table...
0 row(s) in 4.2540 seconds

#現在查看錶資料
hbase(main):028:0> scan 'users'
ROW                        COLUMN+CELL                                                              
0 row(s) in 0.2070 seconds
╮(╯_╰)╭ 沒了
刪除表 drop ‘users’
hbase(main):029:0> drop 'users'

ERROR: Table users is enabled. Disable it first.

Here is some help for this command:
Drop the named table. Table must first be disabled:
  hbase> drop 't1'
  hbase> drop 'ns1:t1'

why!!! 怎麼刪不掉啊,百度一下
………………………………
哦,嗖嘎
在建立表的時候我有說過,狀態是ENABLED,是不能刪除表的
既然找到原因了,那就將表的狀態改一改

#修改users表的狀態,讓表失效
hbase(main):030:0> disable 'users'
#檢視users表的狀態
hbase(main):031:0> desc 'users'
Table users is DISABLED   
...

#現在表的狀態是disabled,可以刪除表了,再試一遍
hbase(main):032:0> drop 'users'
0 row(s) in 1.2700 seconds

#OK,已刪除 ,list命令查看錶集合
hbase(main):033:0> list
TABLE                                                                                               
0 row(s) in 0.0330 seconds

=> []
退出HBase命令列
hbase(main):034:0> quit

5 .總結

nosql非常關注對資料高併發地讀寫和對海量資料的儲存等,與關係型資料庫相比,在架構和資料模型方量面做了“減法”,而在擴充套件和併發等方面做了“加法”。

所以nosql資料庫是通過增加冗餘度來提高效率

^_^

THE END