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实例。
- JS 对指定iframe 全屏操作
- 【jfinal修仙系列】扩展CacheInterceptor支持Redis缓存
- 基于Redis的定时任务
- 【jfinal】扩展JFIANL 支持加载jar包中SQL模板
- 【jfinal修仙系列】扩展ShiroCacheManager 支持Redis缓存
- 【springboot】 springboot 整合mybatis-plus
- jfinal-swagger让你的应用接口更加简单
- 【springboot】 spring session 分布式会话共享
- 基于jfinal Template的Shiro 标签
- 基于Spring Cloud 少量配置完成单点登录开发
- Spring 必知概念(一)
- 如何在EHAB(EntLib)中定义”细粒度”异常策略?
- MVC、MVP以及Model2[下篇]
- Dora.Interception: 一个为.NET Core度身定制的AOP框架
- 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 数组属性和方法
- hikvision SDK使用(转)
- 《Scikit-Learn与TensorFlow机器学习实用指南》 第11章 训练深度神经网络(上)
- 海康SDK开发步骤
- 《Scikit-Learn与TensorFlow机器学习实用指南》 第11章 训练深度神经网络(下)
- applet跨域访问的安全性问题(java.security.AccessControlException:access denied)
- JSON解析问题:net.sf.json.JSONException: There is a cycle in the hierarchy!
- 海康相机SDK联合c++标定
- 开发一个Node命令行小玩具全过程--高颜统计工具
- 消息未读之点不完的小红点(Node+Websocket)
- pkg版本规范管理自动化最佳实践
- 数据库驱动问题:MySQLNonTransientConnectionException
- 喜大普奔,es2019登场
- [译] Object.assign 和 Object Spread 之争, 用谁?
- 急速 debug 实战二(浏览器 - 调试线上篇)
- via the 'serverTimezone' configuration property