当前位置: 首页>后端>正文

Hbase——HBase 安装及部署配置

前言

由于 HBase是以 HDFS 作为底层存储文件系统的,因此部署好 Hadoop 并启动服务是 HBase 部署的先决条件。实际生产环境均是采用完全分布式模式来安装部署并运行 HBase.

搭建Hadoop集群:

  • http://www.cnblogs.com/smartloli/p/4298430.html

  • http://blog.kdyzm.cn/post/129

  • Hadoop完全分布式模式集群搭建
    https://www.cnblogs.com/wdh01/p/13789485.html

  • Hadoop部署配置及运行调试(下) - HA完全分布式
    https://mp.weixin.qq.com/s?__biz=MzkwNTI4MDEzOQ==&mid=2247484102&idx=1&sn=33ef7ac8cd0c4d06ffc124487445cc62

官网关于jdk 与 hbase 版本的说明

Hbase——HBase 安装及部署配置,第1张

官网地址:https://hbase.apache.org/book.html#java

Hadoop 版本

Hbase——HBase 安装及部署配置,第2张

一、HBase介绍

在使用HBase的时候,我们需要清楚HBase是用来干什么的。HBase是一个分布式的、面向列的开源数据库,就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。它是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

接下来我们来看看HBase的使用场景,HBase有如下使用场景:

  • 大数据量 (100s TB级数据) 且有快速随机访问的需求。
  • 例如淘宝的交易历史记录。数据量巨大无容置疑,面向普通用户的请求必然要即时响应。
  • 容量的优雅扩展。
  • 大数据的驱使,动态扩展系统容量的必须的。例如:webPage DB。
  • 业务场景简单,不需要关系数据库中很多特性(例如交叉列、交叉表,事务,连接等等)。
  • 优化方面:合理设计rowkey。因为hbase的查询用rowkey是最高效的,也几乎的唯一生产环境可行的方式。所以把你的查询请求转换为查询rowkey的请求吧。

HBase集群

在搭建HBase集群时,既然HBase拥有高可用特性,那么我们在搭建的时候要充分利用这个特性,下面给大家一个HBase的集群搭建架构图,如下图所示:

Hbase——HBase 安装及部署配置,第3张

这里由于资源有限,我将HBase的RegionServer部署在3个DN节点上,HBase的HMaster服务部署在NNA和NNS节点,部署2个HMaster保证集群的高可用性,防止单点问题。下面我们开始配置HBase的相关配置,这里我使用的是独立的ZK,未使用HBase自带的ZK。

二、HBase集群搭建

Hbase——HBase 安装及部署配置,第4张

2.1 安装前检查

HBase 是数据库,会在同一时间使用很多的文件句柄,而 Linux 系统最大可打开文件数一般默认的参数值是 1024,如果不进行修改,当并发量上来的时候就会出现 "Too Many Open Files" 的错误,导致整个 HBase 不可运行。另外,还需要修改 HBase 用户的 nproc,设置单个用户可用的最大进程数量,如果过低会造成 OOM 异常。

先查看当前用户的 ulimit:

ulimit -n

在三台节点机器上编辑以下文件:

vim /etc/security/limits.conf

由于安装 HBase 使用的用户也是 hadoop,因此修改用户 hadoop 的上限值设置,在文件末追加以下参数:

hadoop        soft    nofile          102401
hadoop        hard    nofile          102401
hadoop        soft    nproc            32000
hadoop        hard    nproc            32000

修改后注销用户并重新登录,配置才能生效。

2.2 安装 HBase

将下载的 HBase 压缩包上传到 hadoop100 机器的 /opt/softwares 目录,这里使用的是 2.4.8 稳定版本。

下载安装包
官网地址:https://hbase.apache.org/downloads.html

历史版本下载:https://archive.apache.org/dist/hbase/

将 HBase 压缩包解压到 /opt/modules 目录下安装:

tar -zxvf /opt/softwares/hbase-2.4.8-bin.tar.gz -C /opt/modules/

注意:建议下载带有 bin 的安装包,不带 bin 的安装包需要下载后编译打包才能使用。

2.3 配置 HBase

服务器规划如下:hadoop100 作为主节点,运行 HMaster 及 HRegionServer 服务;hadoop101 及 hadoop102 作为从节点,运行 HRegionServer 服务。

2.3.1 配置 hbase-env.sh

修改 HBase 的 /conf 目录下 hbase-env.sh 文件中的以下参数配置:

2.3.1.1 配置 JAVA_HOME 参数

HBase 2.4.8 版本需要运行在 JDK 1.8+ 的版本上:

# The java implementation to use.  Java 1.8+ required.
# export JAVA_HOME=/usr/java/jdk1.8.0/
export JAVA_HOME="/opt/modules/jdk1.8.0_301"
2.3.1.2 配置 Zookeeper 管理方式

一个分布式运行的 HBase 需要依赖一个 Zookeeper 集群,所有的节点和客户端都必须能够访问 Zookeeper. 默认的情况下 HBase 会管理一个 Zookeeper 集群,这个集群会作为 HBase 的一部分来管理启动,即 Zookeeper 会随着 HBase 的启动而启动,随着其关闭而关闭。

而我们这里是独立管理一个 Zookeeper 集群来运行,无需使用被 HBase 托管的 Zookeeper 集群,因此需要修改 Zookeeper 是否被托管的参数值为 false:

# Tell HBase whether it should manage it's own instance of ZooKeeper or not.
# export HBASE_MANAGES_ZK=true
export HBASE_MANAGES_ZK=false

若需要使用托管的 Zookeeper 集群则设置此参数值为 true.

2.3.2 配置 hbase-site.xml

在 hadoop100 上添加并修改 /conf 目录下 hbase-site.xml 文件中的参数配置。

hbase-site.xml 各参数默认值及描述检索地址: https://hbase.apache.org/book.html#config.files

    1. hbase.rootdir
      此参数用以指定 RegionServer 的共享目录,用于持久化存储 HBase 的数据。参数默认设置为写入 /tmp 中,若不修改此配置,在节点机器重启时,数据就会丢失,因此需要修改此参数值。

此处一般设置为 HDFS 的文件目录,即 NameNode 运行的节点机器,还要包含文件系统的 scheme. 由于 HDFS 是 HA 部署的,因此这里我们配置为 NameNode 的 nameservices 地址。

添加以下内容修改此参数值,指定 RegionServer 的共享目录地址:

<property>
  <name>hbase.rootdir</name>
  <value>hdfs://mycluster/hbase</value>
</property>
    1. hbase.tmp.dir
      此参数用以指定 HBase 运行时产生的临时文件的存放目录,默认存放在 /tmp 目录下,若不修改此配置,在节点机器重启时,临时数据会被清除,因此建议修改此参数值,配置持久化的目录。

这里在 HBase 的安装目录下新建一个 tmp 目录,并将参数值指定此目录。

添加以下内容修改此参数值,指定 HBase 临时文件的存放目录:

<property>
  <name>hbase.tmp.dir</name>
  <value>/opt/modules/hbase-2.4.8/tmp</value>
</property>
    1. hbase.cluster.distributed
      此参数用以配置 HBase 的部署模式,false 表示单机或伪分布式模式,true 表示完全分布式模式。这里我们使用完全分布式模式,因此设置为 true.

添加以下内容修改此参数值,配置 HBase 的部署模式:

<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property>
    1. hbase.zookeeper.quorum
      此参数用以用以指定 Zookeeper 集群节点的地址列表,各台机器的地址用逗号分隔。默认为 localhost, 完全分布式模式下需要修改。

添加以下内容修改此参数值,指定 Zookeeper 集群地址:

<property>
  <name>hbase.zookeeper.quorum</name>
  <value>hadoop100,hadoop101,hadoop102</value>
</property>
    1. hbase.zookeeper.property.clientPort
      此参数用以指定 Zookeeper 集群地址的端口号,默认端口号为 2181.这里使用默认端口号,不作修改。

添加以下内容修改此参数值,指定 Zookeeper 地址的端口号:

<property>
  <name>hbase.zookeeper.property.clientPort</name>
  <value>2181</value>
</property>
    1. hbase.zookeeper.property.dataDir
      此参数用以指定存储 Zookeeper 元数据的目录,默认设置为存储在 /tmp 下,若不修改此配置,在节点机器重启时,数据就会丢失,因此需要修改此参数值。这里指定在 zoo.cfg 配置文件中 dataDir 参数设置的目录。

添加以下内容修改此参数值,指定 Zookeeper 元数据存储目录:

<property>
  <name>hbase.zookeeper.property.dataDir</name>
  <value>/opt/modules/apache-zookeeper-3.6.3-bin/data/zkData</value>
</property>
    1. hbase.master.info.port
      此参数用以指定 HBase 的 Web 页面客户端的端口号,默认端口号为 16010. 这里使用默认端口号。若不需要运行 Web 页面,将此参数值设置为 -1 即可。

添加以下内容修改此参数值,指定 HBase 的 Web 页面端口:

<property>
  <name>hbase.master.info.port</name>
  <value>16010</value>
</property>
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
/**
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-->
<configuration>
    <!-- HBase数据在HDFS中的存放的路径 -->
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://node1.yibo.cn:8020/hbase</value>
    </property>
    <!-- Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面 -->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <!-- ZooKeeper的地址 -->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>hadoop100,hadoop101,hadoop102</value>
    </property>
    <!-- ZooKeeper快照的存储位置 -->
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/export/server/apache-zookeeper-3.6.0-bin/data</value>
    </property>
    <!--  V2.1版本,在分布式情况下, 设置为false -->
    <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>
        <property>
            <name>phoenix.schema.isNamespaceMappingEnabled</name>
            <value>true</value>
        </property>

</configuration>

注意:由于 Zookeeper 集群地址端口号的设置与默认值一致,因此可以不添加此参数:hbase.zookeeper.property.clientPort.

2.3.3 配置 regionservers

在完全分布式模式下,需要修改 /conf 目录下的 regionservers 文件。此文件罗列了所有 Region 节点服务器的主机名,HBase 的运维脚本会依次迭代访问每一行来启动所有的 Region 节点服务器进程,跟 Hadoop 的 slaves 配置文件作用类似。

根据规划,添加 Region 节点服务器的主机名至 regionservers 配置文件中:

hadoop100
hadoop101
hadoop102

注意:该文件中添加的内容,结尾不允许有空格,且文件中不允许有空行。

2.3.4 替换 Hadoop jar 包

由于 HBase 依赖于 Hadoop,因此 HBase 配套发布了 Hadoop 的 jar 包文件在其 lib 目录下。该套装 jar 包仅用于本地模式部署,在分布式模式下,Hadoop 下的 jar 包必须和 HBase 下的版本一致,若版本不匹配,会在 HBase 的运行过程中产生各种各样的问题。

HBase 下的 Hadoop jar 包替换方法:

    1. 查看 HBase 的 Hadoop jar 包
      执行以下命令查看 HBase 的 /lib 目录下的 Hadoop jar 包:
ls -rtl /opt/modules/hbase-2.4.8/lib/hadoop*
Hbase——HBase 安装及部署配置,第5张
查看 HBase 的 Hadoop jar 包

可以看到,HBase 下的 Hadoop jar 包的版本是 2.10.0, 而我们使用的 Hadoop 版本是 2.10.1, 版本不一致,因此需要进行替换。

    1. 删除 HBase 的 Hadoop jar 包
      执行以下命令,删除掉 HBase 下的所有 Hadoop 相关的 jar 包:
rm -rf /opt/modules/hbase-2.4.8/lib/hadoop*.jar
    1. 拷贝 Hadoop 下的 jar 包到 HBase
      执行以下命令,拷贝所有 Hadoop 2.10.1 版本下的 jar 包到 HBase 下进行版本统一:
find /opt/modules/app/hadoop-2.10.1/share/hadoop/ -name "hadoop*jar" | xargs -i cp {} /opt/modules/hbase-2.4.8/lib/

完成后进入 /lib 目录查看 Hadoop 的 jar 包版本是否已经统一。

2.3.5 创建 HA 配置文件(可选)

若使用 HA 完全分布式模式来部署 HBase, 还需要在 /conf 目录下创建 backup-masters 配置文件,文件中添加备份 HMaster 节点的主机名,每个主机名占一行,以实现 HMaster 的高可用。

hadoop102
hadoop103

2.4 分发文件

在 hadoop100 机器上完成 HBase 的安装及配置后,将 HBase 文件分发到另外两台机器上,并创建 Hadoop 配置文件软连接及添加环境变量。

2.4.1 分发 HBase 文件

使用 scp 安全拷贝的方式,将 hadoop100 上的 HBase 文件分发给另外两台机器:

scp -r /opt/modules/hbase-2.4.8/ hadoop@hadoop101:/opt/modules/
scp -r /opt/modules/hbase-2.4.8/ hadoop@hadoop102:/opt/modules/

分发完成后登录另外两台机器进行检查。

2.4.2 配置 Hadoop 参数文件

因为 HBase 集群需要读取 Hadoop 的 core-site.xml 及 hdfs-site.xml 配置文件信息,所以需要在三台机器上执行以下命令,在相应的目录创建这两个配置文件的软连接:

ln -s /opt/modules/app/hadoop-2.10.1/etc/hadoop/core-site.xml  /opt/modules/hbase-2.4.8/conf/core-site.xml
ln -s /opt/modules/app/hadoop-2.10.1/etc/hadoop/hdfs-site.xml  /opt/modules/hbase-2.4.8/conf/hdfs-site.xml
Hbase——HBase 安装及部署配置,第6张
创建 Hadoop 配置文件软连接

当然也可以复制这两个文件到 HBase 的 /conf 目录下,但这样每当修改了 Hadoop 的配置文件后都得在 HBase 下再修改一次。

2.4.3 添加 HBase 环境变量

在三台机器上编辑环境变量 /etc/profile 文件,追加 HBase 的环境变量:

##HBASE_HOME
export HBASE_HOME=/opt/modules/hbase-2.4.8
export PATH=$PATH:$HBASE_HOME/bin

执行以下命令使环境变量配置生效:

source /etc/profile

检查环境变量配置是否成功:


Hbase——HBase 安装及部署配置,第7张
检查 HBase 环境变量配置

当然也可以使用分发文件的方式,配置 hadoop100 机器上的环境变量后将配置文件分发至其它机器上。

2.5 启动 HBase

由于 HBase 需要依赖于 Hadoop 及 Zookeeper 集群,因此在启动 HBase 之前需要确保 Hadoop 及 Zookeeper 已启动并正常运行。

2.5.1 独立启动 Zookeeper

由于设置了 HBASE_MANAGES_ZK 的值为 false, 需要运行不被 HBase 托管的独立的 Zookeeper 集群,因此需要独立启动 Zookeeper 集群,若已启动可忽略此步骤。

zk.sh start

2.5.2 启动 Hadoop 集群

  • 初次启动hdfs集群,需要格式化namenode
hdfs namenode -format

之后进入/usr/local/hadoop/sbin目录,执行命令

./start-dfs.sh 

2.5.3 启动 HBase

HBase 的启动方式跟 Hadoop 类似,也有两种方式,一种是单机模式启动,一种是集群模式启动。

    1. 单机模式启动
      在主节点 hadoop100 上执行以下命令,启动 HMaster 及 HRegionServer 服务:
hbase-daemon.sh start master
hbase-daemon.sh start regionserver

在从节点 hadoop101 及 hadoop102 上分别执行以下命令,启动 HRegionServer 服务:

hbase-daemon.sh start regionserver
    1. 集群模式启动
      在主节点机器 hadoop100 上执行以下命令:
start-hbase.sh

HBase 会进行集群群起,在 hadoop100 上启动 HMaster 及 HRegionServer 服务,在 hadoop101 及 hadoop102 上自动启动 HRegionServer 服务。


Hbase——HBase 安装及部署配置,第8张
HBase 集群启动情况(异常)

从上图看到,启动过程中检测到 HBase 下的 slf4j-log4j12 jar 包与 Hadoop 下的版本不一致造成 jar 包冲突,这是 Hadoop 生态下各组件共存时经常会发生的问题。解决方法是将其中一个 jar 包删除或重命名,这里修改 HBase 下的 jar 包名字:

mv /opt/modules/hbase-2.4.8/lib/client-facing-thirdparty/slf4j-log4j12-1.7.30.jar slf4j-log4j12-1.7.30.jar-bak

在三台机器上使用以下命令停止 HRegionServer 服务,再重新启动 HBase:

hbase-daemon.sh stop regionserver

可以看到已经能正常启动了:


Hbase——HBase 安装及部署配置,第9张
HBase 集群启动情况(正常)
  • 服务进程消失问题:
    在启动 HBase 后查看 jps, HMaster 服务进程存在,但过了若干分钟后,HMaster 进程自动消失了!

查看日志发现抛 "Failed to become active master" 异常,最后无法写入 Zookeeper 文件。估计是由于 nn1 处于 standby 状态,配置没有生效造成的。重新启动 HDFS 集群,再启动 HBase, 问题得到解决。

Hbase——HBase 安装及部署配置,第10张
HMaster 服务进程消失排查

启动完成后记得使用 jps 进行检查,确保主节点上运行有 HMaster 及 HRegionServer 服务进程,从节点上运行有 HRegionServer 服务进程。

2.5.4 查看 Web 页面

使用 Master 机器的地址(端口号默认为 16010)登录 HBase 的 Web 客户端页面,可查看 HBase 的各个 RegionServer 状态及表数据等信息:


Hbase——HBase 安装及部署配置,第11张

至此,HBase 的安装部署成功完成。

参考:
https://cloud.tencent.com/developer/article/1936184

https://blog.csdn.net/qq_42881421/article/details/124196071

https://www.cnblogs.com/smartloli/p/4513767.html

http://eureka.kdyzm.cn/post/130

https://blog.csdn.net/weixin_43339889/article/details/128755731


https://www.xamrdz.com/backend/3v41941253.html

相关文章: