Hadoop 之 HBase安裝與測試
阿新 • • 發佈:2019-01-07
開發環境和工具
- MAC OS
- Parallels Desktop 12
- SecureCRT
- SecureFX
hadoop環境
- Centos7
- jdk-8u101-linux-x64
- Hadoop2.8.1
- zookeeper-3.4.10
- 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了
通過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