非关系型数据库——HBase(基础)
HBase基础
什么是NoSQL
NoSQL:not only SQL,非关系型数据库
NoSQL是一个通用术语
指不遵循传统RDBMS模型的数据库
数据是非关系的,且不使用SQL作为主要查询语言
解决数据库的可伸缩性和可用性问题
不针对原子性或一致性问题
NoSQL和关系型数据库对比
主要有以下一些区别
对比 | NoSQL | 关系型数据库 |
---|---|---|
常用数据库 | HBase、MongoDB、Redis | Oracle、DB2、MySQL |
存储格式 | 文档、键值对、图结构 | 表格式,行和列 |
存储规范 | 鼓励冗余 | 规范性,避免重复 |
存储扩展 | 横向扩展,分布式 | 纵向扩展(横向扩展有限) |
查询方式 | 结构化查询语言SQL | 非结构化查询 |
事务 | 不支持事务一致性 | 支持事务 |
性能 | 读写性能高 | 读写性能差 |
成本 | 简单易部署,开源,成本低 | 成本高 |
NoSQL和BI、大数据的关系
BI(Business Intelligence):商务智能
它是一套完整的解决方案
BI应用涉及模型,模型依赖于模式
BI主要支持标准SQL,对NoSQL支持弱于关系型数据库
NoSQL和大数据相关性较高,但是NoSQL != 大数据
NoSQL产品是为了帮助解决大数据存储问题,但是大数据不仅仅包含数据存储的问题
通常大数据场景采用列存储数据库
如:HBase
HBase概述
- HBase是一个领先的NoSQL数据库
- 是一个面向列存储的NoSQL数据库
- 是一个分布式Hash Map,底层数据是Key-Value格式
- 基于Google Big Table论文
- 使用HDFS作为存储并利用其可靠性
- HBase特点
- 数据访问速度快,响应时间约2-20毫秒
- 支持随机读写,每个节点20k~100k+ ops/s
- 可扩展性,可扩展到20,000+节点
- 高并发
HBase应用场景
增量数据-时间序列数据
高容量,高速写入
HBase之上有OpenTSDB模块,可以满足时序类场景,比如传感器,系统监控,股票行情监控等
信息交换-消息传递
高容量,高速读写
通信、消息同步的应用构建在HBase之上,比如email,FaceBook等
内容服务-Web后端应用程序
高容量,高速读写
头条类、新闻类的的新闻、网页、图片存储在HBase中
Apache HBase生态圈
HBase生态圈技术
Lily – 基于HBase的CRM
OpenTSDB – HBase面向时间序列数据管理
Kylin – HBase上的OLAP
Phoenix – SQL操作HBase工具
Splice Machine – 基于HBase的OLTP
Apache Tephra – HBase事务支持
TiDB – 分布式SQL DB
Apache Omid - 优化事务管理
Yarn application timeline server v.2 迁移到HBase
Hive metadata存储可以迁移到HBase
Ambari Metrics Server将使用HBase做数据存储
HBase分布式环境部署
启动ZooKeeper
启动Hadoop(HDFS、YARN)
上传、解压、配置环境变量并修改配置文件
hbase-env.sh
hbase-site.xml
regionservers
启动测试
启动:start-hbase.sh
关闭:stop-hbase.sh
HBase物理架构 - 概述
HBase物理架构 - HMaster
HMaster的作用是:
–集群的主节点,可以配置多个,用来实现HA
–处理元数据的变更
–监控RegionServer
–负责RegionServer的负载均衡
–处理RegionServer故障转移
–通过ZooKeeper发布自己的位置给客户端
HBase物理架构 - RegionServer-1
RegionServer负责管理维护Region,负责存储HBase实际数据
一个RegionServer包含一个WAL、一个BlockCache (读缓存)和多个Region
一个Region包含多个存储区,每个存储区对应一个列族
一个存储区由多个StoreFile和MemStore组成
一个StoreFile对应于一个HFile和一个列族
HFile和WAL作为序列化文件保存在HDFS上
Client与RegionServer交互
HBase物理架构 - RegionServer-2
功能
负责管理HBase的实际数据
处理分配给它的Region
刷新缓存到HDFS
维护HLog
执行Compaction
负责处理Region分片
HBase逻辑架构 - Row
Rowkey(行键)是唯一的并已排序
Schema可以定义何时插入记录
每个Row都可以定义自己的列,即使其他Row不使用
相关列定义为列族
使用唯一时间戳维护多个Row版本
在不同版本中值类型可以不同
HBase数据全部以字节存储
HBase元数据管理
数据管理目录
系统目录表hbase:meta
存储元数据
ZooKeeper存储hbase:meta表的位置信息
HBase实际数据存储在HDFS上
HBase Shell
HBase Shell是一种操作HBase的交互模式
支持完整的HBase命令集
命令类别 | 命令 |
---|---|
General | version, status, whoami, help |
DDL | alter, create, describe, disable, drop, enable, exists, is_disabled, is_enabled, list |
DML | count, delete, deleteall, get, get_counter, incr, put, scan, truncate |
Tools | assign, balance_switch, balancer, close_region, compact, flush, major_compact, move, split, unassign, zk_dump |
Replication | add_peer, disable_peer, enable_peer, remove_peer, start_replication, stop_replication |
HBase操作-1
通过hbase shell进入
version --查看版本
status --查看集群状态
whoami --查看
help
基本操作
create 'customer', {NAME=>'addr'}, {NAME=>'order'} -- 创建一个表
list -- 列出HBase所有的表
desc 'customer' -- 查看表的详细信息
put 'customer', 'jsmith', 'addr:city', 'montreal' -- 添加数据
get 'customer', 'jsmith' -- 获取数据
将文档数据导入HBase
##通过hbase shell导入文档数据
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \
-Dimporttsv.separator=, \
-Dimporttsv.columns="HBASE_ROW_KEY,order:numb,order:date" \
customer file:///home/vagrant/hbase_import_data.csv
HBase Java API
使用Java API操作HBase
创建Maven项目并添加依赖
使用Java API开发代码
创建表,查看表,删除表
添加数据,查看数据,删除数据
打包、上传Jar包并测试
// Get client admin
Configuration config = HBaseConfiguration.create();
config.Path("/opt/install/hbase/conf/hbase-site.xml");
config.Path("/opt/install/hadoop/etc/hadoop/conf/core-site.xml");
connect= ConnectionFactory.createConnection(config);
admin = connect.getAdmin();
// 执行表操作
admin.createTable()
admin.disableTable()
admin.deleteTable()
admin.listTable()