Hbase的学习笔记(中间板)


1. HBase

1.1定义

分布式的Mysql数据库

NoSQL关系型数据库

多维数据库

列族 列族不是越多越好 Column Family

列族分文件夹

Row Key –> 主键

根据列切分成store

行切分成region(一个region包含多个store)

修改即是插入,更新数据主要是根据时间戳

TimeStamp

truncate 清空表的数据

Name Space == database (default: hbase default)

Table

Row

Column

Time Stamp

Cell

Column Qualifier(列限定符)

内部inner outer

Cell (rowkey column Family column Qualifier time Stamp)

1.2 基本架构

Master/Zookeeper/Master

RegionServer的作用(DML)

HLog(WAL)

edits(HDFS)

binLog()

Data:get,put,delete

Region:splitRegion compactRegion

Matser(表的增删改查DDL)(存在单点故障)

Table:create delete alter

RegionServer:分配region 监控regionServer

HBase依赖于ZooKeeper

数据在HDFS中

行存储

Row Key Column Family Column Qualifier TimeStamp Type Value

row_key1 personal_info name t1 put value

1.3 shell

DDL

create 'atguigu:test' ,'info'
list
describe 'atguigu:test'
create 'atguigu:test',{NAME=>'info',VERSIONS=>3}
#指定多列族
create 'atguigu:test3','info','msg'
list_namespace_tables 'default'
create 'student', 'info'#不指定默认default
describe atguigu:test
alter 'atguigu:test',{NAME=>'info',VERSIONS=>3}
drop 'atguigu:test3'#会报错
disable 'atguigu:test3' #让test3表下线
drop 'atguigu:test3'
list_namespace_tables 'atguigu'
disable_all 'atguigu:.*' #将所有表下线
drop_namespace 'atguigu'
list

DML

put 'student',1001,'info:name','张三'
scan 'student'
put 'student',1001,'info:age',23
put 'student',1001,'indo:email','zs@atguigu.com'
put 'student',1002,'info:name','张三'
scan 'student'
put 'student',1002,'info:age',23
put 'student',1002,'info:address','sh'
#更新
put 'student',1001,'info:email','zs@qq.com'
scan 'student',{RAW=>true,VERSIONS=>3}
#版本是保留时间戳最近的三个版本
put 'student',1003,'info:name','wangwu'
put 'student',1003,'info:email','ww@qq.com'
scan 'student',{STARTROW=>'1001',STOPROW=>'1003'}
#1001-1002 左闭区间右开区间
#get
get 'student','1001','info:email'

删除操作

delete 'student','1001','info:email'
#删除最新的版本,但是可以查到上一个版本
deleteall 'student','1001','info:email'
#全部删除 #type=DeleteColumn
deleteall 'student','1001'
#DeleteFamily

数据存在于HDFS上

truncate删除表,创建空的新表

1.4 HBase进阶架构

MemStore —写缓存. flush之后才会生成storefile

WAL记录操作日志—预写日志

BlockCache 读缓存

1.5 读数据流程与写数据流程

1.6 合并

轻量级不会轻易删除,不能保证所有操作都包含

合并若干个邻近的小文件

1.7 API操作三句话

connection

2. 复习

列族相当于动态链

垂直切分

每个region包含多个列族

物理存储结构按照cell

通过row_key+列族+列名+时间戳+type

按照字典的顺序进行排序

删除,新增都是新增

name space

table 字段可以动态的,按需指定

row

2.架构与API

2.1 regionServer

增删改查

spiltregion

compactregion

2.2 Master

创建表

==元数据表保存在zk里==

HDFS的源数据表/元数据表

region的范围

region里包含store

分配region

master配置高可用

2.3 操作

create 'student','info'
put 'student','1001','info:sex','male'
scan 'student'
scan 'student',(STARTROW=>'1001',STOPROW=>'1001')
describe 'student'#列族,version
put 'student','1001','info:name','Nick'
get#查询一条
get 'student','1001'
get 'student','1001,'info:sex'
delete 'student','1002','info:sex'#删除新版本
deleteall 'student','1001'#删除所有版本
truncate 'student'
#先disable,在truncate
disable 'student'
drop 'student'
alter 'student',{NAME=>'info',VERSIONS=>3}

2.4 详细架构

block cache 读缓存,缓存查出来的数据

WAL 预写日志 write ahead log

StoreFile – flush(HDFS)(配置文件配置)

在Store里有MemStore 写缓存,达到阈值后flush

2.5 写数据流程

put /table/rowkey/CF/column

CF column family 列族

请求meta表所在的regionServer的哪一个(meta表是什么东西)

meta:hadoop102

请求我们需要的meta表所在regionServer

然后client先缓存到meta cache(客户端缓存.存储元数据信息)

对103发送put请求

先写到103regionServer的预写日志

然后写到写缓存里.(算是写数据已经写完了)

--zookeeper
HBase
./meta-region-server//存储元数据表在哪里机器上
scan 'hbase:meta'

Region Server’

2.6 读数据

读写数据,请求zookeeper获得的meta表regionserver的位置

三个都查询.综合查询(block cache,memstore,Hfile)

2.7 Storefile的合并

小合并,.不删除

大合并

3. API

3.1 API操作

1.API操作

依赖排除

1602468166022

conf.set();

3.2 作业

JDBC复习

API操作复习

3.3 HBase优化

每一个region维护者一个startRow与endRowKey

如果加入的数据符合某个region维护的rowKey范围,则该数据交给这个region维护,name依照这个原则,我们可以将数据所要投放的分区提前大致的规划好,以提高HBase的性能

Phoenix JDBC

3.4 复习API操作+==重点==+

1>环境准备

2>操作

三遍复习 训练HBase

预分区

4. Phoenix

启动

sqlline.py hadoop105,hadoop106,hadoop107:2181

4.1 使用Phoenix语法

thin client

连客户端/多一个query server

--查询
list namespace
create schema test;
#报错.mapping

1602555420741

修改配置,创建映射,否则报错

<property>
    <name>phoenix.schema.isNamespaceMappingEnabled</name>
   	<value>true</value>
</property>
#创建表
create table student (id varchar primary key,
                      name varchar,
                      addr varchar);
upsert into student values('1001','zhangsan','beijing');

4.2 Phoenix重点说明 + SHELL

phoenix把字段进行编码,为了减少内存空间,

phoenix把字段进行编码,为了减少内存空间,

column_encoded_bytes = 0;使用这个配置可以不让Phoenix把字段进行编码

不想使用大写,就使用双引号括起来

delete from student where id = 1001;
scan 'TEST:STUDENT' {RAW=>true}--查看历史版本/包括删除信息
scan 'TEST:STUDENT' {RAW=>true,VERSIONS=>3}
drop table "student2";

删除

4.3 表的映射

视图映射

create view "test"(id varchar primary key,"info1"."name" varchar, "info2"."address" varchar);
drop view "test"
#指定命名空间需要 student.test 使用表名
create view "student"(id,varchar primary key,
                      "info"."name" varchar,
                      "info"."age" varchar)
use default;
put 'student','1001','info:age','23'
column_ecoded_bytes=0;
select from student;
upsert into 'student' values("1002","lisi","24");

4.4 JDBC操作

导入依赖

5 复习

Phoenix容易集成

RegionServer

映射

JDBC连接

关键问题

HBase​ : meta表

对于一张表来说存储的是三条数据

加入你要寻找Table1的RowKey

meta表

Table Region RowKey Server
Table1 Region1 0 hadoop105
Table1 Region2 1000 hadoop105
Tabel1 Region3 2000 hadoop106
Table2 Region1 aaaaaaa hadoop105
Table2 Region2 bbbbbb hadoop106
Table2 Region3 cccccccc hadoop107
Table3 Region1

数据先写到WAL在写入MemoStore

WAL还没有同步到HDFS

写入到MemoStore

同步

同步不完成 回滚


文章作者: Jinxin Li
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jinxin Li !
  目录