在Windows上装hadoop生态组件是一件麻烦事,但是HBase的安装却可以非常简单。目前主流的安装文档都需要装Hadoop,这里介绍一个简单的单机版安装方法,适合用来学习。

1. 下载HBASE,以及Hadoop模拟工具winutils.exe

HBASE地址自己搜索吧。winutils.exe是用来模拟Hadoop的,只要有这个文件就可以了,这个也可以找得到,例如这个博客下面的留言就有。或者

GitHub - cdarlint/winutils: winutils.exe hadoop.dll and hdfs.dll binaries for hadoop windows

注意要把winutils.exe和dll放在bin目录里。后面HADOOP_HOME不要指向bin,而是指向bin的上一层。

最后需要注意的是HBASE和Hadoop的版本对应关系,也很容找到,或者可以看这里。我用的是HBASE-1.2.6和Hadoop-2.5.1

2. 修改两个配置:hbase.cmd和hbase-site.xml

前者是环境信息,加入JAVA_HOME, HADOOP_HOME, HBASE_MANAGES_ZK。 前两个是Java地址和Hadoop地址,路径可以直接用\ ,也无需配到环境变量里。例如下面的:

set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_121
set HADOOP_HOME=D:\hadoop-2.7.1
set HBASE_MANAGES_ZK=false

后者是HBASE服务的信息,这里尽量少配,其实甚至数据目录可以不配,它会自己找用户目录某个位置存。配了5个:

<property>
        <name>hbase.tmp.dir</name>
        <value>/D:/hbase-1.2.6/data/tmp</value>
    </property>
    <!-- hdfs URI 要使用localhost, 不能使用127.0.0.1 -->
    <property>
        <name>hbase.rootdir</name>
        <value>file:///D:/hbase-1.2.6/root</value>
    </property>
    <!-- Windows不支持true, 只能填写false,设置成false之后, HBase将启动内置Zookeeper
         填写true => error message: This is not implemented yet. Stay tuned. -->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>false</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>localhost</value>
    </property>
    <property>  
        <name>hbase.zookeeper.property.dataDir</name>  
        <value>/D:/hbase-1.2.6/data/zoo</value>  
    </property>

3. 启动HBASE:运行start-hbase.cmd

执行以后,会弹出一个框,分别启动HMaster,RegionServer,Zookeeper三个服务,大概要10多秒才能启动好。用jps查看,只有一个HMaster进程,说明另外两个服务并不是独立启动的,也就是本地模式。

关闭HBASE直接运行stop-hbase.cmd即可,原来弹出的命令行会不断打印出关闭信息。

4. 验证安装成功

可以通过web查看HBASE信息,http://localhost:16010/master-status, 即可看到

另外通过shell操作一下HBASE,命令:hbase.cmd shell 

5. 踩坑处理

本来上面三步在我自己电脑就成功了,但是我在某个机房里hbase-site配成那样无法启动HBASE,错误显示HMaster无法bind端口。但是一看IP明显获取不对,于是找了很半天,找到了2个配置来解决,显然是指定HMaster和RegionServer的绑定IP:

<property>
	<name>hbase.master.ipc.address</name>
	<value>0.0.0.0</value>
</property>
<property>
	<name>hbase.regionserver.ipc.address</name>
	<value>0.0.0.0</value>
</property>

但是依旧报了另外的错误,大意是RegionServer上报HMaster状态时候,没连上HMaster。这不合理啊不是已经指定了HMaster启动地址了吗,但是错误信息里显示RegionServer去连的IP确又是个错误的IP。后来又找了半天,抱着尝试的心态试了一下居然成功了:

<property>
    <name>hbase.master.hostname</name>
    <value>localhost</value>
</property>
<property>
    <name>hbase.regionserver.hostname</name>
    <value>localhost</value>
</property>

从查到的各种资料综合看,应该是HBASE启动获取主机名和IP地址问题,两个组件因此要配4个项,个人猜测是HBASE的版本问题吧。