HBase以表的形式存储数据
rowKey就像关系数据库的主键,用来检索记录。
访问hbase表的记录有三种方式,分别是
1 通过单个row key访问
2 通过row key的range
3 全表扫描
时间戳:用来区分同一份数据的版本。并且按顺序排序,每次查询都将返回最新版本的数据。
Region
table由region组成,刚开始table就一个region,随着table中的数据增大,到大到一定程度时,hbase会将region切分为两个相等大小的region, region是分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的Region Server上。相同的region不能拆分。
Store
region是分布式的最小单元,单不是存储的最小单元,每一个region有一个或多个store组成,至少是一个store,hbase会把一起访问的数据放在一个store里面,即为每个ColumnFamily建一个store,也说明一个store保存一个ColumnFamily。也说明如果有几个ColumnFamily,也就有几个Store。一个Store由一个memStore和0或者多个StoreFile组成。
MemStore
memStore 是放在内存里的。保存修改的数据即keyValues。当memStore的大小达到一个阀值时,memStore会被flush到文件,即生成一个快照。目前hbase 会有一个线程来负责memStore的flush操作。存在原因:存储在HDFS上数据要安row key排序, 而HDFS是顺序读写,不许修改,也就意味着没有为将来检索优化。为解决这个问题,在持久话到HDFS之前先排序,然后写入HDFS中。注意:每次memstore的flush,都回味每一个CF创建一个新的HFile。读书据:HBase首先检查请求的数据是否在Memstore,不在的话就到HFile中查找,最终返回merged的一个结果给用户。
迫于以下几个原因,HBase用户或者管理员需要关注Memstore并且要熟悉它是如何被使用的:
1.Memstore有许多配置可以调整以取得好的性能和避免一些问题。HBase不会根据用户自己的使用模式来调整这些配置,你需要自己来调整。
2.频繁的Memstore flush会严重影响HBase集群读性能,并有可能带来一些额外的负载。
3.Memstore flush的方式有可能影响你的HBase schema设计
配置memstore flush:
对Memstore Flush来说,主要有两组配置项:
1.决定Flush触发时机
2.决定Flush何时触发并且在Flush时候更新被阻断(block)
第一组是关于触发“普通”flush,这类flush发生时,并不影响并行的写请求。该类型flush的配置项有:
hbase.hregion.memstore.flush.size
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
<description>
Memstore will be flushed to disk if size of the memstore
exceeds this number of bytes. Value is checked by a thread that runs
every hbase.server.thread.wakefrequency.
</description>
</property>
base.regionserver.global.memstore.lowerLimit
<property>
<name>hbase.regionserver.global.memstore.lowerLimit</name>
<value>0.35</value>
<description>Maximum size of all memstores in a region server before
flushes are forced. Defaults to 35% of heap.
This value equal to hbase.regionserver.global.memstore.upperLimit causes
the minimum possible flushing to occur when updates are blocked due to
memstore limiting.
</description>
</property>
每次的Memstore Flush都会为每个CF创建一个HFile。频繁的Flush就会创建大量的HFile。这样HBase在检索的时候,就不得不读取大量的HFile,读性能会受很大影响。
为预防打开过多HFile及避免读性能恶化,HBase有专门的HFile合并处理(HFile Compaction Process)。HBase会周期性的合并数个小HFile为一个大的HFile。明显的,有Memstore Flush产生的HFile越多,集群系统就要做更多的合并操作(额外负载)。更糟糕的是:Compaction处理是跟集群上的其他请求并行进行的。当HBase不能够跟上Compaction的时候(同样有阈值设置项),会在RS上出现“写阻塞”。像上面说到的,这是最最不希望的。
Compression & Memstore Flush
HBase建议压缩存储在HDFS上的数据(比如HFiles)。除了节省硬盘空间,同样也会显著地减少硬盘和网络IO。使用压缩,当Memstore flush并将数据写入HDFS时候,数据会被压缩。压缩不会减慢多少flush的处理过程,却会大大减少以上所述问题,例如因为Memstore变大(超过 upper limit)而引起的“写阻塞”等等。
压缩库建议使用Snappy。有关Snappy的介绍及安装,可分别参考:《Hadoop压缩-SNAPPY算法》和《Hadoop HBase 配置 安装 Snappy 终极教程
http://shitouer.cn/2013/01/hadoop-hbase-snappy-setup-final-tutorial/
StoreFile
memStore内存中的数据写到文件后就是StoreFile,StoreFile是一HFile的格式保存。
HFile
HFile是HBase的存储格式。是键值对的格式,键值对都是字节数组。HFile除了存储键值对,还需要存储键值对的索引信息,主要包含六个部分。
Data Block 段–保存表中的数据,这部分可以被压缩
Meta Block 段 (可选的)–保存用户自定义的kv对,可以被压缩。
File Info 段–Hfile的元信息,不被压缩,用户也可以在这一部分添加自己的元信息。
Data Block Index 段–Data Block的索引。每条索引的key是被索引的block的第一条记录的key。
Meta Block Index段 (可选的)–Meta Block的索引。
Trailer– 这一段是定长的。保存了每一段的偏移量,读取一个HFile时,会首先读取Trailer,Trailer保存了每个段的起始位置(段的Magic Number用来做安全check),然后,DataBlock Index会被读取到内存中,这样,当检索某个key时,不需要扫描整个HFile,而只需从内存中找到key所在的block,通过一次磁盘io将整个 block读取到内存中,再找到需要的key。DataBlock Index采用LRU机制淘汰。
HFile的Data Block,Meta Block通常采用压缩方式存储,压缩之后可以大大减少网络IO和磁盘IO,随之而来的开销当然是需要花费cpu进行压缩和解压缩
分享到:
相关推荐
在设计HBase数据结构时,需要充分考虑如何利用列族、行键、时间戳等核心概念来优化数据模型和存储结构,进而提升查询效率和数据管理的灵活性。HBase的高可用性、数据压缩、预分区等高级特性也为系统设计提供了更多...
3. HBase数据模型 4. 常用shell操作 5. shell管理操作 6. Hbase Java编程 7. HBase高可用 8. HBase架构 第二章 陌陌海量存储案例 1. 案例介绍 2. 打招呼消息数据集介绍 3. 准备工作 4. 陌陌消息HBase表结构设计 5. ...
1. HBase的数据模型:HBase是基于列族的NoSQL数据库,数据以行键、列族、列限定符和时间戳的形式存储。理解这一模型对备份策略至关重要。 2. 备份方法: - HBase的快照功能:HBase支持在线快照,通过创建快照可以...
1. **数据模型转换**:Mysql使用表格形式存储数据,每行数据有固定的列,而HBase则以行键(Row Key)、列族(Column Family)、列限定符(Column Qualifier)和时间戳(Timestamp)来组织数据。在转换过程中,需要...
HBase的数据模型非常适合处理大规模稀疏数据集。 在将CSV数据导入HBase之前,我们通常需要进行预处理,这包括数据清洗、转换以及将其格式化为适合HBase的键值对。以下是一个简单的Python示例,展示如何使用...
HBase的数据模型基于列族,这使得数据的扩展性和查询效率得到了保证。结合Django的后端处理,系统可以实现对大量文献数据的快速存取和分析。 在数据挖掘部分,系统可能利用了各种算法,如TF-IDF、词频统计、关联...
HBase是Apache Hadoop的一个顶级项目,是一个支持结构化和非结构化数据存储的分布式数据库。HBase可以对大型数据提供实时的读写访问,是一个稀疏的、长期存储的、多维度的、排序的映射表。HBase的逻辑模型由行和列...
在讨论HBase的数据模型时,通常会从逻辑视图的角度来理解其如何组织和存储数据。下面将详细介绍HBase的逻辑视图中的关键概念: 1. **表(Table)**:在HBase中,数据以表格形式存储。每张表由一系列行组成,而每一行...
本文来自于csdn,主要为对HBase简介,HBase数据模型及物理模型,HBase架构及工作原理。HBase是一个构建在HDFS之上的,分布式的、面向列的开源数据库HBase是GoogleBigTable的开源实现,它主要用于存储海量数据个人...
HBase的数据模型是基于列的,它能够存储大量的稀疏数据。核心组件如HBase表、列族、行键等都是介绍的重点。 接下来,会进一步涉及分布式HBase的概念,包括HBase如何与Hadoop的文件系统(HDFS)结合,以及如何在...
《HBase概述——HBase的存储...综上所述,HBase的存储模型通过LSM树和相关机制,实现了高写入性能和数据一致性,但也需要权衡读取效率和资源管理。理解并优化这些机制,对于提升HBase在大数据环境中的表现至关重要。
为了解决半结构化时空数据的存储问题,本文提出了一种新的存储模型HSSST(HBase Semi-Structured Spatio-Temporal)模型,该模型采用半结构化方法TwigStack。这种模型能够有效地存储和管理时空数据,并支持复杂的...
在大数据时代,不同的数据存储系统各具特色,例如MySQL作为关系型数据库管理系统(RDBMS),适用于结构化数据的管理和分析;而HBase则是一种非关系型分布式数据库(NoSQL),特别适合处理海量半结构化或非结构化数据...
3. HBase数据模型和结构:表、行、列族、列名、时间戳等。 4. 预分区策略:基于分布式数据分类码,优化服务器负载均衡。 5. 文件索引策略:以文件索引替代二进制码序列,实现高效存取。 6. HBase协处理器机制:实现...
3. **预处理数据**:根据HBase的存储模型,可能需要对从Hive获取的数据进行预处理。例如,将Hive的宽表转换为HBase的窄行格式,或者按照HBase的行键规则进行数据重组。 4. **批量加载到HBase**:HBase提供了Bulk ...
- 数据转换:HBase和Hive的数据模型不同,HBase是列族存储,而Hive是表结构,所以在同步过程中需要进行数据格式的转换。 - 性能优化:大量数据同步可能会对系统性能产生影响,因此需要优化同步策略,如分批同步、...
HBase的数据模型与传统的关系型数据库不同,它不是以行或列为主导,而是以稀疏、多维度的键值对形式存储数据。这种模式使得HBase在大数据处理中表现出色,特别是在处理PB级别的数据时。 HBase的架构是无中心的,...
HBase的物理模型将逻辑模型中的每个列簇分解成单独的表进行存储,而其架构则包括一个三级结构,确保了数据的高效存储和检索。 HBase的设计初衷和架构特点使其非常适合用作栅格GIS系统的分布式存储方案。通过搭建...
HBase的数据模型基于行、列族、列和时间戳,因此数据需要按这种方式组织。 2. **编写MapReduce作业**:在Java中实现MapReduce程序,该程序包含Mapper和Reducer两个主要部分。Mapper接收输入数据(bill.txt),对每...