Hbase——HBase 安装及部署配置

前言

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

搭建Hadoop集群:

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

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

Hadoop 版本

一、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的RegionServer部署在3个DN节点上,HBase的HMaster服务部署在NNA和NNS节点,部署2个HMaster保证集群的高可用性,防止单点问题。下面我们开始配置HBase的相关配置,这里我使用的是独立的ZK,未使用HBase自带的ZK。

二、HBase集群搭建

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 的 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
创建 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 环境变量配置

当然也可以使用分发文件的方式,配置 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 下的 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 后查看 jps, HMaster 服务进程存在,但过了若干分钟后,HMaster 进程自动消失了!

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

HMaster 服务进程消失排查

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

2.5.4 查看 Web 页面

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


至此,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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容