Hbase知识点总结



day01


hbase概念:
非结构化的分布式的面向列存储非关系型的开源的数据库,根据谷歌的三大论文之一的bigtable
高宽厚表
作用:
为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
能干什么:
存储大量结果集数据,低延迟的随机查询。


sql:
结构化查询语言


nosql:
非关系型数据库,列存储和文档存储(查询低延迟),hbase是nosql的一个种类,其特点是列式存储。
非关系型数据库--列存储(hbase)
非关系型数据库--文档存储(MongoDB)
非关系型数据库--内存式存储(redis)
非关系型数据库--图形模型(graph)


hive和hbase区别?
Hive的定位是数据仓库,虽然也有增删改查,但其删改查对应的是整张表而不是单行数据,查询的延迟较高。其本质是更加方便的使用mr的威力来进行离线分析的一个数据分析工具。
HBase的定位是hadoop的数据库,是一个典型的Nosql,所以HBase是用来在大量数据中进行低延迟的随机查询的。


hbase运行方式:
standalone distrubited


单节点和伪分布式?
单节点:单独的进程运行在同一台机器上


hbase 应用场景:
存储海量数据    低延迟查询数据


hbase表  由多行组成
hbase行  一行在hbase中由行健和一个或多个列的值组成,按行健字母顺序排序的存储。


行健的设计原则:
长度原则
散列原则
唯一原则


Hbase列  是表中的基本元素,包含一个列族和列限定符。列属于一个列族,列族属于一个行。列中的内容不需要指定数据类型,hbse被称为无类型的数据库的原因。


列族是一行中一列或多个列的集合,需要在创建表的时候就定义好。不能修改太频繁,数量不能太多。列族中的列的数量是没有限制。




列限定符也叫列名称。


单元格:行、列族、列限定符的结合。通过这三个值(坐标)来唯一确定一个单元格。
值为空,就什么都不写,不占用底层物理存储。


时间戳是数据写入某个单元格中的具体时间。(降序)


Hbase 数据模型:半结构化数据。
      逻辑模型:有序映射的映射集合。
      存储模型:列式存储
      物理模型:面向列族


HFile:
每个列族在硬盘上由自己的HFile(二进制文件)集合。一个列族的数据不一定存放在一个HFile里。每个列族的Hfile都是独立管理的。


Hbase中扩展和负载均衡的基本单元是region,本质是以行健排序的连续存储的区间。
最佳加载数量是10~1000,最佳大小是1GB~2GB


HBase读数据流程:
1,Client先访问zookeeper,从meta表读取region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息。
2,根据namespace、表名和rowkey在meta表中找到对应的region信息
3,找到这个region对应的regionserver
4,查找对应的region
5,先从MemStore找数据,如果没有,再到StoreFile上读(为了读取的效率)。


HBase写数据流程:
1,Client先访问zookeeper,从meta表获取相应region信息,然后找到meta表的数据
2,根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的region信息
3,找到对应的regionserver
4,把数据分别写到HLog和MemStore上一份
4,MemStore达到一个阈值后则把数据刷成一个StoreFile文件。(若MemStore中的数据有丢失,则可以总HLog上恢复)
5,当多个StoreFile文件达到一定的大小后,会触发Compact合并操作,合并为一个StoreFile,(这里同时进行版本的合并和数据删除。)
6,当Storefile大小超过一定阈值后,会把当前的Region分割为两个(Split),并由Hmaster分配到相应的HRegionServer,实现负载均衡


HBase删流程:
Delete命令不立即删除内容,一条新墓碑记录写入,作为删除的标记。在大合并的时候墓碑记录才会被处理,被删除记录,占用的空间才会释放。
大合并将处理给定region的一个列族的所有HFile,大合并后,列族的所有HFile合并成一个文件大合并耗费资源,不经常使用,但是是真正删除数据的机会,Hbase可以确保同时访问到两种记录。




Day02


Hbase Shell




-创建表: create '表名称', '列名称1','列名称2','列名称N'
-添加记录: put '表名称', '行名称', '列名称:', '值'
-查看记录: get '表名称', '行名称'
-查看表中的记录总数: count  '表名称'
-删除记录: delete  '表名' ,'行名称' , '列名称'
-删除一张表: 先要屏蔽该表,才能对该表进行删除,第一步 disable '表名称' 第二步 drop '表名称'
-查看所有记录: scan "表名称"  
-查看某个表某个列中所有数据: scan "表名称" , ['列名称:']
-更新记录: 就是重写一遍进行覆盖


创建带版本的表
create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}
创建两个列族的表
create 'hadoop3:stu','info','other'


查看创建的表:
list_namespace_tables 'hadoop3'


put添加数据:
put 'hadoop3:stu','20171020','info:name','laozhang'


查看整张表的数据:
scan 'hadoop3:stus'


get 查看某个值:
查看一整行数据:
get 'hadoop3:stus', 'rk2017092710089’
查看行和列族交叉单元的值:
get 'hadoop3:stus', 'rk2017092710089', {COLUMN => 'stu_info'}


count 统计:
统计表的行数:
count 'hadoop3:stus'


disable 禁用表:
disable 't1'


删除表:
drop 'hadoop3:stu'


10.删除命名空间:
drop_namespace 'hadoop3'
如果命名空间有表,会报错


# 查看表结构
describe 'hadoop3:stus'


#修改表结构
修改表结构必须先disable
语法:alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}


# 清空表中的所有数据
语法: truncate


# HBase建表是可以添加列族,
alter 't1', {NAME => 'f1', VERSIONS => 5} 
把表disable 后 alter,然后 enable






CRUD 增删改查
 
命名空间操作?
namespace 相当于数据库一个概念
Group name: namespace
Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables


alter_namespace:
alter_namespace 'ns1', {METHOD => 'set', 'PROERTY_NAME' => 'PROPERTY_VALUE'}


alter_namespace 'ns1', {METHOD => 'set', 'NAME' => 'ns11'}


查看命名空间的帮助:
help 'namespace'
创建一个命名空间;
create_namespace 'hadoop3'
描述查看:
describe_namespace 'hadoop3'
查看当前habse有哪些命名空间:
list_namespace
查看命名空间的表:
list_namespace_tables 'hadoop3'


scan和get的功能以及实现的异同?
Get查询的是某一条数据,scan是扫描整张表。




HBase的查询实现只提供两种方式:
1、按指定RowKey 获取唯一一条记录,get方法(org.apache.hadoop.hbase.client.Get)
Get 的方法处理分两种 : 设置了ClosestRowBefore 和没有设置的rowlock .
主要是用来保证行的事务性,即每个get 是以一个row 来标记的.一个row中可以有很多family 和column.
2、按指定的条件获取一批记录,scan方法(org.apache.Hadoop.hbase.client.Scan)实现条件查询功能使用的就是scan 方式.
1)scan 可以通过setCaching 与setBatch 方法提高速度(以空间换时间);
2)scan 可以通过setStartRow 与setEndRow 来限定范围([start,end)start 是闭区间,end 是开区间)。范围越小,性能越高。
3)、scan 可以通过setFilter 方法添加过滤器,这也是分页、多条件查询的基础。




Hbase 各个角色的作用:


Client?
Client使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC


zk的作用? 
Zookeeper集群存储.Meta(-ROOT-)表的地址和Master地址和保证任何时候hbase集群中只有一个激活状态的hmaster


Hmaster的作用?
负责HBase中Table和Region的管理,包括表的增删改查


数据在hbase两种文件类型? 存储格式?
HFile:
HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile
HLog File:
HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File


# Region?
存储数据的单元,当数据量很大的时候,一个表可能对应多个region,region有自己的合并和拆分策略




Hlog的作用(默认是打开):
通过hbase的WAL(write-ahead-log)机制来保证数据写入时出现异常,方便恢复。


HRegionServer的作用:6
HRegionServer 主要负责相应用户的I/O请求,进而跟HDFS交互,从HDFS中读写数据,HBase中最核心的进程


# hbase rowkey 设计原则?
1、长度原则,越短越好,不要超过16 个字节
2、Rowkey散列原则,将Rowkey的高位作为散列字段,由程序循环生成,低位放时间字段,这样将提高数据均衡分布在每个Regionserver 实现负载均衡的几率。
3、Rowkey唯一原则,必须在设计上保证其唯一性。
HFile:
相当于存储一列数据。


HBase中的数据最终存储在DataNode的块Block上




HBase 性能优化?
1. 修改Linux最大文件数
2. 修改 JVM 配置
3.  修改HBase配置:hbase-site.xml


hbase 常用过滤器:
RowFilter
PrefixFilter
KeyOnlyFilter
ColumnCountGetFilter
FilterList


二级索引的作用?如何构建?
多个条件查询构成多维度的组合查询,根据多个条件查询出特定符合结果的数据
构建:
建立各列值与行键之间的映射关系

你可能感兴趣的:(Hadoop)