hbase

本文介绍了NoSQL数据库的概念、特点以及与关系型数据库的对比,并深入探讨了HBase的物理架构、逻辑架构和其作为列存储数据库的特性。通过MapReduce和Sharding等技术,HBase提供了高扩展性和实时查询能力,适用于大数据场景。

安装hbase

把安装包拖进linux里面的opt目录下

########## 安装hbase ##########
// 解压安装包
tar -zxf hbase-1.2.0-cdh5.14.2.tar.gz 
// 移动解压完成后的安装包
mv hbase-1.2.0-cdh5.14.2 soft/hbase120
cd /opt/soft/hbase120/conf
vi hbase-env.sh
    1.export JAVA_HOME=/usr/local/softwave/jdk1.8.0_111
    2.export HBASE_MANAGES_ZK=false //使用外部zookeeper
vi hbase-site.xml
vi /etc/profile
source /etc/profile
cd ../bin
hbase shell
!quit
start-hbase.sh
jps
hbase shell

hbase-site.xml

<property>
	 <name>>hbase.rootdir</name>
	 <value>hdfs://192.168.220.129:9000/hbase</value>
</property>
<!—单机模式不需要配置,分布式配置此项为true-->
<property>
	 <name>hbase.cluster.distributed</name>
	 <value>true</value>
</property>
<!—单机模式不需要配置 分布是配置此项为zookeeper指定的物理路径名-- >
<property>
	 <name>hbase.zookeeper.property.dataDir</name>
	 <value>/home/cm/hbase</value>
</property>

配置文件

i.Export HBASE_HOME=/usr/local/softwave/hbase-1.2.1
ii.Export PATH=….:$HBASE_HOME/bin

NoSql

NoSQL:not only SQL,菲关系型数据库

  • NoSQL是一个通用术语
    指不遵循传统RDBMS模型的数据库
    数据是菲关系的,且不使用SQL作为主要查询语句
    解决数据库的可伸缩性和可用性问题
    不针对原子性或一致性问题

为什么使用NoSQL

互联网的发展,传统关系型数据库存在瓶颈
高并发读写、高存储量、高可用性、高扩展性、低成本

NoSQL和关系型数据库对比

对比NoSQL关系型数据库
常用数据库Hbase、MongoDB、RedisOracle、DB2、MySQL
存储格式文档、键值对、图结构表格式、行和列
存储规范鼓励冗余规范性、避免重复
存储扩展横向扩展、分布式纵向扩展(横向扩展有限)
查询方式结构化查询语言SQL非结构化查询
事务不支持事务一致性支持事务
性能读写性能高读写性能差
成本简单易部署,开源,成本低成本高

数据库三大范式:
第一范式(确保每列保持原子性)
是最基本的范式,如果数据库表中的所有字段值都是不可分割的原子值,就说明该数据库表满足了第一范式。
第二范式(确保表中的每列都和主键相关)
在第一范式的基础之上更进一层,第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言),也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据表中。
第三范式(确保每列都和主键直接相关,而不是间接相关)
需要确保数据表中的每一列数据都和主键之间相关,而不是间接相关。

NoSQL的特点

最终一致性
应用程序增加了维护一致性和处理事务等职责
冗余数据存储

  • NoSQL != 大数据
    NoSQL产品是为了帮助解决大数据存储问题
    大数据不仅仅包含数据存储问题
    • hadoop
      kafka
      spark,etc

NoSQL和BI、大数据关系

  • BI(Business Intelligence):商务智能
    它是一套完整的解决方案
    BI应用涉及模型,模型依赖于模式
    BI主要支持标准SQL,对NoSQL支持弱于关系型数据库
  • NoSQL和大数据相关性较高
    通常大数据场景采用列存储数据库
    如:HBase和Hadoop

NoSQL基本概念

三大基石:cap、base、最终一致性
Indexing(索引)、Query(查询)
MapReduce
Sharding

cap理论

一个分布式系统不能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Tolerance of network Partition)。鱼和熊掌不可兼得。

  • Consistency(一致性):任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的。
  • Availability(可用性):每一个操作总是能在确定的时间内返回,也不是系统随时都是可用的。
  • Partition Tolerance(分区容错性):在出现网络分区(如断网)的情况下,分离的系统也能正常运行。
    在这里插入图片描述

NoSQL不保证“ACID”
事务管理的四个特性:

  • 原子性(Atomicity)
    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  • 一致性(Consistency)
    事务前后数据的完整性必须保持一致。
  • 隔离性(Isolation)
    事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  • 持久性(Durability)
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

提供“最终一致性”

BASE

  • Basically Availble(基本可用)
    保证核心可用
  • Soft-state(软状态)
    状态可以有一段时间不同步
  • Eventual Consistency(最终一致性)
    系统经过一定时间后,数据最终能够达到一致的状态

核心思想是即使无法做到强一致性,但应用可以选择适合的方式达到最终一致性

最终一致性

最终结果保持一致性,而不是时时一致
如账户余额,库存量等数据需强一致性
如catalog等信息不需要强一致性

  • Causal consistency(因果一致性)
    Read-your-writes consistency
    Session consistency

索引和查询

  • Indexing(索引)
    大多数NoSQL是按key进行索引
    部分NoSQL允许二级索引
    HBase使用HDFS,append-only
    • 批处理写入Logged
      重新创建排序文件
  • Query(查询)
    没有专门的查询语言,通常使用脚本语言查询
    有些开始支持SQL查询
    有些开始使用MapReduce代码查询

MapReduce、Sharding

  • MapReduce
    不是Hadoop的MapReduce,概念相关
    可进行数据的处理查询
  • Sharding(分片)
    一种分区模式
    可以复制分片
    • 有利于灾难恢复

NoSQL分类

在这里插入图片描述

键值存储数据库

在这里插入图片描述

列存储数据库

在这里插入图片描述

文档型数据库

在这里插入图片描述

图数据库

在这里插入图片描述

Hbase概述

  • Hbase是一个领先的NoSQL数据库
    是一个面向存储的数据库
    是一个分布式hash map
    基于Google Big Table论文
    使用HDFS作为存储并利用其可靠性
  • HBase特点
    数据访问速度快,响应时间约2-20毫秒
    支持随机读写,每个节点20k~100k+ops/s
    可扩展性,可扩展到20,000+节点

Hbase物理架构

HBase实时查询的原理

HBase 的实时查询,可以认为是从内存中查询,一般响应时间在 1 秒内。
HBase 的机制是数据先写入到内存中,当数据量达到一定的量(如 128M),再写入磁盘中,
在内存中,是不进行数据的更新或合并操作的,只增加数据,
这使得用户的写操作只要进入内存中就可以立即返回,保证了 HBase I/O 的高性能。

采用Master/Slave架构

在这里插入图片描述

HMaster

HMaster的作用
是HBase集群的主节点,可以配置多个,用来实现HA
管理和分配Region
负责RegionServer的负载均衡
发现失效的RegionServer并重新分配其上的Region

RegionServer

RegionServer负责管理维护Region
在这里插入图片描述

Region和Table

在这里插入图片描述

HBase逻辑架构-Row

  • Rowkey(行键)是唯一的并己排序
  • Schema可以定义何时插入记录
  • 每个Row都可以定义自己的列,即使其他Row不适用
    相关列定义为列簇
  • 使用唯一时间戳维护多个Row版本
    在不同版本中值类型可以不同
  • HBase数据全部以字节存储
    在这里插入图片描述

HBase数据管理

  • 数据管理目录
    系统目录表hbase:meta
    存储元数据等
    HDFS目录中的文件
    Servers上的region实例
  • HBase数据在HDFS上
    可以通过HDFS进行修复File
    修复路径:RegionServer->Table->Region->RowKey->列簇

HBase架构特点

  • 强一致性
  • 自动扩展
    当Region变大会自动分割
    使用HDFS扩展数据并管理空间
  • 写恢复
    使用WAL(Write Ahead Log)
  • 与Hadoop集成

HBase Shell

HBase Shell是一种操作HBase的交互模式
支持完整的HBase命令集
在这里插入图片描述

🌰

https://blog.youkuaiyun.com/vbirdbest/article/details/88236575
在这里插入图片描述

help 'list'    // 查看命令list的使用描述
version     // 查看版本号
status     // 返回hbase集群的状态信息
whoami     // 我是谁
table_help   // 查看如何操作表
list    // 列出hbase中存在的所有表

create    // 创建表
create 'mydemo','base'   // 创建表 mydemo表名   base列名

alter    // 修改列簇
添加一个列簇:alter '表名','列簇名'
alter 'mydemo','external'   // 添加列external
alter 'mydemo',{NAME=>'external',METHOD=>'delete'}  // 删除列external
describe 'mydemo'   // 查看表结构mydemo
exists 'mydemo'  // 检查表是否存在
disable 'mydemo'   // 禁用表
drop 'mydemo'   // 先禁用表再删除
enable 'mydemo'   // 开启表
describe_namespace 'default'   // 查看表空间
create_namespace 'mydemo'   // 创建表空间
create 'mydemo:userinfos','base'    // 创建列簇base
create 'mydemo:scores','info'    // 创建列簇info
list_namespace_tables 'mydemo'    // 查看以mydemo为命名空间的表
put 'mydemo:userinfos','1','base:username','zhangsan'   //表空间mydemo,表userinfos,'1'表示行键,列簇base,列username,列值zhangsan
alter 'mydemo:userinfos','externals'   // 添加列簇externals
put 'mydemo:userinfos','1','externals:likes','player,eat'  // 添加列likes
put 'mydemo:userinfos','2','base:username','lisi'   // 添加列值lisi
put 'mydemo:userinfos','2','base:age','30'   // 添加列age,列值30
scan 'mydemo:userinfos'   // 全表扫描
scan 'mydemo:userinfos',{COLUMN=>'base'}  // 扫描列簇base
get 'mydemo:userinfos','1'    // 取值列簇
get 'mydemo:userinfos','1','externals'  // 取值externals列簇
create 'mydemo:mytest',{NAME=>'base',VERSIONS=>3}
put 'mydemo:mytest','1','base:xxx','1'
put 'mydemo:mytest','1','base:xxx','11'
put 'mydemo:mytest','1','base:xxx','111'
get 'mydemo:mytest','1',{COLUMN=>'base',VERSIONS=>3}
put 'mydemo:mytest','1','base:xxx','1111'
取base列簇的三个值
get 'mydemo:mytest','1',{COLUMN=>'base',VERSIONS=>3}
取base列簇时间戳为1592806020017的值
get 'mydemo:mytest','1',{COLUMN=>'base',TIMESTAMP=>1592806020017}
put 'mydemo:userinfos','3','base:username','zhangsanfeng'
scan 'mydemo:userinfos'

https://www.cnblogs.com/mayidudu/p/6056772.html

show_filters   显示过滤器方式
create 'test1','lf','sf'
put 'test1', 'user1|ts1', 'sf:c1', 'sku1'
put 'test1', 'user1|ts2', 'sf:c1', 'sku188'
put 'test1', 'user1|ts3', 'sf:s1', 'sku123'
put 'test1', 'user2|ts4', 'sf:c1', 'sku2'
put 'test1', 'user2|ts5', 'sf:c2', 'sku288'
put 'test1', 'user2|ts6', 'sf:s1', 'sku222'
一个用户(userX),在什么时间(tsX),作为rowkey
scan 'test1'
找出值等于sku188的
scan 'test1',FILTER=>"ValueFilter(=,'binary:sku188')"
找出值包含88的
scan 'test1',FILTER=>"ValueFilter(=,'substring:88')"
scan 'mydemo:userinfos',FILTER=>"ColumnPrefixFilter('username') AND ValueFilter(=,'substring:zhang')"   找出修饰符为c2且值包含张的
scan 'test1',{STARTROW=>'user1|ts2'}   // 从user1|ts2开始查
scan 'test1',{STARTROW=>'user1|ts2',FILTER=>"PrefixFilter('user1')"}   // 从user1|ts2开始查user1为前缀的
count 'mydemo:userinfos'
scan 'mydemo:userinfos'
incr 'mydemo:userinfos','1','base:stuno',1 加入一个自增列,单元格的自增
scan 'mydemo:userinfos',{COLUMNS=>['base:username','base:age']}   查username、age列
scan 'mydemo:userinfos',{COLUMN=>'base',TIMESTAMP=>1592813668123}
scan 'mydemo:userinfos',{LIMIT=>2}   取前两行
scan 'mydemo:userinfos',{STARTROW=>'2',LIMIT=>2}   从第二行开始,取2,3两行
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值