一、HBase介绍
HBase是一个开源的NoSQL数据库,参考的Google的Big Table建模,用Java语言实现的,运行于HDFS文件系统上,为Hadoop提供类似的BigTable的服务。
特点:
- 容量大:在限定某个列的情况下,对于单表存储百亿或者更多的数据都没有性能问题,并且自身能够周期性的将较小的文件合并成大文件以减少对磁盘的访问
- 列存储
- 稀疏性:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏
- 扩展性:横向扩展,不断向集群添加服务器来提供存储空间和性能
- 高可靠性:基于HDFS的多副本机制
二、安装HBase
- JDK8支持 HBase1.4、HBase2.2+、HBase2.3+
- Hadoop3.1.1+支持 HBase2.2+、HBase2.3+
因为我本机的Hadoop版本是3.3.4,所以下载HBase2.3+以上的版本
2.1、安装Zookeeper
因为HBase需要依赖zk,所以需要安装下zk,这边操作的安装伪分布式安装
-
下载地址
-
解压
tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz
-
在software目录下创建zkData目录
mkdir zkData
/root/software/data
-
进入zk的conf目录
mv zoo_sample.cfg zoo.cfg
-
修改zoo.cfg中的dataDir属性
dataDir=/root/software/data
-
进入zk的bin目录,启动服务
./zkServer.sh start
测试链接
2.2、安装HBase
-
下载
-
解压
tar -zxvf hbase-2.5.0-bin.tar.gz
-
进入HBase的conf目录,修改hbase-env.sh的配置,添加jdk版本的配置与hadoop的配置
export JAVA_HOME=/root/software/jdk1.8.0_341
export HADOOP_HOME=/root/software/hadoop-3.3.4
#使用外部的zk来管理
export HBASE_MANAGES_ZK=false
export HBASE_LOG_DIR=/root/log/hbase
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true
-
修改conf目录下的hbase-site.xml配置
<property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.tmp.dir</name> <value>/root/data/hbase/tmp</value> </property> <property> <name>hbase.unsafe.stream.capability.enforce</name> <value>false</value> </property> <!-- 指定hbase在HDFS上存储的路径 --> <property> <name>hbase.rootdir</name> <value>hdfs://bigdata01:9000/hbase</value> </property> <!-- 指定zookeeper的地址,多个用“,”分割 --> <property> <name>hbase.zookeeper.quorum</name> <value>bigdata01</value> </property> <!--hbase在zk上数据根目录znode节点--> <property> <name>zookeeper.znode.parent</name> <value>/hbase</value> </property> <!--设置zk通信端口,不配置也可以,zk默认就是2181 --> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> -
修改regionservers
bigdata01
-
先启动hadoop、zk,进入hbase目录启动hbase
bin/start-hbase.sh
启动之后在浏览器上输入:http://192.168.234.100:16010
停止Hbase命令
bin/stop-hbase.sh
-
删除多余的日志
/root/software/hbase-2.5.0/lib/client-facing-thirdparty里面的日志jar包log4j-slf4j-impl-2.17.2.jar
-
shell命令行链接
hbase shell
三、HBase逻辑存储模型名词解释
-
命名空间NameSpace
类似MySQL中Database这个概念
-
表Table
类似于MySQL中的表的概念
-
行Row
类似于MySQL中行的概念
-
行键RowKey
类似于MySQL中主键。在MySQL中主键不是必须的,但是在HBase中行键在每一行里面都是必须存在的
-
列族ColumnFamily
列族是一系列的集合。在创建表的时候,列族是必须要定义的
-
列Column
类似于MySQL中的列,但是在HBase创建表的时候,列是不需要提前定义的,也不能提前定义。后期在向表中添加数据的时候,动态指定列
-
时间戳Timestamp
属于HBase自带的,不需要在表定义的时候指定。时间戳和这个值是一一对应的,这个值是64位整数,时间戳由HBase自动赋值,也可以由用户显示赋值。针对某个列不同版本的数据会按照时间戳倒序排序,最新的数据排在前面。HBase在查询的时候默认会返回这个列中最新版本的数据
-
数据类型DataType
在MySQL中,数据类型是多种多样的,常见的int\varchar\date等。但是在HBase中,数据类型只有一种,就是字节数组。不管什么数据类型,在HBase中存储的时候,统一都会转化为字节数组
HBase是三维有序存储的,是指RowKey,Column Key(Column Family和Column)和TimeStamp这三个维度是按ASCII码表排序的。先按照RowKey升序排序;RowKey相同则按Column Key升序排序;Row Key、Column Key相同则按Timestamp降序排序
四、HBase常用命令
4.1、进入HBase的目录输入
bin/hbase shell
修改环境变量,加入HBase的路径
vi /etc/profile
export JAVA_HOME=/root/software/jdk1.8.0_341
export HADOOP_HOME=/root/software/hadoop-3.3.4
export HIVE_HOME=/root/software/hive-3.1.3
export HBASE_HOME=/root/software/hbase-2.5.0
export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/lib:$HBASE_HOME/bin:$PATH
source /etc/profile
4.2、创建表
create 'student','info','level'
4.3、查看有哪些表
list
4.4、禁用表
disable 'student'
4.5、验证有没有被禁用
is_disabled 'student'
4.6、启用表
enable 'student'
4.7、验证表是否被启用
is_enabled 'student'
4.8、查看表的详细信息
desc 'student'
4.9、修改表信息
alter 'student',{NAME=>'level',VERSIONS=>'5'}
4.10、增加一列信息
alter 'student','about'
4.11、删除一列信息
alter 'student',{NAME=>'about',METHOD=>'delete'}
但是至少hbase至少需要包含一列
4.12、判断表是否存在
exists 'student'
true代表存在,false代表不存在