Hbase笔记 入门

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中一个列族存储为一个部分,

《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进行管理

《Hbase笔记 入门》

Region分裂起初一张表只有一个region当一个region达到一定大小后就尅是分裂

子region会存在一个父region的引用地址

《Hbase笔记 入门》
《Hbase笔记 入门》

一个表有一个或者多个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

    原文作者:时待吾
    原文地址: https://www.jianshu.com/p/1ac9045a4b70
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞