Hbase概述
Hdfs之上(也可存储在本地)分布式面向列的开源数据存储
Hdfs高可靠有备份分布式(分而治之)
Google bigtable开源实现存储海量数据
面向行-数据库中的数据以行的方式进行存储一行存储为一个部分
面向列:数据库中的数据以列的方式进行存储一列存储为一个部分企业中的数据查询一般不会全表扫描查询几个字段(面向行的数据每一行数据扫描一遍)
面向列只查找对应的几个列提高查询效率
存储类型:视频音频图片
社区好,理论经过实践,丰富的工具支持
Hbase自带的运维类hbck第三方工具:phoenix实现sql语法查询Hbase表数据
使用solr建立hbase二级索引
高效:随机读写转化为顺序读写适应高并发写入传统服务器对于随机读写效率低
均衡效果好读写性能和机器数保持线性相关
行中没有保存数据的列不占存储空间面向行的存储无数据也会占用空间
分布式特点:
存储在hdfs中很好的容错性hdfs有备份策略
均衡策略是基于datanode
使用zookeeper进行集群的协同工作
一致性(所有的结点在同一时刻得到的数据都是相同的)、可用性(每个请求在一定时间内都会得到返回)、分区容忍性(某台服务器数据丢失不影响整个集群的工作)
大数据存储
易扩展(hbase支持结点的扩展和卸载)
大:一个表十亿行百万列
面向列:面向列(列族)的存储和权限访问,列(列族)独立索引
稀疏:对于为null空的列,并不占用存储空间,表设计的非常稀疏
数据类型单一:hbase中的数据类型都是字符串string
无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态增加同一张表不同行可以有截然不同的列
Hbase和普通关系型数据库
数据类型:hbase数据都是字符串类型string rdbms不止string
数据操作:hbase只有普通的增删改查没有关联查询可以自己写mr
也可以使用phoenix
存储模式:hbase基于列存储的rdbms基于行式存储的
应用场景:hbase适合存储大量数据查询效率极高hbase表自带索引,
Hbase术语以及数据模型:
主键row key类似于mysql中的主键唯一标识一行检索记录的主键
访问hbase表中的行只有三种方式:
一条记录:单个row key查询
全表扫描:
范围查询:row key的range企业比这个比较多
Hbase中主键可以为任意的字符串最大长度为64kb按字典顺序存储在hbase内部保存为字节数组
列族column family字段前的限定符
列族在创建表的时候声明(必须。没有声明修改表添加列族),一个列族可以包含多个列,列中的数据都是以二进制形式存在,没有数据类型
列族一些列的集合
Hbase中一个列所有列成员有着相同的前缀,:是列族和列成员之间的分隔符,。
时间戳和存储单元:timestamp and cell
Hbase中通过row和columns确定的一个存储单元为cell。每一个cell保存着同一个数据的多个版本。
Hbase中通过插入一条主键相同的数据进行修改,存储多个版本的数据。
写入数据时,时间戳可以由hbase自动赋值,当前系统时间精确到秒毫秒也可以显示赋值。
每个cell中不同版本的数据都是按照时间的排序倒序存储。
{roe,column,version}元组就是一个hbase中的一个cell
Hbase物理模型
Hbase中一个列族存储为一个部分,
Hbase物理存储
所有数据都是存储在region中,由region server进行管理维护表与region的关系
Hbase存储细节:每个列族存储在hdfs上的一个单独文件夹实际设计中列族只设计一个
否则读取两个文件夹的内容效率低下
Key和version number会在每个列族中存储一份
空值不会被保存不占位
Hbase hdfs目录分析:walregion hdfs目录
Wal预写日志
Temprory:.tmphbase的临时目录对表进行删除和创建时,hbase首先将表移动至该目录,然后进行操作
Wals:write ahead log预写日志是regionserver在处理数据插入和删除过程中用来记录操作内容的一种日志,0.94.x叫做.logs0.98 wal
向hbase写入数据:
首先存Hlog文件,存储在hdfs上,
然后再region中存储数据—首先写到内存里存储到一定大小后,spill到磁盘文件以及hdfs文件中
Region:
每张表存的数据都是region一张表存的数据可以是一个region或者是多个region
每个region由region进行管理
Region分裂起初一张表只有一个region当一个region达到一定大小后就尅是分裂
子region会存在一个父region的引用地址
一个表有一个或者多个region,region包含一个包含memStor和storefile
Memstore存储在内存中,一开始只有memstore,当memstore达到128M后,hbase生成一个storefile文件,storefile存储在本地磁盘,region最核心的文件。
data目录:存储hbase表的数据
默认情况下目录下有两个目录:data/default用户创建表时,没有指定namespace时,表创建在此目录下
Data/hbase系统内部创建的表(meta表:存储region的详细信息namespace表:存储命名空间)
Hbase.id存储的是集群的唯一的cluster.id uuid
Hbase.version集群版本号
oldWALs对应0.94.x版本中的.oldlogs目录当WALs中的logs没有用后,将这些logs移动到此目录下,Hmaster会定期的进行清理。
Hbase shell
Hbase组命令
General与namespace命令
删除表-首先禁用然后删除
跟新数据:重写一遍进行覆盖插入rowkey相同的一条数据
组命令:(0.98)
General; dml; visibilitytables;tools;security;replication;quotas;ddl;snapshots;namespace;
General: whoami status table_help version
Namespace:命名空间类似于数据库
alter_namespace create_namespacedescribe_namespace,drop_namespcae list_namespace list_namespace_tables;
演示步骤:
1、hadoop安装目录的bin目录下start-dfs.sh
首先启动namenode datanodesecondNamenode
2、启动yarnstart-yarn.sh
Resource managernodemanager
3、启动hbase --启动zookeeper
Hbase安装目录下hbase-daemon.sh start zookeeper
启动hmasterhbase-daemon.sh startmaster
启动regionServerhbase-daemon.shstart regionserver
4、Bin/hbase
Shell hbcksnapshothfile zkcli upgrade master regionserver zookeeper rest thrift thrift2 cleanclasspath mapredcp pe ltt classname
Hbase shell =>
Snapshot对hbase中的表进行快照通过快照恢复数据
本地模型与hbase相关进程都运行在同一jvm中一个挂了全部挂了
伪分布式模型—hbase相关进程每个进程一个jvm
网友评论