/不需要手动创建,系统程序会自动创建
hdfs dfs -mkdir -p /hbase
hdfs dfs -chmod -R 777 /hbase
hdfs://hadoop34:9000/hbase


先设定hbase安装目录
/home/opt/hbase-2.2.3
tar -xvzf hbase-2.2.3.tar.gz
mv hbase-2.2.3 /home/opt


配置环境变量
vim /etc/profile添加如下

export HBASE_HOME=/home/opt/hbase-2.2.3
export PATH=$PATH:$HBASE_HOME/bin

source /etc/profile

先创建临时的pids文件夹
mkdir -pv /var/hadoop/pids

修改配置文件
配置hbase-env.sh
#其中HBASE_CLASSPATH是Hadoop的配置文件路径
#其中HBASE_MANAGES_ZK=true,表示由hbase自己管理zookeeper,不需要单独的zookeeper 
#HBASE_MANAGES_ZK=false则表示使用独立部署的zookeeper
export HBASE_CLASSPATH=/home/opt/hadoop-2.9.2/etc/hadoop
export HBASE_PID_DIR=/var/hadoop/pids
export JAVA_HOME=/opt/jdk1.8.0_231
#export JAVA_HOME=/usr/local/jdk1.8.0_202
export HBASE_MANAGES_ZK=false

配置hbase-site.xml
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://hadoop34:9000/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.master</name>
        <value>hadoop34:6000</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>hadoop34:2181,hadoop35:2181,hadoop36:2181</value>
    </property>
    <property>
        <name>zookeeper.znode.parent</name>
        <value>/hbase</value>
    </property>
    <property>
        <name>hbase.zookeeper.property</name>
        <value>/home/opt/apache-zookeeper-3.5.7-bin/data</value>
    </property>
    <!-- 解决启动HMaster无法初始化WAL的问题 -->
    <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>
</configuration>
说明
base.rootdir 用于指定HBase数据的存储位置;
hbase.cluster.distributed 设置集群处于分布式模式;
hbase.master 指定hbase的hmaster的主机名和端口 ;
base.zookeeper.quorum 指定使用zookeeper的主机地址,必须是奇数个;
hbase.zookeeper.property 指定zookeeper数据存储目录,默认路径是/tmp,如果不配置,重启之后数据将被清空。


配置regionservers
在regionservers文件中添加HBase的slave节点,类似hadoop中的slaves,一行一个。
hadoop34
hadoop35
hadoop36

配置备masters(如果非必要,不建议配置)
vim backup-masters
hadoop35


上面如果不是3台机器都配置,就把主机器哪台文件scp到其它机器


启动和验证
start-hbase.sh 
stop-hbase.sh
./hbase-daemon.sh start master
./hbase-daemon.sh start regionserver

http://10.99.69.34:16010/master-status

hadoop34#jps
62976 QuorumPeerMain
64448 NodeManager
75043 Jps
64308 ResourceManager
58522 DataNode
58395 NameNode

hadoop35#jps
60915 QuorumPeerMain
61478 NodeManager
56476 DataNode
65181 Jps

hadoop36#jps
64259 QuorumPeerMain
65081 NodeManager
56540 SecondaryNameNode
71711 Jps
56447 DataNode


启动hbase报错:“SLF4J: Class path contains multiple SLF4J bindings.”解决方法
cd /home/opt/hbase-2.2.3/lib/client-facing-thirdparty
mv slf4j-log4j12-1.7.25.jar slf4j-log4j12-1.7.25-copy
修改了hbase中的文件名,保留了hadoop的,这个会有问题,一个当启动hbase的reg会报错
这一堆SLF4J,是由于hbase和hadoop的jar包冲突导致的,只需要多配置一行环境变量即可解决。

在$HBASE_HOME/conf/hbase-env.sh中,export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true" 这一句的注释去掉即可。

扩展1
如果要起双master,hbase-daemon.sh start master 是起不来的,因为hbase-site.xml 写了
<property>
#hbasemaster的主机和端口
<name>hbase.master</name>
<value>hadoop:6000</value>
</property>
需要使用 /hbase/bin> ./local-master-backup.sh start 2


如果要调整默认端口
    <!-- 指定HBase Master web页面访问端口,默认端口号16010 -->
    <property>
        <name>hbase.master.info.port</name>
        <value>16010</value>
    </property>
    <!-- 指定HBase RegionServer web页面访问端口,默认端口号16030 -->
	<property>
		<name>hbase.regionserver.info.port</name>
		<value>16030</value>
	</property>