hbase简介
HBase(Hadoop Database)是一个高可靠性、高性能、面向列、可伸缩的分布式大数据存储系统。具有最理想化的写和极好的读性能。它支持可插拔的压缩算法(用户可以根据其列族中的数据特性合理选择其压缩算法),充分利用了磁盘空间。
如上图所示,它是Google BigTable的开源实现,利用Hadoop HDFS作为它文件存储,利用Hadoop MapReduce处理海量数据,使用Zookeeper进行协调服务。利用HBase技术可在廉价PC Server上搭建起大规模NoSql存储集群。值得一提的是,BigTable只支持一级索引,Hbase不仅支持一级索引,还支持二级索引。
hbase数据结构
逻辑结构
- 表(Table):HBase会将数据组织进一张张的表里面
- 行(Row):每一行代表着一个数据对象,每一行都是以一个行键(Row Key)来进行唯一标识的
- 列族(Column Family):简单理解为对于表一些列的分类,中所有的列都需要组织在列族里面,列族一旦确定后,就不能轻易修改。
- 列标识(Column Qualifier):列名,列族中的数据通过列标识来进行映射;也可以理解为一个键值对,Column Qualifier就是Key。
- 单元(Cell):每一个 行键,列族和列标识共同组成一个单元,存储在单元里的数据称为单元数据。
- 时间戳(Timestamp):默认下每一个单元中的数据插入时都会用时间戳来进行版本标识。
物理模型
系统架构
先来看一下hbase的系统架构
Client:访问HBase的接口,有缓存机制会缓存比如像Region的位置信息等,用以加快HBase的访问,与HMaster(管理类操作)和HRegionServer(读写类操作)通信。
Zookeeper:主要做三件事情,存储-ROOT-表和HMaster的地址,会以临时节点机制感知
HRegionServer的监控状态,Zookeeper还可以避免HMaster的单点问题(可以启动多个HMaster)。
HMaster:可以启动多个HMaster,利用Zookeeper的选举机制防止单点问题,它主要完成一些对Table和Region的管理工作:
(1)为RegionServer分配Region
(2)负责RegionServer的负载均衡
(3)发现失效的RegionSever并重新分配Region
(4)管理用户对Table的增删改查等操作
RegionServer: 主要负责响应用户请求,并向HDFS中读写数据,是HBase最核心的模块儿:
HRegionServer内部包含一些列的HRegion对象,每一个HRegion对应到一个Region,正如上文物理模型中提到,每个Region中又包括多个Store,每个Store又包括一个memStore(内存存储)和多个storeFile(storeFile封装了HFile,存储在HDFS之上)。
用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile,当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除(数据删除时会首先打一个标记但没有真正删除),因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。
当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上
HRegionServer采用WAL(Write-Ahead-Log)机制来实现数据的容错和恢复,这种机制类似于mysql中的Binary Log。每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中,HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。
相关推荐
2-1 HBase简介及其在大数据生态圈的位置 2-2 HBase数据存储模型及与关系型数据库的区别 2-3 Hadoop伪分布式集群安装 2-4 HBase伪分布式集群安装 2-5 HBase基础架构 2-6 HBase阶段小结 第3章 HBase原理与实战 介绍...
小结 在本文中,我们详细介绍了如何配置 HBase 和 ZooKeeper,以便更好地理解它们之间的交互。我们首先配置了 ZooKeeper,然后配置了 HBase,最后使用 Java API 连接 HBase 集群。这些配置和 Java API 是使用 ...
- **实用性**:4星,是日常运维的基础工具,灵活且强大。 7. **HBase Master UI和RegionServer UI** - **监控**:提供图形化的监控界面,展示集群状态、region分布、内存使用等信息。 - **实用性**:3星,对于...
##### 第二部分:HBase基础知识 - **第一章:介绍** - **大数据时代**:讲述了大数据时代的到来以及对数据库系统的新需求。 - **关系型数据库系统的局限性**:分析了传统关系型数据库在面对大数据时的不足。 - **...
1.6 小结 16 第2章 NoSQL上手初体验 17 2.1 第一印象——两个简单的例子 17 2.1.1 简单的位置偏好数据集 17 2.1.2 存储汽车品牌和型号数据 22 2.2 使用多种语言 30 2.2.1 MongoDB驱动 30 2.2.2 初识Thrift ...
#### 实验小结 - **遇到的问题及解决方法**: - 在使用HBase Shell时出现错误提示:“ERROR: KeeperErrorCode = NoNode for /hbase/master”,这表示Master进程未启动。 - 解决方法:使用命令`./bin/hbase-daemon...
1.3 本章小结 第2 部分 数据逻辑. 2 将数据导入导出Hadoop. 2.1 导入导出的关键要素 2.2 将数据导入Hadoop . 2.2.1 将日志文件导入Hadoop 技术点1 使用Flume 将系统日志文件导入HDFS 2.2.2 导入...
433.3 读和写 433.3.1 InputFormat 443.3.2 OutputFormat 493.4 小结 50第二部分 实战第4章 编写MapReduce基础程序 524.1 获得专利数据集 524.1.1 专利引用数据 534.1.2 专利描述数据 544.2 构建MapReduce程序的基础...
四、小结与教学反思 在完成这一部分的学习后,学生应该能够理解Ambari在Hadoop管理中的角色,以及如何准备和配置一个适合Hadoop运行的基础环境。教师需要强调实践操作的重要性,鼓励学生动手实践,以便更好地理解和...
6.8 小结:这部分总结了Hadoop 2.0家族的主要组件及其在大数据处理中的作用,强调了它们在云计算环境中的重要性。 通过这个系列的课程,学习者可以从基础到高级全面了解云计算和Hadoop 2.0,不仅适合初学者入门,也...
标题中的“适用CDH6.3.1的Phoenix parcle编译包”指的是为Cloudera Data Hub (CDH) 6.3.1版本定制的Phoenix查询引擎的...在CDH 6.3.1环境中使用预编译的Parcel,可以快速地将这一功能引入到现有的大数据基础设施中。
6.9 小结 Hadoop 2.0 家族是一个包含多个互补项目的生态系统,共同构成了一个强大的大数据处理和分析平台。从数据存储(HDFS)、分布式协调(ZooKeeper)、实时数据库(HBase)、数据分析(Pig、Hive)、工作流调度...
Hadoop 应用案例详解 ...小结 通过对四家公司的 Hadoop 应用案例的分析,我们可以看到 Hadoop 在实际应用中的强大功能和灵活性,Hadoop 可以满足各个行业和领域的数据处理需求,从而实现业务增长和创新。
3.10 小结 131 习题 131 参考文献 131 第4章 微软云计算Windows Azure 135 4.1 微软云计算平台 135 4.2 微软云操作系统Windows Azure 136 4.2.1 Windows Azure概述 136 4.2.2 Windows Azure计算服务 137 4.2.3 ...
### 小结 本节介绍了MongoDB的基础概念,包括它与传统关系型数据库的区别、数据交换格式、文档结构以及如何使用MongoDB Shell等。这些基础知识对于理解MongoDB的工作原理和使用方法至关重要。通过学习这些概念,...
#### 六、本文小结 Spring Data JPA 大大简化了 JPA 的使用方式,使得开发者能够更高效地进行数据访问层的开发。通过遵循约定优于配置的原则,减少了大量模板代码的编写,提高了开发效率。 #### 第二篇 在第二篇...
- **2.1.3.4 关于字符类型小结** - 根据实际需求选择合适的类型。 ##### 2.1.4 为表的字段创建索引 - **2.1.4.1 为表创建主键索引的方法** - 在创建表时指定主键。 - 或者使用`ALTER TABLE table_name ADD ...