HBase 快速启动

By timebusker on January 13, 2019

独立式HBase

在一个独立的HBase实例中,它具有所有的HBase系统服务程序:Master、RegionServers 和 ZooKeeper(在一个持续到本地文件系统的单一 JVM 中运行)。这是我们最基本的部署配置文件。

~在HBase 0.94.x之前,HBase预计环回IP地址为127.0.0.1。Ubuntu和其他一些发行版默认为127.0.1.1,这会给你带来问题~

安装JDK
HBase下载
HBase配置
vim conf/hbase-env.sh

# 设置JDK路径

JAVA_HOME=

# 设置不使用HBase自带的ZK
export HBASE_MANAGES_ZK=false

HBase的主要配置文件:conf/hbase-site.xml

<configuration>
   <property>     
   <name>hbase.rootdir</name>     
   <value>file:///home/testuser/hbase</value>   
   </property>   
   <property>     
   <name>hbase.zookeeper.property.dataDir</name>     
   <value>/home/testuser/zookeeper</value>   
   </property> 
</configuration>
启动与停止
bin/start-hbase.sh

bin/stop-hbase.sh

启动成功后有HMasterHRegionServer两个常驻进程

伪分布式HBase

伪分布模式意味着HBase仍然在单个主机上完全运行,但是每个HBase守护进程(HMasterHRegionServerZooKeeper)作为一个单独的进程运行; 在独立模式下,所有守护进程都运行在一个jvm进程/实例中。默认情况下,除非按照快速启动HBase的独立模式中所述配置hbase.rootdir属性,否则您的数据仍存储在/tmp/中。

在本演练中,我们将数据存储在HDFS中,假设您有HDFS可用。您可以跳过HDFS配置,继续将数据存储在本地文件系统中。

Hadoop配置
HBase配置

hbase-site.xml

<!-- 添加以下指示HBase以分布式模式运行的属性,每个守护进程有一个JVM实例 -->
<property>
   <name>hbase.cluster.distributed</name>   
   <value>true</value>  
</property>

<!-- 配置HDFS地址 -->
<property>
   <name>hbase.rootdir</name>   
   <value>hdfs://localhost:8020/hbase</value>  
</property>
启动与停止
bin/start-hbase.sh

bin/stop-hbase.sh

完全分布式HBase

在分布式配置中,集群包含多个节点,每个节点运行一个或多个HBase守护进程。这些包括主要和备份主实例,多个ZooKeeper节点和多个RegionServer节点。

节点名称 Master ZooKeeper RegionServer
hdp-cluster-1 没有
hdp-cluster-2 备用
hdp-cluster-3 没有
配置无密码SSH访问
整合HDFS

整合HDFS需要确保版本之间是否兼容,

启动ZK集群
配置HBase
  • conf/regionservers
# 删除原有的localhost

hdp-cluster-2
hdp-cluster-3
  • conf/backup-masters
hdp-cluster-2
  • conf/hbase-site.xml
<property>
   <name>hbase.zookeeper.quorum</name>   
   <value>hdp-cluster-1,hdp-cluster-2,hdp-cluster-3</value> 
</property> 
<property>
   <name>hbase.zookeeper.property.dataDir</name>   
   <value>/usr/local/zookeeper</value> 
</property>
<!-- 
HBase 集群对于时间的同步要求的比HDFS严格,如果集群之间的节点时间不同步,会导致 region server 无法启动,
抛出ClockOutOfSyncException 异常。所以,集群启动之前千万记住要进行 时间同步,要求相差不要超过 30s 
-->
<property>
	<name>hbase.master.maxclockskew</name>
	<value>180000</value>
	<description>Time difference of regionserver from master</description>
</property>
<!-- 指定存储HBase数据的文件系统 -->
<property>
	<name>hbase.rootdir</name>
	<value>hdfs://hdpcluster:9000/hbase</value>
</property>
  • 将相同配置的部署包分发到三台服务器上
启动并测试群集

确保HBase没有在任何节点上运行。如果您在之前的测试中忘记停止HBase,您将会遇到错误。 通过使用该jps命令检查HBase是否在任何节点上运行。寻找HMasterHRegionServerQuorumPeer的进程。如果他们存在,删除他们。

  • hdp-cluster-1节点上启动服务
sh bin/start-hbase.sh 

服务启动顺序:ZooKeepermasterRegionServersbackup masters

  • 验证启动是否正常

在每台服务器上查看相应的服务进程是否存在

ZooKeeper进程名称这个HQuorumPeer过程是一个由HBase控制和启动的ZooKeeper实例。如果以这种方式使用ZooKeeper, 则每个群集节点仅限于一个实例,并且仅适用于测试。如果ZooKeeper在HBase之外运行,则调用该进程QuorumPeer。

  • 浏览到Web UI
http://hdp-cluster-1:16010/  	

常见问题

HBase HA集群,启动报错:java.net.UnknownHostException: ***

  • 先确认Hadoop版本是否与HBase版本兼容
  • Hadoop HA集群正常可用
  • HBase HA无法识别HDFS的nameservice ID集群:把hadoop的core-site.xmlhdfs-site.xml复制到HBase的conf目录下

java.lang.NoClassDefFoundError: org/apache/htrace/SamplerBuilder

  • 缺包拷贝:
cp $HBASE_HOME/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar $HBASE_HOME/lib/