独立式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
启动成功后有HMaster
和HRegionServer
两个常驻进程
伪分布式HBase
伪分布模式意味着HBase仍然在单个主机上完全运行,但是每个HBase守护进程(HMaster
,HRegionServer
和ZooKeeper
)作为一个单独的进程运行;
在独立模式下,所有守护进程都运行在一个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是否在任何节点上运行。寻找HMaster
,HRegionServer
和QuorumPeer
的进程。如果他们存在,删除他们。
- 在
hdp-cluster-1
节点上启动服务
sh bin/start-hbase.sh
服务启动顺序:ZooKeeper
– master
– RegionServers
– backup 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.xml
和hdfs-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/