HBase 简介
HBase是一个分布式的、面向列的开源数据库,就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,hbase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。它是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase的常见使用场景如下:
1、大数据量(100s TB级数据)且有快速随机访问的需求。例如淘宝的交易历史记录,数据量巨大无容置疑,面向普通用户的请求必然要即时响应。
2、容量的优雅扩展。大数据驱使下的动态扩展系统容量是必须的。
3、业务场景简单,不需要关系数据库中很多特性(例如交叉列、交叉表,事务,连接等等)。
4、合理设计rowkey。因为hBase的查询用rowkey是最高效的,也几乎是生产环境下唯一可行的方式。
在搭建HBase高可用集群时,将HBase的RegionServer部署在HDFS的3个DataNode节点上,HBase的HMaster服务部署在HDFS的2个NameNode(Active和Standby)节点上,部署2个HMaster保证集群的高可用性,防止单点问题。这里使用了独立的ZooKeeper集群,未使用HBase自带的ZooKeeper。
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。
所以这里要配置HBase高可用的话,只需要启动两个HMaster,让Zookeeper自己去选择一个Master Acitve。
安装过程:
在master1节点解压hbase安装包
sudo tar zxvf ./hbase-1.2.6-bin.tar.gz
进入hbase的conf目录
cd /usr/local/hbase-1.2.6/conf/
修改hbase-env.sh
nano hbase-env.sh
添加以下内容
# 配置JDK安装路径
export JAVA_HOME=/usr/local/jdk1.7.0_80
# 配置Hadoop安装路径
export HADOOP_HOME=/usr/local/hadoop-2.6.5
# 设置HBase的日志目录
export HBASE_LOG_DIR=${HBASE_HOME}/logs
# 使用独立的ZooKeeper集群
export HBASE_MANAGES_ZK=false
配置hbase-site.xml(注意hbase.rootdir里面myCluster是安装hadoop时设定的)
nano hbase-site.xml
内容改成下面的:
<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
修改为以下内容,这里面填写regionservers的hostname
slave1
slave2
slave3
新建backup-masters文件并配置,这里面写的是HMaster的备用节点的hostname
sudo nano backup-masters
添加:
hadoop-master2
创建hbase的缓存文件目录
cd /usr/local/hbase-1.2.6/
mkdir tmp
创建hbase的日志文件目录
mkdir logs
改一下权限
sudo chown -R hadoop-sna .
sudo chgrp -R hadoop-sna .
将hbase工作目录同步到集群其它节点
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/
在集群各节点上修改用户环境变量
sudo nano /etc/profile
添加以下内容:
export HBASE_HOME=/usr/local/hbase-1.2.6
export PATH=$PATH:$HBASE_HOME/bin
刷新环境变量
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
集群启动
启动zookeeper集群(分别在slave1、slave2和slave3上执行)
zkServer.sh start
备注:此命令分别在slave1/slave2/slave3节点启动了QuorumPeerMain。
启动HDFS(在master1执行)
start-dfs.sh
备注:此命令分别在master1/master2节点启动了NameNode和ZKFC,分别在slave1/slave2/slave3节点启动了DataNode和JournalNode。
启动YARN(在master2执行)
start-yarn.sh
备注:此命令在master2节点启动了ResourceManager,分别在slave1/slave2/slave3节点启动了NodeManager。
启动YARN的另一个ResourceManager(在master1执行,用于容灾)
yarn-daemon.sh start resourcemanager
备注:此命令在master1节点启动了ResourceManager。
启动HBase(在master1执行)
start-hbase.sh
备注:此命令分别在master1/master2节点启动了HMaster,分别在slave1/slave2/slave3节点启动了HRegionServer。
测试
使用hbase shell
进入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安装完毕
网友评论