Hbase总结1
特点:
分布式、可扩展、支持海量数据存储的NoSQL数据库,可以支持海量数据的秒级别查询
逻辑结构:
- 列族
- 列
- rowkey
- region:类似关系型数据库的表,是hbase表的横向切片。hbase定义表时,只需要声明列族,不需要声明具体的列。写入数据时可以按需在一个列族中动态扩展列。
- store:内容实际存储
物理结构:
rowkey | column family | column qualifier | timestamp | type | value |
rowkey001 | cf1 | c1 | t1 | put | v1 |
rowkey001 | cf1 | c1 | t2 | delete | v1 |
架构:
master:
- 表的增删改查
- 分配region到region server,并负责region server状态监控
region server:
- 数据的增/改(put)、删(delete)、查(get)
- 管理region的分裂(split)及合并(compact)
StoreFile:
每个Store会有一个/多个StoreFile,StoreFile中的数据是以Hfile的形式存储在HDFS上(HFile是一种文件格式)。数据在每个StoreFile中都是有序的。
MemStore:
因为StoreFile/HFile中的数据都是有序的,所以数据先存储在内存中,到达flush条件时才会写到HFile中,每次flush形成一个HFile。
WAL(Hlog)
写流程:
操作 put tb1/rk1/cf1/c1:v1
1 client向ZK请求hbase meta表所在的region server
2 region server 返回meta表信息给到client
3 client访问上一步返回的rs,获取meta表内容,根据rowkey信息判断目标rowkey所在的region server(假设为 rs1)【将meta信息缓存起来,便于下一次访问】
4 client连接rs1,并将v1按照要求写入,先写到wal,然后写入memstore
5 写入完成后,rs1给client发送ack,写入完成。
MemStore刷写:
一个region server中有多个region
一个region中可能有多个store(每个store对应一个列族)
一个store中有一个memstore,每个memstore满足一定条件即可刷写(flush)
每次刷写生成一个HDFS上的StoreFile(以Hfile格式存储)
刷写条件为:
- 当一个region server中所有memstore大小达到对堆内存的40%,region server级别flush会阻塞客户端读写(参数:hbase.regionserver.global.memstore.size);在客户端阻塞条件下,因为持续刷写导致的memstore大小降低,降低至hbase.regionserver.global.memstore.size * 95%(堆内存的38%)时,客户端又可以读写hbase。
- memstore数据自动刷新的时间阈值,默认1小时(以最后一条数据的时间为计算基准)
- 单个region的memstore大小达到hbase.hregion.memstore.flush.size(默认128M),整个region就会flush。
读流程:
操作 get:tb1/rk1
前三步骤和写流程一致
rowkey设计原则:
- 散列性:时间戳反转(时间戳本身有序,反转之后无序),
- 集中性
- 长度原则:60-100位长度
原文地址:https://www.cnblogs.com/backMountainGuest/p/15041203.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- spring之在配置Bean时如何关联不同的Bean
- spring之级联属性赋值的两种方式
- hz(赫兹)
- spring之为java.util.Properties类型的属性进行赋值
- python之类也是一个对象
- spring之使用命名空间p来简化bean的配置
- SpringBoot 2.X中的@Async和Java8中的completableFuture的使用比较
- c语言之创建字符串的两种方式
- 机器学习-文本分类(1)之独热编码、词袋模型、N-gram、TF-IDF
- spring之自动装配的三种方式
- 机器学习-文本分类(2)-新闻文本分类
- Mysql5.6版本新增列,执行DDL的时候竟然锁表了,这应该是是最好的解决办法之一了!!
- spring之bean的作用域
- spring之spring表达式语言:SpEL
- 反欺诈模型(数据不平衡)