HBase学习

网友投稿 260 2022-11-15

HBase学习

一、HBase

一)HBase的架构

基于 master、slave 这种主、从模式的,在主节点运行 HMaster 服务,而在从节点运行 HRegionServer 服务。HMaster 作为一个管理节点,主要实现对 RegionServer 的监控、处理 RegionServer 故障转移、处理元数据的变更、处理 region 的分配或转移、在空闲时间进行数据的负载均衡、通过 ZooKeeper 发布自己的位置给客户端等功能。而 HRegionServer 负责 table 数据的实际读写,管理 Region。在 HBase 分布式集群中,HRegionServer 一般跟 DataNode 在同一个节点上,目的是实现数据的本地性,提高读写效率。

HBase 依赖于 HDFS 用于存储数据,所以在部署 HBase 时,需要 Hadoop 环境。下面就介绍下如何将 HBase 整合到 Hadoop 集群中。

1、HBase 和 Hadoop 版本的选择

二)完全分布式 HBase 部署过程

HBase 的部署过程,也需要对系统进程基础优化、安装 JDK、ZooKeeper、关闭防火墙等基础操作。由于这个过程我已经在 Hadoop 集群配置完成,因此这里略去,直接进入 HBase 的配置过程。

1、在每个集群节点添加 HBase 环境变量

在 HBase 集群的每个节点上修改 Hadoop 用户下的 .bash_profile 文件,添加 HBase 环境变量,内容如下:

export HBASE_HOME=/opt/bigdata/hbase/currentexport HBASE_CONF_DIR=/etc/hbase/confexport PATH=$PATH:$HBASE_HOME/bin

注意,此文件中之前的 Hadoop 环境变量信息一定要保留,因为 HBase 也会去读取 Hadoop 的环境变量内容。这里我将 HBase 的配置文件路径设置为 /etc/hbase/conf,一会我要创建这个路径。

最后,执行 source 命令使其生效:

source /home/hadoop/.bash_profile

2、配置 HBase 集群

HBase 可以运行在单机模式下,也可以运行在集群模式下。单机模式主要用来进行功能测试,不能用于生产环境,因此,这里我们部署的是 HBase 集群模式。

HBase 的配置文件默认位于 HBase 安装目录下的 conf 子目录中,将这个 conf 目录复制一份到 /etc/hbase 目录中,当然要事先创建好 /etc/hbase 目录。接着,需要修改三个配置文件,分别是 hbase-env.sh、hbase-site.xml 及 regionservers 文件,同时还要新增 2 个文件,即 HDFS 的 hdfs-site.xml 及 backup-masters 文件。

首先修改 hbase-env.sh 文件,此文件用来设置 HBase 的一些 Java 环境变量信息,以及 JVM 内存信息,在此文件中添加如下内容:

export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -Xmx10g -XX:ReservedCodeCacheSize=256m"export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xmx20g -Xms20g -Xmn256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:ReservedCodeCacheSize=256m"HBASE_MANAGES_ZK=false

第一个是配置 HBase master 的 JVM 内存大小,这个根据服务器物理内存大小和应用场景来定,我这里配置 10GB。

第二个是设置每个 RegionServer 进程的 JVM 内存大小,该内存尽量要设置大一些,如果是单独运行 RegionServer 的服务器,可设置物理内存的 80% 左右。

第三个是设置跟 ZooKeeper 相关的配置,如果 HBASE_MANAGES_ZK 为 true,则表示由 HBase 自己管理 ZooKeeper,不需要单独部署 ZooKeeper。如果为 false,则表示不使用 HBase 自带的 ZooKeeper,而使用独立部署的 ZooKeeper。这里设置为 false,也就是独立部署 ZooKeeper 集群,该 ZooKeeper 集群仍然使用之前 Hadoop 集群使用的那个 ZooKeeper 即可。

接着,修改 hbase-site.xml 文件,要添加的参数如下:

hbase.rootdir hdfs://bigdata/hbase The directory shared by RegionServers. hbase.cluster.distributed true hbase.unsafe.stream.capability.enforce false hbase.zookeeper.quorum slave001.cloud,slave002.cloud,hadoopgateway.cloud hbase.client.scanner.caching 100 hbase.regionserver.global.memstore.upperLimit 0.3 hbase.regionserver.global.memstore.lowerLimit 0.25 hfile.block.cache.size 0.5 hbase.master.maxclockskew 180000 Time difference of regionserver from master hbase.client.scanner.timeout.period 300000 default is 60s zookeeper.session.timeout 1800000 default is 90s hbase.rpc.timeout 300000 default is 60s hbase.hregion.memstore.flush.size 268435456 default is 128M hbase.hregion.max.filesize 6442450944 hbase.regionserver.handler.count 100 default is 30

3、Hbase的参数

hbase.rootdir:指定 RegionServer 的共享目录,用来持久化 HBase,这个 URL 是 HDFS 上的一个路径。需特别注意的是,hbase.rootdir 里面的 HDFS 地址是要跟 Hadoop 的 core-site.xml 里面的 fs.defaultFS 参数设置 HDFS 的 IP 地址或者域名、端口必须一致。hbase.cluster.distributed:用来设置 HBase 的运行模式,值为 false 表示单机模式,为 true 表示分布式模式。hbase.unsafe.stream.capability.enforce:此参数是为了解决文件系统不支持 hsync 报错而造成启动失败的问题,究其原因,是因为二进制版本的 HBase 编译环境是 Hadoop2.x,而 Hadoop2.x 版本不支持 hsync。hbase.zookeeper.quorum:设置 ZooKeeper 独立集群的地址列表,用逗号分隔每个 ZooKeeper 节点,必须是奇数个。hbase.client.scanner.caching:这是个优化参数,表示当调用 Scanner 的 next 方法,而 当值又不在缓存里的时候,从服务端一次获取的行数。越大的值意味着 Scanner 会快一些,但是会占用更多的内存。hbase.regionserver.global.memstore.upperLimit:设置单个 region server 的全部 memtores 最大值。超过这个值,一个新的 update 操作会被挂起,强制执行 flush 操作。hbase.regionserver.global.memstore.lowerLimit:此参数跟上面这个参数相关联,表示强制执行 flush 操作的时候,当低于这里设置的值时,flush 就会停止,默认是堆大小的 35%。如果这个值和 hbase.regionserver.global.memstore.upperLimit 相同,则意味着当 update 操作因为内存限制被挂起时,会尽量少的执行 flush 操作。hfile.block.cache.size:表示分配给 HFile/StoreFile 的 block cache 占最大堆(-Xmx setting)的比例,默认是 20%,设置为 0 就是不分配。hbase.master.maxclockskew:HBase 集群各个节点可能出现和 HBase master 节点时间不一致,这会导致 RegionServer 退出,通过设置此参数,可以增大各节点的时间容忍度,默认是 30s,此值不要太大,毕竟时间不一致是不正常现象,可将所有节点和内网时间服务器做同步,也可以和外网时间服务器进行同步。hbase.client.scanner.timeout.period:该参数表示 HBase 客户端发起一次 scan 操作的 RPC 调用至得到响应之间总的超时时间。zookeeper.session.timeout:设置 HBase 和 ZooKeeper 的会话超时时间。HBase 把这个值传给 ZooKeeper 集群,单位是毫秒。hbase.rpc.timeout:设置 RPC 的超时时间,默认 60s。hbase.hregion.memstore.flush.size:设置 memstore 的大小,当 memstore 的大小超过这个值的时候,会 flush 到磁盘。hbase.regionserver.handler.count:此参数表示 RegionServers 受理的 RPC Server 实例数量。对于 Master 来说,这个属性是 Master 受理的 handler 数量,然后修改第三个文件 regionservers,将 regionservers 节点的主机名添加到此文件即可,一行一个主机名,根据之前规划

yarnserver.cloudslave001.cloudslave002.cloud

配置 HBase 要修改的文件就这三个,接下来,还需要将 Hadoop 集群中 HDFS 的配置文件 hdfs-site.xml 软连接或者复制到 /etc/hbase/conf 目录下,因为 HBase 会读取 HDFS 配置信息。

最后,还需要新增一个配置文件 backup-masters,用来实现 HBase 集群的高可用,为了保证 HBase 集群的高可靠性,HBase 支持多 Backup Master 设置,当 Active Master 故障宕机后,Backup Master 可以自动接管整个 HBase 的集群。要实现这个功能,只需要在 HBase 配置文件目录下新增一个文件 backup-masters 即可,在此文件中添加要用做 Backup Master 的节点主机名,可以添加多个,一行一个。

这里我将 yarnserver.cloud 主机作为 HBase master 的备用节点,因此,backup-masters 文件的内

yarnserver.cloud

4、启动与维护 HBase 集群

所有配置完成后,将配置文件复制到 HBase 集群的所有节点上,然后就可以起到 HBase 集群服务了。下面我来为你讲解它的具体步骤。

启动 HMaster 服务

执行如下命令启动 HMaster 服务:

[hadoop@nnmaster conf]$/opt/bigdata/hbase/current/bin/hbase-daemon.sh start master[hadoop@nnmaster conf]$ jps12993 NameNode19124 HMaster19304 Jps13198 DFSZKFailoverController

由于配置了 HMaster 的高可用服务,因此需要在 nnmaster.cloud 节点和 yarnserver.cloud 节点都启动 HMaster 服务。服务启动后,可以看到有个 HMaster 进程,表示 HMaster 服务启动成功。

启动 HRegionServer 服务

按照上面的规划,需要在 yarnserver.cloud、slave001.cloud 和 slave002.cloud 节点启动 regionserver 服务。执行如下命令启动 HRegionServer 服务:

[hadoop@slave001 conf]$ /opt/bigdata/hbase/current/bin/hbase-daemon.sh start regionserver[hadoop@slave001 conf]$ jps32435 QuorumPeerMain3444 HRegionServer6389 Jps614 DataNode3930 NodeManager32702 JournalNode

服务启动后,会看到有个 HRegionServer 进程,表示 regionserver 服务器的成功。

所有服务启动完成后,可以查看 HBase 的 Web 页面,访问 [16010](16010),其中,16010 是 HMaster 的默认 Web 端口

从图中可以看出,活跃的 HMaster 和备用的 HMaster,以及 regionserver 节点的状态信息。

5、测试 HBase 的基础功能与 HA 功能

HBase 集群服务启动后,我们可以在 HBase client 主机上(hadoopgateway.cloud)进入 HBase 命令行,执行如下命令:

复制

[hadoop@hadoopgateway ~]$ hbase shell

创建的表默认会存储在 HDFS 的 /hbase 路径下,可以查看是否生成相关目录和文件。

上面我们配置了 HMaster 的 HA,要测试是否实现了 HA 功能,只需要停止目前处于 active 状态的 HMaster 服务,然后通过 HMaster 的 16010 端口页面观察是否自动实现了主、备切换。

从图中可以看出,yarnserver.cloud 节点自动变成了主 HMaster,而没有 Backup Masters 节点了。当重新启动 nnmaster.cloud 节点的 HMaster 服务,此节点将变成 Backup Masters 节点。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring的@Value注入复杂类型(通过@value注入自定义类型)
下一篇:CDH安装
相关文章

 发表评论

暂时没有评论,来抢沙发吧~