HBase: 一个构建在HDFS之上的/分布式的/面向列的开源数据库.
HBase概念:
一个构建在HDFS(高可靠, 有备份)之上的, 分布式的(分而治之, 提高效率), 面向列(不同于其他数据库都是以一行为一条记录)的开源数据库. 由Google BigTable的开源实现, 主要用于海量数据存储, 是hadoop生态圈中很重要的一部分.
HBase表的特点
- 大: 一个表可以有数十亿行, 上百万列.
- 面向列: 在HBase表中数据都是按照列来存储.
- 稀疏: 对于null值, 不占用存储空间.
- 数据类型单一性: HBase表中数据类型都是字符串string.
- 无模式: 每行都有一个可以排序的主键和任意多的列, 列可以根据需要动态的增加, 同一张表中不同的行可以有完全不同的列.
HBase 和 RDBMS 的区别
- 数据类型: HBase中的数据类型都是string字符串.
- 数据操作: HBase只有普通的增删改查操作, 没有表之间的关联查询
- 存储模式: HBase是基于列式存储的, 而RDBMS是基于行式存储的.
- 应用场景: HBase适合存储大量数据, 查询效率很高.
HBase专业术语和数据模型
HBase专业术语
- 主键:(Row Key)
- 用来检索记录的主键,
- 访问HBase表中的行, 只有三种方式:
- 通过单个Row key的方式查询, 只能查询一条数据
- 通过Row key的range来查询, 可以查到一组数据
- 全表扫描
- 列族: (Column Family)
- 可以理解为: 在字段前面加上一个限定符.
- 在创建表的时候, 必须要声明列族, 一个列族可以包含多个列
- 列族没有数据类型, 是一些列的集合.
- 一个列族所有成员都有着相同的前缀.
- 时间戳和存储单元cell
- 存储单元cell:由 row 和 column 确定一个存储单元
- 每个cell都存储这同一份数据的多个版本
- 每个cell中, 不同版本的数据都是通过时间的倒序存储.
- {row, column, version}元祖就是HBase中的一个cell
HBase存储细节
- 每个列族存储在HDFS上的一个单独的文件中.
- key和version会在每个列族中存储一份.
- 空值是不会被存储的.
HBase伪分布式搭建过程.(适合学习)
真正开发中使用的是 集群模式. 而适合学习的是伪分布式模式.
Linux环境搭建. 虽然前面有些, 但是再温习下搭建过程.
关闭防火墙和SELinux
1 | 禁止掉ipv6网络: vim /etc/sysctl.conf |
配置IP
1 | 在centos中设置成桥接模式. 即可. |
配置主机名和ip映射
1 | vim /etc/sysconfig/network |
设置SSH免密码登录
1 | 1. 生成公钥和私钥:(在哪个用户下生成就是那个用户的秘钥对. 根据用户来区分的) |
安装JDK
1 | jdk: |
安装HBase
1 | hbase1.1.13 |
HBase在HDFS上的目录结构
- /hbase/.tmp: 临时目录,当对表做创建和删除的时候, 会将表先move到该目录下, 然后进行操作
- /hbase/data: 核心目录, 存储HBase表的数据.
- 默认情况下:/hbase/data下有两个目录
- /hbase/data/default: 当创建表的时候, 没有指定namespace时, 表就会创建在此目录下.
- /hbase/data/hbase: 系统默认创建的表, 里面包含两张表: meta表和namespace表
- /hbase/hbase: id: 存储的是集群唯一的cluster id(uuid)
- /hbase/hbase.version: 集群的版本号
- /hbase/oldWALs: 当WALs目录的logs没有用之后, 就会将这些logs移动此目录下. HMaster会定期清理.
HBae的Shell 操作
基本操作:
1 | 1. 创建表: create '表名称','列族名1','列族名2','列族名...' |
组命令:
1 | general |
hbase Shell
命令行中输出hbase shell进入shell模式
输入: help 可以查看提示.
1 | 1. 命令行中输出hbase shell进入shell模式(要先把hbase配置到环境变量中/etc/profile) |
最后
关于HBase的搭建和一些表的定义和创建. 到这里算是结束了. 接下来的博客中会继续深入记录HBase的进阶知识.