欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

非关系型数据库——HBase(基础)

程序员文章站 2022-04-11 07:57:00
...

什么是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概述

  1. HBase是一个领先的NoSQL数据库
  2. 是一个面向列存储的NoSQL数据库
  3. 是一个分布式Hash Map,底层数据是Key-Value格式
  4. 基于Google Big Table论文
  5. 使用HDFS作为存储并利用其可靠性
  6. HBase特点
  7. 数据访问速度快,响应时间约2-20毫秒
  8. 支持随机读写,每个节点20k~100k+ ops/s
  9. 可扩展性,可扩展到20,000+节点
  10. 高并发

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(基础)

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元数据管理

数据管理目录
系统目录表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()