【HBase】Hbase-2.2.3 真分布式搭建

HBase是一個(gè)開(kāi)源的非關(guān)系型分布式數(shù)據(jù)庫(kù)寝贡,它參考了谷歌的BigTable建模扒披,實(shí)現(xiàn)的編程語(yǔ)言為Java。它是Apache軟件基金會(huì)的Hadoop項(xiàng)目的一部分圃泡,運(yùn)行于HDFS文件系統(tǒng)之上碟案,為Hadoop提供類似于BigTable規(guī)模的服務(wù)颇蜡。因此价说,它可以容錯(cuò)地存儲(chǔ)海量稀疏的數(shù)據(jù)。
HBase是一個(gè)高可靠风秤、高性能鳖目、面向列、可伸縮的分布式數(shù)據(jù)庫(kù)缤弦,是谷歌BigTable的開(kāi)源實(shí)現(xiàn)领迈,主要用來(lái)存儲(chǔ)非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。HBase的目標(biāo)是處理非常龐大的表碍沐,可以通過(guò)水平擴(kuò)展的方式狸捅,利用廉價(jià)計(jì)算機(jī)集群處理由超過(guò)10億行數(shù)據(jù)和數(shù)百萬(wàn)列元素組成的數(shù)據(jù)表。
更多簡(jiǎn)介或原理性內(nèi)容可參考鏈接:
http://www.reibang.com/p/b23800d9b227
http://www.reibang.com/p/53864dc3f7b4
http://www.reibang.com/p/0a0a151c84d4
http://www.reibang.com/p/479bc6308381

目錄

  • 一累提、安裝環(huán)境
  • 二尘喝、環(huán)境準(zhǔn)備
  • 三、hbase分布式搭建步驟
  • 四斋陪、hbase基本使用
  • 五朽褪、期間遇到的坑
  • 六、參考并致謝

一无虚、安裝環(huán)境

操作系統(tǒng): CentOS 7
Hadoop版本: Hadoop-3.2.1
zookeeper版本: zookeeper-3.4.14
Hbase版本: hbase-2.2.3

相關(guān)主機(jī):
主機(jī):192.168.111.249 master
從機(jī)1:192.168.111.247 node1
從機(jī)2:192.168.111.248 node2

二缔赠、環(huán)境準(zhǔn)備

hbase和hadoop和jdk版本之間的關(guān)系可參考官網(wǎng):http://hbase.apache.org/book.html#java

1、JDK骑科、Hadoop安裝橡淑、主機(jī)名修改可參考之前寫(xiě)過(guò)的文章:

可參考:http://www.reibang.com/p/27cbd5bbdf61

2、zookeeper安裝可參考之前寫(xiě)過(guò)的文章:

可參考:http://www.reibang.com/p/e811a3fd5235

由于本章節(jié)主要內(nèi)容是Hbase的部署安裝咆爽,Hbase是基于Hadoop梁棠、java和zookeeper置森,而Hadoop和zookeeper的部署會(huì)占一定的篇幅,之前也有過(guò)相關(guān)文章符糊,加上本次Hbase的部署是在之前寫(xiě)Hadoop和zookeeper的文章的時(shí)候所用的機(jī)器凫海,因此此處就不多加篇幅去重復(fù)相關(guān)的步驟了,望諒解男娄。

三行贪、hbase分布式搭建步驟

1、下載Hbase

各版本下載地址:http://mirror.bit.edu.cn/apache/hbase/
此處使用的是hbase-2.2.3的版本

[root@master ~]# cd /home/
[root@master home]# wget http://mirror.bit.edu.cn/apache/hbase/2.2.3/hbase-2.2.3-bin.tar.gz
2模闲、解壓
[root@master home]# tar zxvf hbase-2.2.3-bin.tar.gz
3建瘫、配置環(huán)境變量
[root@master home]# vim /etc profile 
# 文件中追加以下內(nèi)容  
export HBASE_HOME=/home/hbase-2.2.3
export PATH=$HBASE_HOME/bin:$PATH

保存退出,然后source /etc/profile刷新以下環(huán)境變量

4尸折、修改配置文件

需要修改的配置文件以及文件所在的目錄如下

hbase-env.sh

配置java環(huán)境變量
注意:第二個(gè)參數(shù)文檔注釋寫(xiě)的是JAVA_CLASSPATH啰脚,但參數(shù)名稱卻是HBASE_CLASSPATH,據(jù)說(shuō)按照參數(shù)名HBASE_CLASSPATH寫(xiě)的話后面啟動(dòng)會(huì)有錯(cuò)誤報(bào)出实夹,因此按照注釋寫(xiě)的改為JAVA_CLASSPATH


日志存放路徑

關(guān)閉自帶的zookeeper橄浓,hbase自帶zookeeper單機(jī)版,我們此處搭建的是分布式亮航,因此將此關(guān)閉荸实,如需要搭建單機(jī)版的話可以保持默認(rèn)的true

hbase-site.xml

配置文件中configuration標(biāo)簽中間下入以下內(nèi)容

<!-- 配置hbase的主節(jié)點(diǎn) -->
<property>
    <name>hbase.master</name>
    <value>master:60000</value>
</property>
<!-- 是否為集群模式:true -->
<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
</property>
<!-- hbase依賴的hdfs存儲(chǔ)的路徑 -->
<property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:9000/hbase</value>
</property>
<!-- 用的獨(dú)立的zookeeper是那幾臺(tái)服務(wù)器(填寫(xiě)所有集群的所有機(jī)器) -->
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>master,node1,node2</value>
</property>
<!-- 配置主從節(jié)點(diǎn)的心跳超時(shí)時(shí)間 -->
<property>
    <name>hbase.master.maxclockskew</name>
    <value>120000</value>
</property>

<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
regionservers文件

刪除localhost,將從節(jié)點(diǎn)主機(jī)名寫(xiě)入

5缴淋、遠(yuǎn)程復(fù)制hbase到各個(gè)節(jié)點(diǎn)中

將master的hbase遠(yuǎn)程拷貝到從節(jié)點(diǎn)上准给,從節(jié)點(diǎn)的環(huán)境變量也作相應(yīng)的修改,與master計(jì)器的修改方法相同
scp -r /home/hbase-2.2.3 node1:/home/
scp -r /home/hbase-2.2.3 node2:/home/

6宴猾、啟動(dòng)
# 【master節(jié)點(diǎn)】啟動(dòng)Hadoop 
[root@master home]# start-all.sh  
# 【各個(gè)節(jié)點(diǎn)】啟動(dòng)zookeeper  
[root@master home]# zkServer.sh start
# 【master端】啟動(dòng)Hbase 
[root@master home]# start-hbase.sh  
# 【各個(gè)節(jié)點(diǎn)】使用jps命令查看進(jìn)程  
[root@master home]# jps

master端

node1端


node2端

瀏覽器打開(kāi)以下地址可訪問(wèn)到頁(yè)面:
http://192.168.111.249:16010/master-status

至此Hbase已搭建完畢

四圆存、hbase基本使用

基本命令總結(jié):

shell命令 命令作用 命令語(yǔ)法
create 創(chuàng)建表 < create ‘表名’, ‘列族名’, ‘列族名2’,‘列族名N’ >
list 查看所有表 < list all >
describe 顯示表詳細(xì)信息 < describe ‘表名’ >
exists 判斷表是否存在 < exists ‘表名’ >
enable 使表有效 < enable ‘表名’ >
disable 使表無(wú)效 < disable ‘表名’ >
is_enabled 判斷是否啟動(dòng)表 < is_enabled ‘表名’ >
is_disabled 判斷是否禁用表 < is_disabled ‘表名’ >
count 統(tǒng)計(jì)表中行的數(shù)量 < count ‘表名’ >
put 添加記錄 < put ‘表名’, ‘row key’, ‘列族1 : 列’, ‘值’ >
get 獲取記錄(row key下所有) < get ‘表名’, ‘row key’>
get 獲取記錄(某個(gè)列族) < get ‘表名’, ‘row key’, ‘列族’>
get 獲取記錄(某個(gè)列) < get ‘表名’,‘row key’,‘列族:列’ >
delete 刪除記錄 < delete ‘表名’, ‘row key’, ‘列族:列’ >
deleteall 刪除一行 < deleteall ‘表名’,‘row key’>
drop 刪除表 <disable ‘表名’> < drop ‘表名’>
alter 修改列族(column family)
incr 增加指定表,行或列的值
truncate 清空表 邏輯為先刪除后創(chuàng)建 <truncate ‘表明’>
scan 通過(guò)對(duì)表的掃描來(lái)獲取對(duì)用的值 <scan ‘表名’>
tools 列出hbase所支持的工具
status 返回hbase集群的狀態(tài)信息
version 返回hbase版本信息
exit 退出hbase shell
shutdown 關(guān)閉hbase集群(與exit不同)

Hbase中的結(jié)構(gòu)大致如圖:


hbase是一張表:表中有一個(gè)唯一鍵是 row key, 每個(gè)row key 對(duì)應(yīng) N(N >= 1)個(gè)列族仇哆。每個(gè)列族由N個(gè)列組成(N>=1)

以下以具體例子展示:

# 登錄hbase shell
[root@master ~]# hbase shell
# 創(chuàng)建表catke
> create 'catke','column_family_1', 'column_family_2', 'column_family_3'

# 關(guān)閉表
> disable 'catke'

# 開(kāi)啟表
> enable 'catke'

# 刪除表
> drop 'catke'

# 查看所有表
> list

# 查看表結(jié)構(gòu)  
> describe 'catke'

# 插入一條數(shù)據(jù)  
> put 'catke','key_1','column_family_1:column_2','value2'

# 獲取一條數(shù)據(jù)  
> get 'catke','key_1'

# 查看get命令的幫助(其他命令類似)  
> help 'get'

# 查詢表的所有數(shù)據(jù)  
> scan 'catke'

# 查詢column_family_1下的數(shù)據(jù)
> scan 'catke',{COLUMN => 'column_family_1'}
等同于
scan 'catke',{COLUMN => ['column_family_1']}

# 查詢column_family_1,column_family_2列族的數(shù)據(jù)
> scan 'catke',{COLUMN => ['column_family_1', 'column_family_2']}

# 查詢column_family_1下column_1列的數(shù)據(jù)
> scan 'hbase_test',{COLUMN => ['column_family_1:column_1']}

# 查詢r(jià)ow key 大于等于某key的數(shù)據(jù)
 > scan 'catke',{COLUMN => ['column_family_1:column_1','column_family_2:column_3'], STARTROW => 'key_2'}
 
# 查詢r(jià)ow key 小于某key的數(shù)據(jù)
> scan 'catke',{COLUMN => ['column_family_1:column_1','column_family_2:column_3'], STOPROW => 'key_2'}

# 查詢大于等于key_2,小于key_5的數(shù)據(jù)  
> scan 'catke',{COLUMN => ['column_family_1:column_1','column_family_2:column_3'], STARTROW => 'key_2', STOPROW => 'key_5'}

# 限制輸出的條數(shù)(限制的數(shù)量是針對(duì)主鍵row key的沦辙,因此可能不止2條)  
> scan 'catke', {LIMIT => 2}

# 反序獲取兩行數(shù)據(jù)  
> scan 'catke', {LIMIT => 2, REVERSED => true}
【默認(rèn)情況下REVERSED => false,當(dāng)設(shè)置REVERSED => true時(shí),數(shù)據(jù)反向讀取2行讹剔,自然與之前不一致油讯。可以理解為mysql中select * from dual asc limit 2與select * from dual desc limit 2這樣的區(qū)別】

# 刪除數(shù)據(jù)(delete這個(gè)方法只能刪除具體到哪一行中的某個(gè)列族下的某一列數(shù)據(jù))  
> delete 'catke','key_6','column_family_3:'

# 刪除一整行數(shù)據(jù)  
> deleteall 'catke','key_7'

# 清空表數(shù)據(jù)  
> truncate 'catke'

# 執(zhí)行腳本
如將插入語(yǔ)句寫(xiě)到一個(gè)文件中延欠,然后執(zhí)行  
[root@master ~]# hbase shell testshell


五陌兑、期間遇到的坑

1、啟動(dòng)時(shí)日志出現(xiàn)拒絕連接的錯(cuò)誤
Caused by: java.net.ConnectException: 拒絕連接
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:714)
        at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
        at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
        at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:685)
        at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:788)
        at org.apache.hadoop.ipc.Client$Connection.access$3500(Client.java:410)
        at org.apache.hadoop.ipc.Client.getConnection(Client.java:1550)
        at org.apache.hadoop.ipc.Client.call(Client.java:1381)
        ... 33 more

原因:Hadoop中的dfs.namenode.rpc-address一項(xiàng)沒(méi)有配置
解決方法:
1由捎、在Hadoop的hdfs-site.xml配置文件中添加以下配置:

<property>
  <name>dfs.namenode.rpc-address</name>
  <value>192.168.111.249:9000</value>
</property>

其中192.168.111.249是namenode的服務(wù)器地址兔综,9000是與core-site.xml文件中的fs.default.name配置中的端口一致
2、重啟hadoop
3、重啟hbase

2软驰、啟動(dòng)時(shí)出現(xiàn)以下錯(cuò)誤
java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for proper operation during component failures, but the underlying filesystem does not support doing so. Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired level of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount that can provide it.

解決方法:
在hbase-site.xml配置文件中增加配置

<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>

然后重啟Hbase

六涧窒、參考并致謝

https://www.cnblogs.com/chaofan-/p/9931213.html
https://blog.csdn.net/luqiang81191293/article/details/40428809
https://www.ibm.com/developerworks/cn/downloads/im/biginsightsquick/
https://blog.51cto.com/taotao1240/1735420
https://blog.51cto.com/taotao1240/1734755
https://segmentfault.com/q/1010000005686421/a-1020000005686550
https://segmentfault.com/q/1010000005689441
https://blog.csdn.net/ck3207/article/details/81674557
https://blog.csdn.net/u010416101/article/details/89186320
https://blog.csdn.net/oschina_41140683/article/details/102829597?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锭亏,隨后出現(xiàn)的幾起案子纠吴,更是在濱河造成了極大的恐慌,老刑警劉巖慧瘤,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戴已,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡锅减,警方通過(guò)查閱死者的電腦和手機(jī)糖儡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)上煤,“玉大人休玩,你說(shuō)我怎么就攤上這事著淆〗俸荩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵永部,是天一觀的道長(zhǎng)独泞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)苔埋,這世上最難降的妖魔是什么懦砂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮组橄,結(jié)果婚禮上荞膘,老公的妹妹穿的比我還像新娘。我一直安慰自己玉工,他們只是感情好羽资,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著遵班,像睡著了一般屠升。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狭郑,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天腹暖,我揣著相機(jī)與錄音,去河邊找鬼翰萨。 笑死脏答,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播殖告,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼糙麦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丛肮?” 一聲冷哼從身側(cè)響起赡磅,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宝与,沒(méi)想到半個(gè)月后焚廊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡习劫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年咆瘟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诽里。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡袒餐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谤狡,到底是詐尸還是另有隱情灸眼,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布墓懂,位于F島的核電站焰宣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捕仔。R本人自食惡果不足惜匕积,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望榜跌。 院中可真熱鬧闪唆,春花似錦、人聲如沸钓葫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瓤逼。三九已至笼吟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霸旗,已是汗流浹背贷帮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诱告,地道東北人撵枢。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親锄禽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子潜必,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355