1. HBase简介
1.1 HBase定义
HBase数据模型的关键在于 稀疏、分布式、多维、排序 的映射。其中映射 map指代非关系型数据库的 key-Value结构。
1.2 HBase数据模型
1)Name Space
命名空间,类似于关系型数据库的database 概念,每个命名空间下有多个表。HBase 两个自带的命名空间,分别是hbase 和default,hbase 中存放的是HBase 内置的表,default库是用户默认使用的命名空间。
2)Table
类似于关系型数据库的表概念。不同的是, HBase 定义表时只需要声明列族即可,不需要声明具体的列。 因为数据存储是稀疏的,所有往HBase写入数据时,字段可以动态 、按需指定 。因此,和关系型数据库相比, HBase 能够轻松应对字段变更的场景。
3)Row
HBase表中的每行数据 都由一个 RowKey 和多个 Column (列)组成,数据是按照 RowKey
的字典顺序存储的 ,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重
要。
4)Column
HBase中的每个列都由 Column Family 列族和Column Qualifier (列限定符进行限定 ,例如 info:name, info:age 。建表时,只需指明列族,而列限定符无需预先定义。
5)Time Stamp
用于标识数据的不同版本(version),每条数据写入时,系统会自动为其加上该字段,其值为写入 HBase 的时间。
6)Cell
由 {rowkey, column Family:column Qualifier, timestamp} 唯一确定的单元。 cell中的数据全部是字节码形式存贮。
1.3 HBase 基本架构
架构角色:
1)Master
实现类为HMaster,负责监控集群中所有的 RegionServer 实例。主要作用如下:
(1)管理元数据表格hbase:meta,接收用户对表格创建修改删除的命令并执行;
(2)监控region 是否需要进行负载均衡,故障转移和region 的拆分。
通过启动多个后台线程监控实现上述功能:
① LoadBalancer 负载均衡器
周期性监控region 分布在regionServer 上面是否均衡,由参数hbase.balancer.period 控
制周期时间,默认5 分钟。
② CatalogJanitor 元数据管理器
定期检查和清理hbase:meta 中的数据。meta 表内容在进阶中介绍。
③ MasterProcWAL master 预写日志处理器
把master 需要执行的任务记录到预写日志WAL 中,如果master 宕机,让backupMaster
读取日志继续干。
2)Region Server
Region Server 实现类为HRegionServer,主要作用如下:
(1)负责数据cell 的处理,例如写入数据put,查询数据get 等
(2)拆分合并region 的实际执行者,有master 监控,有regionServer 执行。
3)Zookeeper
HBase通过 Zookeeper来做 master的高可用、记录 RegionServer的部署信息 、 并且存储有 meta表的位置信息 。
HBase对于数据的读写操作时直接访问 Zookeeper的,在 2.3版本推出Master Registry模式,客户端可以直接访问 master。 使用此功能,会加大对 master的压力,减轻对 Zookeeper的压力。
4)HDFS
HDFS为 Hbase提供最终的底层数据存储服务,同时为 HBase提供高容错的支持。
2. HBase快速入门
2.1 HBase安装部署
2.1.1 Zookeeper正常部署
2.1.2 Hadoop正常部署
2.1.3 HBase安装
1)解压 Hbase安装包到指定目录
tar zxvf hbase-2.4.11-bin.tar.gz -C /opt/module/
mv /opt/module/hbase-2.4.11 /opt/module/hbase
2)配置环境变量
vim /etc/profile.d/my_env.sh
添加
#HBASE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=$PATH:$HBASE_HOME/bin
2.1.4 HBase的配置文件
1)hbase-env.sh修改内容 ,可以添加到最后
export HBASE _MANAGES_ ZK=false
这个配置的作用是禁用 HBase 自带的 Zookeeper 。也就是说,HBase 将不再管理 Zookeeper,而是使用独立的 Zookeeper 。这通常在使用独立的 Zookeeper 集群时需要设置,以确保 HBase 和 Zookeeper 之间的通信正常进行。
2) hbase-site.xml修改内容:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop102,hadoop103,hadoop104 </value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/export/zookeeper</value>
<description> 记得修改 Z K 的配置文件, ZK 的信息不能保存到临时文件夹
</description>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop101:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>这个配置的作用:这个配置用于指定HBase集群是否是分布式的。如果设置为true,则表示HBase集群是分布式的,即由多个RegionServer组成的集群。如果设置为false,则表示HBase集群是单机模式,只有一个RegionServer。在分布式模式下,HBase可以实现数据的高可用性和横向扩展。
3)regionservers
hadoop102
hadoop103
hadoop104
4)解决 HBase和 Hadoop 的 log4j 兼容性问题 ,修改HBase的 jar包,使用Hadoop的jar包
mv /opt/module/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar /opt/module/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar.bak
2.1.5 HBase远程发送到其他节点
xsync hbase/
2.1.6 HBase服务的启动
1)单点启动
hbase-daemon.sh start master
hbase-daemon.sh start regionserver
2)群起
start-hbase.sh
3)停止
stop-hbase.sh
或
hbase-daemon.sh stop master
hbase-daemon.sh stop regionserver
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true 这个参数的含义
这个参数的含义是禁用HBase对Hadoop Classpath的查找。在HBase中,如果没有设置这个参数,HBase会自动查找Hadoop的Classpath,将其添加到HBase的Classpath中。但是,有时候Hadoop的Classpath可能会包含不必要的依赖,或者与HBase中的某些依赖发生冲突,导致HBase无法正常启动。因此,可以通过设置这个参数来禁用HBase对Hadoop Classpath的查找,从而避免这些问题的出现。
这个参数解决的问题:
2.1.7 查看HBase页面
启动成功后,可以通过“host:port”的方式来访问 HBase管理页面,例如:
http://hadoop102:16010
2.1.8 高可用
在HBase中 HMaster负责监控 HRegionServer的生命周期,均衡 RegionServer的负载,
如果 HMaster挂掉了,那么整个 HBase集群将陷入不健康的状态,并且此时的工作状态并不
会维持太久。所以 HBase支持对 HMaster的高可用配置。
1)关闭HBase集群
2)在conf目录下创建backup-masters文件
touch conf/backup-masters
3)在 backup-masters文件中配置高可用 HMaster节点
echo hadoop103 > conf/backup-masters
4)将整个conf目录分发到其他节点
5)重启HBase
2.2 HBase Shell操作
HBase原生Shell命令汇总
1. General组
1.1. 查看集群状态:status
显示群集状态。可以是“摘要”、“简单”、“详细”或“复制”,默认为“摘要”。参数分别是“summary”、“simple”、“detailed”和“replication”。该命令用法如下:
hbase> status
hbase> status 'simple'
hbase> status 'summary'
hbase>c status 'detailed'
hbase> status 'replication'
hbase> status 'replication', 'source'
hbase> status 'replication', 'sink'
1.2. 查看表的操作方法:table_help
用户可以用过“create”创建表,然后通过“put”、“get”、“scan”等命令来操作表。创建、删除、操作表的详细内容在后面的内容中进行详细介绍。用法如下:
hbase> table_help
1.3. 查看HBase的版本信息:version
使用该命令可以输出HBase的版本信息。用法如下:
hbase> version
1.4. 查看当前用户:whoami
使用该命令可以查看当前用户。用法如下:
Hbase> whoami
2. Namespace组
一个集群中可以创建若干名称空间,用户可以在不同通名称空间下创建表,以方便表的管理。
2.1. 创建命名空间:create_namespace
用户可以通过自定义命名空间名作为第一个参数来创建新的命名空间,在创建命名空间的同时能够可选的在第二个参数位置自定义命名空间的“属性-值”键值对。用法如下:
hbase> create_namespace '命名空间名'
hbase> create_namespace '命名空间名', {'自定义属性名'=>'自定义属性值'}
2.2. 显示命名空间列表:list_namespace
该命令用于列出HBase中所有的命名空间,可以可选的在第一个参数位置输入正则表达式来对列出的结果进行筛选。用法如下:
hbase> list_namespace
hbase> list_namespace '正则表达式'
2.3. 修改/删除命名空间属性:alter_namespace
该命令可以用来添加、修改和删除命名空间属性,可以同时添加、修改或删除命名空间的多个属性。用法如下:
添加或修改命名空间属性:
hbase> alter_namespace '命名空间名', {METHOD => 'set', '属性名' => '属性值'}
删除命名空间属性:
hbase> alter_namespace '命名空间名', {METHOD => 'unset', NAME => '属性名'}
2.4. 描述指定命名空间:describe_namespace
描述命名空间,返回内容包括命名空间的名字、属性等。用法如下:
hbase> describe_namespace '命名空间名'
2.5. 显示命名空间下的表:list_namespace_tables
显示指定指定命名空间下的所有表的列表。用法如下:
hbase> list_namespace_tables '命名空间名'
2.6. 删除命名空间:drop_namespace
删除指定的命名空间。需要注意的是,只有空的命名空间是可以删除的,因此在删除命名空间之前,必须保证该命名空间下的表均已删除。用法如下:
h