0


HBase 部署及shell操作

HBase 数据库

一、HBase 概述

1.1 HBase 是什么

HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,利用HBase技术可在廉价的PC Server上搭建大规模结构化存储集群。

HBase是Google BigTable的开源实现,与Google的BigIable利用GFS作为其文件存储系统类似,HBase则利用Hadoop的HDFS作为其文件存储系统。Google运行 MapReduce 来处理Bigtable中的海量数据,而HBase则利用 Hadoop的MapReduce来处理HBase中的海量数据Google Bigtable利用Chubby作为协同服务,而HBase则利用Zookeeper作为协同服务。

HBase 的特点

  • 容量巨大:单表可以有百亿行、数百万列。
  • 无模式:同一个表的不同行可以有截然不同的列。
  • 面向列:HBase是面向列的存储和权限控制,并支持列独立索引。
  • 稀疏性:表可以设计得非常稀疏,值为空的列并不占用存储空间。
  • 扩展性:HBase底层文件存储依赖HDFS,它天生具备可扩展性。
  • 高可靠性:HBase提供了预写日志(WAL)和副本(Replication)机制,防止数据丢失。
  • 高性能:底层的LSM(Log-Structured Merge Tree)数据结构和RowKey有序排列等架构上的独特设计,使得HBase具备非常高的写入性能。

二、HBase 模型及架构

2.1 HBase 逻辑模型

在这里插入图片描述

2.2 HBase 数据模型

  • 表 HBase是一种列式存储的分布式数据库,其核心概念是表(Table)。与传统关系型数据库一样,HBase 的表也是由行和列组成,但 Hase同一列可以存储不同时刻的值,同时多个列可以组成一个列簇(Column Family),这种组织形式主要是出于HBase存取性能的考虑。
  • 行键 Rowkey 既是 HBase 表的行键,也是 HBase 表的主键。HBase 表中的记录是按照RowKey的字典顺序进行存储的。在HBase中,为了高效地检索数据,需要设计良好的Rowkey来提高查询性能。因为Rowkey 会被几余存储,所以长度不宜过长,Rowkey 过长将会占用大量的存储空间同时会降低检索效率。其次 Rowkey 应该尽量均匀分布,避免产生热点问题(大量用户访问集中在一个或极少数节点,从而造成单台节点超出自身承受能力)。另外需要保证Rowkey的唯一性。
  • 列簇 HBase表中的每个列都归属于某个列簇,一个列簇中的所有列成员有着相同的前缀。比如,列anchor:cnnsi.com和anchor:my.look.ca都是列簇anchor的成员。列簇是表的schema的-部分,必须在使用表之前定义列簇,但列却不是必需的,写数据的时候可以动态加入。一般将经常一起查询的列放在一个列簇中,合理划分列簇将减少查询时加载到缓存的数据,提高查询效率,但也不能有太多的列簇,因为跨列簇访问是非常低效的。
  • 单元格 HBase中通过RowKey和Column确定的一个存储单元称为单元格(Ce11)。每个单元格都保存着同一份数据的多个版本,不同时间版本的数据按照时间顺序倒序排序,最新时间的数据排在最前面,时间截是 64 位的整数,可以由客户端在写入数据时赋值,也可以由RegionServer自动赋值。

2.3 HBase 物理模型

2.3.1 列簇物理模型

在这里插入图片描述

2.3.2 Rowkey 字段排序

在这里插入图片描述

2.3.3 Region 存储到不同节点

一个表包含不同的Region,一个 Region 包含不同列簇,一个列簇包含不同的列
在这里插入图片描述

2.3.4 Region 结构

在 Region 中,数据先写在内存 memStore,然后再保存在磁盘文件(HDFS)中;一个 Store 表示一个列簇
在这里插入图片描述

2.4 HBase 基本架构

在这里插入图片描述

  • HMaster:管理表的增删改查、负责负载均衡
  • Zookeeper:监听HRegionServer的上下线,HMaster主备切换
  • HRegionServer:负载客户端的读写请求、预写日志、管理 HRegion
  • HRegion:管理 Store,写入内存,写入磁盘文件
  • HFile:内容写入 HDFS

三、搭建 HBase 分布式集群

3.1 HBase 集群规划

HBase底层数据存储在HDFS之上,所以构建HBase集群之前需要确保HDFS集群正常运行。为了确保数据的本地性,HBase集群安装选择跟HDFS集群共享节点。

3.1.1 主机规划

仍然选择hadoop1、hadoop2和hadoop3节点安装部署HBase集群,那么相关角色规划如下:
hadoop1hadoop2hadoop3NameNode是是DataNode是是是Zookeeper是是是Hmaster是是HRegionServer是是是

3.1.2 软件规划

HBase集群的安装需要考虑与Hadoop版本的兼容性问题,否则HBase可能无法正常运行,其相关软件版本如下:
软件版本位数说明JDK1.864稳定Zookeeper3.8.4稳定hadoop2.10.2稳定HBase2.1.0与Hadoop兼容

3.1.3 用户规划

HBase集群安装用户保持与Hadoop集群安装用户一致即可,其用户规划如下:
节点用户组用户hadoop1rootroothadoop2rootroothadoop3rootroot

3.1.4 数据目录规划

在正式安装HBase之前,需要规划好所有的软件目录和数据存放目录,便于后期的管理与维护。HBase目录规划如下:
目录名称目录路径HBase 软件安装目录/usr/localRegionServer 共享目录hdfs://mycluster/hbaseZookeeper 数据目录/usr/local/data/zookeeper

3.2 HBase 集群安装配置

3.2.1 下载上传解压

下载地址:https://archive.apache.org/dist/hbase/

上传:
在这里插入图片描述
解压:

[root@hadoop1 local]# tar -zxvf hbase-2.1.0-bin.tar.gz 

创建软连接:

[root@hadoop1 local]# ln -s hbase-2.1.0 hbase

在这里插入图片描述

3.2.2 修改配置文件

进入hadoop1节点的conf目录,修改HBase集群相关配置文件

3.2.2.1 修改hbase-site.xml配置文件

通过修改hbase-site.xml配置文件进行个性化配置,修改内容如下所示

[root@hadoop1 hbase]# vim /usr/local/hbase/conf/hbase-site.xml 

添加如下内容(

记得把注释去掉,以免不能正常启动

):

<configuration><property><name>hbase.zookeeper.quorum</name><value>hadoop1,hadoop2,hadoop3</value><description>指定Zookeeper集群节点</description></property><property><name>hbase.zookeeper.property.dataDir</name><value>/usr/local/zookeeper/data/zkdata</value><description>指定Zookeeper数据存储目录</description></property><property><name>hbase.zookeeper.property.clientPort</name><value>2181</value><description>指定Zookeeper端口号</description></property><property><name>hbase.rootdir</name><value>hdfs://mycluster/hbase</value><description>指定HBase在HDFS上的根目录</description></property><property><name>hbase.cluster.distributed</name><value>true</value><description>指定true为分布式集群部署</description></property><property><name>hbase.unsafe.stream.capability.enforce</name><value>false</value><description>使用本地文件系统设置为false,使用hdfs设置为true</description></property></configuration>

在这里插入图片描述

3.2.2.2 修改regionservers配置文件

修改regionservers配置文件添加RegionServer节点角色,修改内容如下:

[root@hadoop1 hbase]# vim /usr/local/hbase/conf/regionservers 

添加如下内容(

不要添加空格或最后加换行

):

hadoop1
hadoop2
hadoop3
3.2.2.3 修改backup-masters配置文件

修改backup-masters配置文件(

可能不存在此文件

)添加备用节点,修改内容如下:

[root@hadoop1 hbase]# vim /usr/local/hbase/conf/backup-masters

添加内容如下:

hadoop2

因为HBase的HMaster角色需要配置高可用,所以这里选择hadoop2为备用节点。

3.2.2.4 修改hbase-env.sh配置文件

修改hbase-env.sh配置文件添加相关环境变量,修改内容如下:

[root@hadoop1 hbase]# vim /usr/local/hbase/conf/hbase-env.sh 

修改如下内容(

注释部分记得去掉

):

# 配置jdk安装路径
exportJAVA_HOME=/usr/local/jdk
# 使用独立的Zookeeper集群
exportHBASE_MANAGES_ZK=false

3.2.3 配置 HBase 环境变量

添加HBase环境变量,添加内容如下

[root@hadoop1 hbase]# vim /etc/profile

添加如下内容:

# 添加 HBase 环境变量
HBASE_HOME=/usr/local/hbase
PATH=$HBASE_HOME/bin:$PATHexportHIVE_HOMEPATH

更新环境变量

[root@hadoop1 hbase]# source /etc/profile

3.2.4 配置文件同步到集群其他节点

将hadoop1节点中配置好的HBase安装目录,分发给hadoop2和hadoop3节点,因为HBase集群配置都是一样的。这里使用工具 deploy.sh 和 runRemoteCmd.sh 命令进行分发(ZooKeeper 集群的详细部署的4.1章节),具体操作如下:

[root@hadoop1 tools]# deploy.sh /usr/local/hbase-2.1.0/usr/local/ slave
[root@hadoop1 tools]# deploy.sh /etc/profile /etc slave
[root@hadoop1 tools]# runRemoteCmd.sh "ln -s /usr/local/hbase-2.1.0 /usr/local/hbase" slave

3.3 启动 HBase 集群服务

3.3.1 启动 Zookeeper 集群

[root@hadoop1 tools]# runRemoteCmd.sh "/usr/local/zookeeper/bin/zkServer.sh start" all

在这里插入图片描述

3.3.2 启动 HDFS 集群

[root@hadoop1 tools]# /usr/local/hadoop/sbin/start-dfs.sh

在这里插入图片描述

3.3.3 启动 HBase 集群

[root@hadoop1 tools]# /usr/local/hbase/bin/start-hbase.sh 

日志提示报错:
在这里插入图片描述
上面提示是缺少 htrace.SamplerBuilder类,如下操作再重新启动

[root@hadoop1 client-facing-thirdparty]# cp /usr/local/hbase/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar /usr/local/hbase/lib/

在这里插入图片描述

3.3.5 HBase Web 界面

在这里插入图片描述

四、HBase shell 操作

进入 HBbase shell

[root@hadoop1 hbase]# /usr/local/hbase/bin/hbase shell

在这里插入图片描述

  • 创建 course 表
hbase(main):005:0> create 'course','cf'

在这里插入图片描述

  • 查看 HBase 所有表
hbase(main):006:0> list
  • 查看 course 表结构
hbase(main):008:0> describe 'course'

在这里插入图片描述

  • 向 course 表插入数据
put 'course','001','cf:cname','hbase'
put 'course','001','cf:score','95'
put 'course','002','cf:cname','sqoop'
put 'course','002','cf:score','85'
put 'course','003','cf:cname','flume'
put 'course','003','cf:score','98'

在这里插入图片描述

  • 查询 course 表中的所有数据
hbase(main):015:0> scan 'course'

在这里插入图片描述

  • 根据行键查询 course 表 - 查询整条记录
hbase(main):023:0>get'course','001'

在这里插入图片描述

- 查询一个列簇数据
hbase(main):025:0>get'course','001','cf'

在这里插入图片描述

  • 查询列簇中其中的一个列
hbase(main):026:0>get'course','001','cf:cname'

在这里插入图片描述

  • 更新 course 表数据
hbase(main):027:0> put 'course','001','cf:score','99'hbase(main):028:0>get'course','001','cf:score'

在这里插入图片描述

  • 查询 course 表总记录
hbase(main):029:0> count 'course'

在这里插入图片描述

  • 删除 course 表数据 - 删除列簇中的一列
hbase(main):031:0>delete'course','003','cf:score'hbase(main):034:0> scan 'course'

在这里插入图片描述

  • 删除整行记录
hbase(main):033:0> deleteall 'course','002'hbase(main):034:0> scan 'course'

在这里插入图片描述

  • 清空 course 表
hbase(main):035:0> truncate 'course'hbase(main):036:0> scan 'course'

在这里插入图片描述

  • 删除 course 表
hbase(main):037:0> disable 'course'hbase(main):038:0> drop 'course'

在这里插入图片描述

  • 查看表是否存在
hbase(main):040:0> exists 'course'

在这里插入图片描述


本文转载自: https://blog.csdn.net/slb190623/article/details/141784631
版权归原作者 slb190623 所有, 如有侵权,请联系我们删除。

“HBase 部署及shell操作”的评论:

还没有评论