Hbase原理与架构
我们都知道Hbase是一个构建在HDFS上的分布式列存储系统。Hbase主要用于海量数据的结构化存储。
Hbase是构建在HDFS上,可以使用MapReduce直接操作,或者使用直接使用。
HDFS的问题,HDFS只支持批处理的场景,不支持数据的随机查找,不适合增量数据查找,不支持数据更新。
Hbase特点
- 一个表可以承装上百万列
- 每一行的列可以动态的添加,不同行可以有不同的列
- 面向列族的存储和权限控制,数据即索引
- 对于空的列,不占用存储空间,表可以设计的非常稀疏
- Hbase中都是字符串,每个单元格可以插入多个数据版本。
Hbase的所有的操作都是基于rowkey的 支持put,get,scan多行操作支持,scan,multiput
Hbase物理模型
每一个列族存储在HDFS上的一个单独文件上,Hfile中。
Hbase实际上是维护了一个多级索引:
<key,column family,column name,timestamp>
Table 中所有行都是按照rowkey进行字典排序,同时在行的方向上分为多个Region
Region按大小进行分割,每一个表开始只有一个Region,随着数据的增多,Region不断增大,当增大到一个阈值时,Region就会分割为两个Region,以及更多Region.
同时Region是Hbase中分布式存储的最小单位,不同的Region分布到不同的RegionServer上。
Region是分布式存储的最小单元,但不是存储的最小单元。Region由多个Store组成,每一个Store保存一个列族。
每一个Store又包括memStore和StoreFile组成。
Hbase架构
- Client
包含访问HBase的接口,并维护cache来加快对HBase的访问。
- zookeeper
保证任何时候,集群中只有一个master 存贮所有Region的寻址入口,实时监控Region server的上线和下线信息。并实时通知给Master ,存储HBase的schema和table元数据。
- Master
为Region server分配region ,负责Region server的负载均衡,发现失效的Region server并重新分配其上的region ,管理用户对table的增删改查操作。
- Region Server
Region server维护region,处理对这些region的IO请求 Region server负责切分在运行过程中变得过大的region
WAL
write-ahead-log,预先写日志,指的是在写数据的时候,先写Log这样当写Region失败后可以进行找回。
Master容错:Zookeeper重新选择一个新的Master 无Master过程中,数据读取仍照常进行; 无master过程中,region切分、负载均衡等无法进行;
RegionServer容错:定时向Zookeeper汇报心跳,如果一旦时 间内未出现心跳 Master将该RegionServer上的Region重新分配到其他RegionServer上;
失效服务器上“预写”日志由主服务器进行分割并派送给新的 RegionServer
Zookeeper容错:Zookeeper是一个可靠地服务 一般配置3或5个Zookeeper实例。
- objective-C中的接口与泛型
- 段永朝:天性,互联网的灵性回归
- objective-C中的Class(类类型),Selector(选择器SEL),函数指针(IMP)
- 数据中心进水了怎么办?数据中心如何防洪?
- 戴若犁:虚拟中的现实
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)
- objective-C中如何判断一个类中有没有定义某个方法
- Steve Boswell:智能口罩让PM2.5滚蛋
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)
- objective-C中的扩展方法与partial class
- 仿优酷Android客户端图片左右滑动(自动滑动)
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C 的内存管理之-实例分析
- Tim Berners-Lee:网络的自由和开放
- 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 数组属性和方法
- 【MySQL】删库别着急跑路(一)--Xtrabackup的原理及使用
- 微服务[学成在线] day11:基于 ElasticSearch 构建搜索服务
- 【MySQL】删库别着急跑路(二)--mysqldump的使用
- 【MySQL】删库别着急跑路(三)--binlog2sql闪回工具的使用
- 微服务[学成在线] day10:课程发布、ElasticSearch
- MySql监控分析视图-sys schema
- 如何使用PyMysql操作MySQL数据库?
- 【redis】部署及参数详解(吐血整理,建议收藏)
- 【MySQL性能调优】-关于索引的那些事儿(一)
- 【索引潜规则】-覆盖索引、ICP、MRR详解
- 微服务[学成在线] day12:基于 Nuxt.js 构建搜索前端工程
- 别找了,你要的Redis命令都在这了
- 微服务[学成在线] day13:使用FFmpeg进行格式转换以及m3u8文件生成、文件分块上传接口实现
- GTID,你了解多少?
- Spring Boot 拓展SpringMVC