HBase 簡(jiǎn)介
HBase是一個(gè)分布式的臭笆、面向列的開(kāi)源數(shù)據(jù)庫(kù),就像Bigtable利用了Google文件系統(tǒng)(File System)所提供的分布式數(shù)據(jù)存儲(chǔ)一樣,hbase在Hadoop之上提供了類似于Bigtable的能力愁铺。HBase是Apache的hadoop項(xiàng)目的子項(xiàng)目鹰霍。HBase不同于一般的關(guān)系數(shù)據(jù)庫(kù),它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)茵乱。另一個(gè)不同的是HBase基于列的而不是基于行的模式茂洒。它是一個(gè)高可靠性、高性能似将、面向列获黔、可伸縮的分布式存儲(chǔ)系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群在验。
HBase的常見(jiàn)使用場(chǎng)景如下:
1玷氏、大數(shù)據(jù)量(100s TB級(jí)數(shù)據(jù))且有快速隨機(jī)訪問(wèn)的需求。例如淘寶的交易歷史記錄腋舌,數(shù)據(jù)量巨大無(wú)容置疑盏触,面向普通用戶的請(qǐng)求必然要即時(shí)響應(yīng)。
2块饺、容量的優(yōu)雅擴(kuò)展赞辩。大數(shù)據(jù)驅(qū)使下的動(dòng)態(tài)擴(kuò)展系統(tǒng)容量是必須的。
3授艰、業(yè)務(wù)場(chǎng)景簡(jiǎn)單辨嗽,不需要關(guān)系數(shù)據(jù)庫(kù)中很多特性(例如交叉列、交叉表淮腾,事務(wù)糟需,連接等等)。
4谷朝、合理設(shè)計(jì)rowkey洲押。因?yàn)閔Base的查詢用rowkey是最高效的,也幾乎是生產(chǎn)環(huán)境下唯一可行的方式圆凰。
在搭建HBase高可用集群時(shí)杈帐,將HBase的RegionServer部署在HDFS的3個(gè)DataNode節(jié)點(diǎn)上,HBase的HMaster服務(wù)部署在HDFS的2個(gè)NameNode(Active和Standby)節(jié)點(diǎn)上专钉,部署2個(gè)HMaster保證集群的高可用性挑童,防止單點(diǎn)問(wèn)題。這里使用了獨(dú)立的ZooKeeper集群跃须,未使用HBase自帶的ZooKeeper炮沐。
HMaster沒(méi)有單點(diǎn)問(wèn)題,HBase中可以啟動(dòng)多個(gè)HMaster回怜,通過(guò)Zookeeper的Master Election機(jī)制保證總有一個(gè)Master運(yùn)行。
所以這里要配置HBase高可用的話,只需要啟動(dòng)兩個(gè)HMaster玉雾,讓Zookeeper自己去選擇一個(gè)Master Acitve翔试。
安裝過(guò)程:
在master1節(jié)點(diǎn)解壓hbase安裝包
sudo tar zxvf ./hbase-1.2.6-bin.tar.gz
進(jìn)入hbase的conf目錄
cd /usr/local/hbase-1.2.6/conf/
修改hbase-env.sh
nano hbase-env.sh
添加以下內(nèi)容
# 配置JDK安裝路徑
export JAVA_HOME=/usr/local/jdk1.7.0_80
# 配置Hadoop安裝路徑
export HADOOP_HOME=/usr/local/hadoop-2.6.5
# 設(shè)置HBase的日志目錄
export HBASE_LOG_DIR=${HBASE_HOME}/logs
# 使用獨(dú)立的ZooKeeper集群
export HBASE_MANAGES_ZK=false
配置hbase-site.xml(注意hbase.rootdir里面myCluster是安裝hadoop時(shí)設(shè)定的)
nano hbase-site.xml
內(nèi)容改成下面的:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://mycluster/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>60000</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/usr/local/hbase-1.2.6/tmp</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>slave1,slave2,slave3</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/zookeeper-3.4.6/data</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<property>
<name>hbase.regionserver.restart.on.zk.expire</name>
<value>true</value>
</property>
</configuration>
配置regionservers
sudo nano regionservers
修改為以下內(nèi)容,這里面填寫(xiě)regionservers的hostname
slave1
slave2
slave3
新建backup-masters文件并配置复旬,這里面寫(xiě)的是HMaster的備用節(jié)點(diǎn)的hostname
sudo nano backup-masters
添加:
hadoop-master2
創(chuàng)建hbase的緩存文件目錄
cd /usr/local/hbase-1.2.6/
mkdir tmp
創(chuàng)建hbase的日志文件目錄
mkdir logs
改一下權(quán)限
sudo chown -R hadoop-sna .
sudo chgrp -R hadoop-sna .
將hbase工作目錄同步到集群其它節(jié)點(diǎn)
scp-r /usr/local/hbase-1.2.6/ master2:/usr/local/
scp-r /usr/local/hbase-1.2.6/ slave1: /usr/local/
scp-r /usr/local/hbase-1.2.6/ slave2: /usr/local/
scp-r /usr/local/hbase-1.2.6/ slave3: /usr/local/
在集群各節(jié)點(diǎn)上修改用戶環(huán)境變量
sudo nano /etc/profile
添加以下內(nèi)容:
export HBASE_HOME=/usr/local/hbase-1.2.6
export PATH=$PATH:$HBASE_HOME/bin
刷新環(huán)境變量
source /etc/profile
刪除hbase的slf4j-log4j12-1.7.5.jar垦缅,解決hbase和hadoop的LSF4J包沖突
cd /usr/local/hbase-1.2.6/lib
mv slf4j-log4j12-1.7.5.jar slf4j-log4j12-1.7.5.jar.bk
集群?jiǎn)?dòng)
啟動(dòng)zookeeper集群(分別在slave1、slave2和slave3上執(zhí)行)
zkServer.sh start
備注:此命令分別在slave1/slave2/slave3節(jié)點(diǎn)啟動(dòng)了QuorumPeerMain驹碍。
啟動(dòng)HDFS(在master1執(zhí)行)
start-dfs.sh
備注:此命令分別在master1/master2節(jié)點(diǎn)啟動(dòng)了NameNode和ZKFC壁涎,分別在slave1/slave2/slave3節(jié)點(diǎn)啟動(dòng)了DataNode和JournalNode。
啟動(dòng)YARN(在master2執(zhí)行)
start-yarn.sh
備注:此命令在master2節(jié)點(diǎn)啟動(dòng)了ResourceManager志秃,分別在slave1/slave2/slave3節(jié)點(diǎn)啟動(dòng)了NodeManager怔球。
啟動(dòng)YARN的另一個(gè)ResourceManager(在master1執(zhí)行,用于容災(zāi))
yarn-daemon.sh start resourcemanager
備注:此命令在master1節(jié)點(diǎn)啟動(dòng)了ResourceManager浮还。
啟動(dòng)HBase(在master1執(zhí)行)
start-hbase.sh
備注:此命令分別在master1/master2節(jié)點(diǎn)啟動(dòng)了HMaster竟坛,分別在slave1/slave2/slave3節(jié)點(diǎn)啟動(dòng)了HRegionServer。
測(cè)試
使用hbase shell
進(jìn)入hbase交互式命令行
hbase>create 'userinfotable',{NAME=>'username'},{NAME=>'fullname'},{NAME=>'homedir'}
hbase>put 'userinfotable','r1','username','vcsa'
hbase>put 'userinfotable','r2','username','sasuser'
hbase>scan 'userinfotable'
hbase>disable ‘userinfotable’
hbase>drop ‘userinfotable’
hbase>exit
HBase安裝完畢