简介
- Apache HBase是一种Key/Value系统,它运行在HDFS之上。和Hive不一样,Hbase的能够在它的数据库上实时运行,而不是运行MapReduce任务;
- Hbase适合用来进行大数据的实时查询,支持增删查改,但不支持复杂的统计功能,统计功能一般使用Hive;
- 安装HBase分布式集群所需的前提环境:
- Zookeeper集群:可自行搭建一个zookeeper集群,同时也可以使用hbase自带的zookeeper(本文使用自带的zookeeper);
- Hadoop分布式集群(可参考博主上一篇博客):阿里云ECS7安装搭建:hadoop2.7.6分布式集群;
- 下载HBase1.3.3版本安装包:http://mirror.bit.edu.cn/apache/hbase/1.3.3/hbase-1.3.3-bin.tar.gz
实践
- 搭建流程,在hadoop-master主服务器上安装hbase,然后将其整套配置文件复制到各个从节点,这里实验环境只使用两台服务器搭建hbase集群:hadoop-master和hadoop-slave,两台服务器都已经设置了互相免密登录(正式生产环境建议使用至少4台服务器),还没配置的可以参考博主的上一篇hadoop集群搭建博客;
- 首先,将hbase-1.3.3-bin.tar.gz的压缩安装包放到hadoop-master服务器上
#新建文件夹
$ mkdir /data/hadoop/hbase
#上传hbase1.3.3压缩文件在此目录下,然后进行解压
$ tar -xzvf hbase-1.3.3-bin.tar.gz
#重命名
$ mv hbase-1.3.3 hive
- 然后,配置Hbase环境变量,配置方法和hadoop差不多,所有的主从节点都要配置;
#切换root用户
$ su root
#编辑配置文件
$ vim /etc/profile
#新增hbase环境变量,因为hadoop-master服务器已经安装了hadoop所以已经存在hadoop环境变量
export JAVA_HOME=/root/tools/jdk1.8.0_152
export HADOOP_HOME=/data/hadoop/hadoop/hadoop
export HBASE_HOME=/data/hadoop/hbase/hbase
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin
#使配置文件生效
$ source /etc/profile
- 切换目录:cd /data/hadoop/hbase/hbase/conf;
- 配置目录下hbase相关的三个文件:hbase-env.sh;hbase-site.xml;regionservers
- 配置hbase-env.sh文件:vim hbase-env.sh
#配置jdk环境
export JAVA_HOME=/root/tools/jdk1.8.0_152
#配置hadoop环境
export HADOOP_HOME=/data/hadoop/hadoop/hadoop
#配置hbase环境
export HBASE_HOME=/data/hadoop/hbase/hbase
#指定hbase配置文件路径
export HBASE_CLASSPATH=/data/hadoop/hbase/hbase/conf
#配置zookeeper,true则说明使用hbase内置的zookeeper,false则说明使用单独的zookeeper集群
export HBASE_MANAGES_ZK=true
#配置hbase日志存放目录
export HBASE_LOG_DIR=/data/hadoop/hbase/hbase/logs
- 配置hbase-site.xml文件:vim hbase-site.xml
<configuration>
<!--这是regionServer的共享目录,用来持久化hbase的,端口默认9000-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop-master:9000/hbase</value>
</property>
<!--hbase的运行模式,false是单机模式,true是分布式模式;
若设置为false,hbase和zookeeper会运行在同一个JVM里面-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--hbase主节点的端口,默认60000-->
<property>
<name>hbase.master</name>
<value>hadoop-master:60000</value>
</property>
<!--zookeeper集群的地址列表,用逗号分割,默认localhost-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop-master,hadoop-slave</value>
</property>
</configuration>
- 配置regionservers文件:vim regionservers
#加入regionserver节点列表
hadoop-master
hadoop-slave
- 将hadoop-master上的所有文件复制到从节点上的对应的目录下:
$ scp -r /data/hadoop/hbase hadoop-slave://data/hadoop/hbase
- 启动、关闭和重启hbase(都在主节点hadoop-master上运行):
#启动
$ start-hbase.sh
#关闭
$ stop-hbase.sh
#重启hbase(内置zookeeper)
$ stop-hbase.sh >> stop-all.sh >> start-all.sh >> start_hbase.sh
- 查看相关启动信息,master主节点上如果启动成功,则会有如下进程:
相关进程说明:
$ 21216 HQuorumPeer >> zookeeper进程
$ 21314 HMaster >> hbase进程
$ 20114 NameNode >> hadoop主节点进程
$ 21458 HRegionServer >> hbase的regionserver数据分区进程
$ 20419 SecondaryNameNode >> hadoop进程
$ 20681 NodeManager >> hadoop进程(如果不作为数据节点则没有该进程)
$ 21689 Jps
$ 20249 DataNode >>hadoop进程(如果不作为数据节点则没有该进程)
$ 20575 ResourceManager >>hadoop进程
从节点会有如下进程:
$ 21481 HQuorumPeer >>zookeeper进程
$ 21849 Jps
$ 21178 DataNode >>hadoop的数据节点进程
$ 21292 NodeManager >>hadoop进程
$ 21614 HRegionServer >>hbase进程
- 如果没有出现上面的相关进程,则查询相对应的路径下的日志文件,具体问题具体分析解决:
$ cd /data/hadoop/hbase/hbase/logs
$ vim hbase-hadoop-master-hadoop-master.log
$ vim vim hbase-hadoop-regionserver-hadoop-master.log
$ vim hbase-hadoop-zookeeper-hadoop-master.log
- hbase启动成功,执行命令,操作hbase数据仓库:hbase shell
#常用的hbase操作命令
#命令帮助
$ help
#对应命令帮助
$ help 'create'
$ help 'scan'
$ help 'delete'
#查看所有表
$ list
#扫描表信息
$ scan 'sixmonth'
#新增表,由于hbase属于列式存储所以创建方式有所不同,详情可参照其他博客
$ create 'sixmonth','user'
#删除表
$ disable 'sixmonth'
$ drop 'sixmonth'
#插入数据,以下插入两行数据
$ put 'sixmonth','0001', 'user:name','admin'
$ put 'sixmonth','0001', 'user:sex','woman'
$ put 'sixmonth','0002', 'user:name','test'
$ put 'sixmonth','0002', 'user:sex','man'
注意事项
- hbase启动和停止顺序:
内置zookeeper启动:hadoop >> hbase
内置zookeeper停止:hbase >> hadoop
外用zookeeper启动:hadoop >> zookeeper >> hbase
外用zookeeper停止:hbase >> zookeeper >> hadoop
- 使用hbase的内置zookeeper作为集群管理者需谨慎,在断网或服务器不稳定时,无法进行有效维护,连进程都没办法单独启动,必须重启hbase才能重启,所以,除了在实验环境下使用内置的zookeeper外,一般都自行搭建独立的zookeeper集群;
- 由于hbase需要外用连接,所以阿里云服务器需要开通以下端口:2181;16010;
- hbase环境搭建之后,如果需要使用java客户端调用连接,可参考博主另一篇博文:
总结
- hbase作为hadoop大数据生态的一员,在对数据的实时查询方面发挥不可替代的作用,一般安装了hadoop之后,相对应配套安装hbase,方便数据操作;
- 实践是检验认识真理性的唯一标准,自己动手,丰衣足食~~