HBase底层存储原理

【C/C++ 性能优化】了解cpu 从而进行C++ 高效编程 在当代软件开发领域,CPU(Central Processing Unit,中央处理器)的性能优化一直是一个核心议题。尤其是对于C++开发者而言,无论是在Linux平台还是其他操作系统中,都需要深刻理解CPU的工作原理以及如何充分利用CPU资源,以确保软件运行的高效性和稳定性。正如计算机科学家Donald Knuth在《计算机程序设计的艺术》中所说:“过早的优化是万恶之源”,然而,这并不意味着我们应该忽视性能优化——相反,我们需要在正确的时间以正确的方式进行优化。 阅读详情
<div id="cnblogs_post_body" class="blogpost-body"><p>理解HBase(一个开源的Google的BigTable实际应用)最大的困难是HBase的<a class="replace_word" title="算法与数据结构知识库" href="http://lib.youkuaiyun.com/base/datastructure" target="_blank">数据结构</a>概念究竟是什么?首先HBase不同于一般的关系<a class="replace_word" title="MySQL知识库" href="http://lib.youkuaiyun.com/base/mysql" target="_blank">数据库</a>,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式.</p>
<p>Google's <a href="http://labs.google.com/papers/bigtable.html">BigTable论文</a> 清楚地解释了什么是BigTable:<br>
Bigtable是一个疏松的分布式的持久的多维排序的map,这个map被行键,列键,和时间戳索引.每一个值都是连续的byte数组.(A
Bigtable is a sparse, distributed, persistent multidimensional sorted
map. The map is indexed by a row key, column key, and a timestamp; each
value in the map is an uninterpreted array of bytes.)</p>
<p><a class="replace_word" title="Hadoop知识库" href="http://lib.youkuaiyun.com/base/hadoop" target="_blank">Hadoop</a> wiki的<a href="http://wiki.apache.org/hadoop/Hbase/HbaseArchitecture">HBase架构</a> 页面提到:<br>
HBase使用和Bigtable非常相同的数据模型.用户存储数据行在一个表里.一个数据行拥有一个可选择的键和任意数量的列.表是疏松的存储的,因此
用户可以给行定义各种不同的列.(HBase uses a data model very similar to that of
Bigtable. Users store data rows in labelled tables. A data row has a
sortable key and an arbitrary number of columns. The table is stored
sparsely, so that rows in the same table can have crazily-varying
columns, if the user likes.)</p>
<p>&nbsp;</p>
<p>一、架构思路</p>
<p>&nbsp; &nbsp; Hbase是基于Hadoop的项目,所以一般情况下我们使用的直接就是HDFS文件系统,这里我们不深谈HDFS如何构造其分布式的文件系统,只需要知 道虽然Hbase中有多个RegionServer的概念,并不意味着数据是持久化在RegionServer上的,事实上,RegionServer是 调度者,管理Regions,但是数据是持久化在HDFS上的。明确这一点,在后面的讨论中,我们直接把文件系统抽象为HDFS,不再深究。</p>
<p>&nbsp;</p>
<p>&nbsp; &nbsp; Hbase是一个分布式的数据库,使用Zookeeper来管理集群。在架构层面上分为Master(Zookeeper中的leader)和多个RegionServer,基本架构如图:</p>
<p><br><img src="http://dl.iteye.com/upload/attachment/0076/9504/d05f66d8-c3e6-31c1-b0de-b707435fc25f.png" alt=""></p>
<p>&nbsp; &nbsp; 
在Hbase的概念中,RegionServer对应于集群中的一个节点,而一个RegionServer负责管理多个Region。一个Region代
表一张表的一部分数据,所以在Hbase中的一张表可能会需要很多个Region来存储其数据,但是每个Region中的数据并不是杂乱无章
的,Hbase在管理Region的时候会给每个Region定义一个Rowkey的范围,落在特定范围内的数据将交给特定的Region,从而将负载分
摊到多个节点上,充分利用分布式的优点。另外,Hbase会自动的调节Region处在的位置,如果一个RegionServer变得Hot(大量的请求
落在这个Server管理的Region上),Hbase就会把Region移动到相对空闲的节点,依次保证集群环境被充分利用。</p>
<p>&nbsp;</p>
<p>二、存储模型</p>
<p>&nbsp; &nbsp; 
有了架构层面的保证,接下来的事情就只是关注于数据的具体存储了。这里就是每个Region所承担的工作了。我们知道一个Region代表的是一张
Hbase表中特定Rowkey范围内的数据,而Hbase是面向列存储的数据库,所以在一个Region中,有多个文件来存储这些列。Hbase中数据
列是由列簇来组织的,所以每一个列簇都会有对应的一个数据结构,Hbase将列簇的存储数据结构抽象为Store,一个Store代表一个列簇。</p>
<p><br><img src="http://dl.iteye.com/upload/attachment/0076/9523/41a6ad6f-7077-3a4e-9257-46bc7948c928.png" alt=""><br>&nbsp; &nbsp; &nbsp;所以在这里也可以看出为什么在我们查询的时候要尽量减少不需要的列,而经常一起查询的列要组织到一个列簇里:因为要需要查询的列簇越多,意味着要扫描越多的Store文件,这就需要越多的时间。</p>
<p>&nbsp;</p>
<p>&nbsp; &nbsp; 我们来深入Store中存储数据的方式。Hbase的实现是用了一种LSM 树的结构!</p>
<p>LSM树是由B+树改进而来,所以我们首先来简单的看看B+树。</p>
<p><br><img src="http://dl.iteye.com/upload/attachment/0076/9514/134069a3-720c-3421-8bb0-659aa8cab9df.png" alt=""></p>
<p>


&nbsp;</p>
<p>&nbsp; &nbsp; 
这是一颗简单的B+树,含义不言而喻,这里不多分析,但是这种数据结构并不适合Hbase中的应用场景。这样的数据结构在内存中效率是很高的,但是
Hbase中数据是存储在文件中的,如果按照这样的结构来存储,意味着我们每一次插入数据都要由一级索引找到文件再在文件中间作操作来保证数据的有序性,
这无疑是效率低下的。所以Hbase采用的是LSM树的结构,这种结构的关键是,每一次的插入操作都会先进入MemStore(内存缓冲区),当
MemStore达到上限的时候,Hbase会将内存中的数据输出为有序的StoreFile文件数据(根据Rowkey、版本、列名排序,这里已经和列
簇无关了因为Store里都属于同一个列簇)。这样会在Store中形成很多个小的StoreFile,当这些小的File数量达到一个阀值的时
候,Hbase会用一个线程来把这些小File合并成一个大的File。这样,Hbase就把效率低下的文件中的插入、移动操作转变成了单纯的文件输出、
合并操作。</p>
<p>&nbsp;</p>
<p>&nbsp; &nbsp; 
由上可知,在Hbase底层的Store数据结构中,每个StoreFile内的数据是有序的,但是StoreFile之间不一定是有序的,Store只
需要管理StoreFile的索引就可以了。这里也可以看出为什么指定版本和Rowkey可以加强查询的效率,因为指定版本和Rowkey的查询可以利用
StoreFile的索引跳过一些肯定不包含目标数据的数据。</p>
<p>&nbsp;</p>
<p><img src="http://dl.iteye.com/upload/attachment/0076/9584/acabc47a-6acc-3630-a5d4-0e1538941177.png" alt=""></p>
<p>&nbsp;</p>
<h1 id="1">HBase vs Cassandra</h1>
<table>
<thead>
<tr><th>&nbsp;</th><th>HBase</th><th>Cassandra</th></tr>
</thead>
<tbody>
<tr>
<td>语言</td>
<td>Java</td>
<td>Java</td>
</tr>
<tr>
<td>出发点</td>
<td>BigTable</td>
<td>BigTable and Dynamo</td>
</tr>
<tr>
<td>License</td>
<td>Apache</td>
<td>Apache</td>
</tr>
<tr>
<td>Protocol</td>
<td>HTTP/REST (also Thrift)</td>
<td>Custom, binary (Thrift)</td>
</tr>
<tr>
<td>数据分布</td>
<td>表划分为多个region存在不同region server上</td>
<td>改进的一致性哈希(虚拟节点)</td>
</tr>
<tr>
<td>存储目标</td>
<td>大文件</td>
<td>小文件</td>
</tr>
<tr>
<td>一致性</td>
<td>强一致性</td>
<td>最终一致性,Quorum NRW策略</td>
</tr>
<tr>
<td>架构</td>
<td>master/slave</td>
<td>p2p</td>
</tr>
<tr>
<td>高可用性</td>
<td>NameNode是HDFS的单点故障点</td>
<td>P2P和去中心化设计,不会出现单点故障</td>
</tr>
<tr>
<td>伸缩性</td>
<td>Region Server扩容,通过将自身发布到Master,Master均匀分布Region</td>
<td>扩容需在Hash Ring上多个节点间调整数据分布</td>
</tr>
<tr>
<td>读写性能</td>
<td>数据读写定位可能要通过最多6次的网络RPC,性能较低。</td>
<td>数据读写定位非常快</td>
</tr>
<tr>
<td>数据冲突处理</td>
<td>乐观并发控制(optimistic concurrency control)</td>
<td>向量时钟</td>
</tr>
<tr>
<td>临时故障处理</td>
<td>Region Server宕机,重做HLog</td>
<td>数据回传机制:某节点宕机,hash到该节点的新数据自动路由到下一节点做 hinted handoff,源节点恢复后,推送回源节点。</td>
</tr>
<tr>
<td>永久故障恢复</td>
<td>Region Server恢复,master重新给其分配region</td>
<td>Merkle 哈希树,通过Gossip协议同步Merkle Tree,维护集群节点间的数据一致性</td>
</tr>
<tr>
<td>成员通信及错误检测</td>
<td>Zookeeper</td>
<td>基于Gossip</td>
</tr>
<tr>
<td>CAP</td>
<td>1,强一致性,0数据丢失。2,可用性低。3,扩容方便。</td>
<td>1,弱一致性,数据可能丢失。2,可用性高。3,扩容方便。</td>
</tr>
</tbody>
</table>
<h1 id="2">转自:https://yq.aliyun.com/articles/25706</h1></div>

推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐,业界广告推荐技术最新进展 推荐算法其实本质上是一种信息处理逻辑,当获取了用户与内容的信息之后,按照一定的逻辑处理信息后,产生推荐结果。热度排行榜就是最简单的一种推荐方法,它依赖的逻辑就是当一个内容被大多数用户喜欢,那大概率其他用户也会喜欢。但是基于粗放的推荐往往会不够精确,想要挖掘用户个性化的,小众化的兴趣,需要制定复杂的规则运算逻辑,并由机器完成。召回:当用户以及内容量比较大的时候,往往先通过召回策略,将百万量级的内容先缩小到百量级。 阅读详情

相关推荐

Mac OS X 工具技巧:一文搞定个性化命令行窗口(iTerm2 + zsh + oh-my-zsh 配置Powerline风格)

本不想写这篇文章的,因为在Linux下已经配置过很多次,想着mac应该找篇文章一次就搞定了,结果还是踩坑,看了很多文章,不是某一点没不清楚,就是截图有问题或者命令有问题,官网又难得找等等……花了3个多小时才搞定,所以,还是来总结一篇文章就能够搞定的教程。 为什么要用zsh?用了这么多年的bash,不能说bash不好,不过当我用了zsh后发现,什么叫更好用。 配置过程稍微有点繁琐,但是你看过效果...

mickjoust的技术小屋 1万+

HBase数据库是怎样存储数据的?

4.MemStore中存储的是用户写入的数据,一旦MemStore存储达到阈值时,里面存储的数据就会被刷新到新生成的StoreFile中(底层是HFile),该文件是以HFile的格式存储到HDFS上,具体如图4所示。2.每个Region存储的数据是有限的,如果当Region增大到一个阀值(128)时,会被等分切成两个新的Region,切分方式如图2所示。1.HBase表的数据按照行键RowKey的字典序进行排列,并且切分多个HRegion存储,存储方式如图1所示。​ 图1 Region在行方向上的存储。

zy1992As的博客 2022

Ansys Circuit新手必看:IBIS模型导入时,Pin Import和Buffer Import到底怎么选?

本文详细解析了Ansys Circuit中IBIS模型导入时Pin Import与Buffer Import的选择策略,帮助SI/PI工程师根据仿真需求做出正确决策。通过对比两种方式的特性差异和应用场景,提供实用的选择指南和性能优化建议,提升信号完整性仿真效率。

weixin_26846533的博客 262

Hbase底层数据结构

理解HBase(一个开源的Google的BigTable实际应用)最大的困难是HBase的数据结构概念究竟是什么?首先HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式. Google's BigTable论文 清楚地解释了什么是BigTable: Bigtable是一个疏松的分布式的持久的多维排序的map,这个ma

qq_36998916的博客 1484

【QGIS】【OsGeo4w】安装方法

every blog every motto: You will never know unless you try 0. 前言 因为目前要使用QGIS,然而环境配置就整了大半天,哎,进行简单记录,方便自己方便他人。 一共分为两种方式安装: 独立安装包 网络安装包(下载osgeo4w-setup) QGIS提供了不同的版本: 长期发行版(LTR) 最新版(LR) 开发人员版本(DEV,母版或测试版) 说明: 本文推荐第二种 1. 正文 1.1 下载osgeo4w 下载链接 下载完成: 1.2

胡侃有料的博客 2万+

Unity Addressable资源缓存路径自定义指南:告别C盘爆满烦恼

本文详细介绍了如何自定义Unity Addressable系统的资源缓存路径,解决其默认存储在C盘导致的磁盘空间不足问题。通过配置CacheInitializationSettings并编写编辑器脚本,开发者可以将缓存迁移至项目目录,实现资源的集中管理,提升团队协作效率与开发环境一致性。

pytorch8learner的博客 475

HBase底层原理

一、HBase 架构原理 1、StoreFile 保存实际数据的物理文件,StoreFile 以 HFile 的形式存储在 HDFS 上。每个 Store 会有一个或多个 StoreFile(HFile),数据在每个 StoreFile 中都是有序的。 2、MemStore 写缓存,由于 HFile 中的数据要求是有序的,所以数据是先存储在 MemStore 中,排好序后,等到刷写时机才会刷写到...

a1786742005的博客 692

HBase介绍

HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从HBase的底层物理存储结构(K-V)来看,HBase更像是一个multi-dimensional map(多维地图)。 1)Name Space命名空间,类似于关系型数据库的database概念,每个命名空间下有多个表。HBase两个自带的命名空间,分别是hbase和default,hbase中存放的是HBase内置的表,default表是用户默认使用的

weixin_69402201的博客 2万+

《探秘 BME680温度湿度气压气体传感器模块:环境感知的卓越之选》:此文为AI自动生成

BME680 是一款由博世公司推出的集成环境传感器模块,在环境监测和物联网等领域中发挥着重要作用。它能够同时测量温度、湿度、气压和气体浓度等多个环境参数,为各种应用提供准确可靠的环境数据。该模块采用小巧的封装形式,便于集成到各种设备中,无论是智能家居、可穿戴设备还是工业监测系统,都能轻松适配。例如,在智能家居系统中,BME680 模块可以监测室内环境参数,如温度、湿度、气压和空气质量等。通过与智能家居控制器或智能手机应用程序的连接,用户可以实时了解室内环境状况,并根据需要进行调整。

zheng_ruiguo的专栏 1868

运维系列【仅供参考】:微信版本过低 使用CheatEngine绕过

微信版本过低 使用CheatEngine绕过

weixin_54626591的博客 2135

一、Hbase介绍、数据模型、体系结构

一、Hbase介绍、数据模型、体系结构

Shyllin的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

HBase的底层存储原理

HBase的底层存储原理 HBase下载地址:http://archive.apache.org/dist/hbase HBase是分布式面向列(基于列)的Nosql数据库,表形式存储数据 Rowkey | CF1 | CF2 记录1 | 列1…列n | 列1…列n 纪录2 … CF表示引入的概念“列簇”,抽...

qq_44796583的博客 961

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

HBase 底层原理(物理存储)

======================物理 存储====================== 整体 结构 1 Table中的所有行都按照row key的字典序排列。 2 Table 在行的方向上分割为多个Hregion。 3 region按大小分割的(默认10G),每个表一开始只有一个region,随着数据不断插入表,region不断增大, 当增大到一个阈值的时候,Hre...

最慢的步伐不是跬步,而是徘徊;最快的脚步不是冲刺,而是坚持 7342

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

转:HBase底层存储原理

HBase底层存储原理——我靠,和cassandra本质上没有区别啊!都是kv 列存储,只是一个是p2p另一个是集中式而已!   首先HBase不同于一般的关系数据库, 它是一个适合于非结构化数据存储的数据库. 另一个不同的是HBase基于列的而不是基于行的模式.   什么是BigTable: Bigtable是一个疏松的分布式的持久的多维排序的map, 这个map被行键,列键,和时...

253

HBASE简介及底层存储原理

HBase概述 HBase是一个领先的NoSQL数据库 是一个面向列存储的NoSQL数据库 是一个分布式Hash Map,底层数据是Key-Value格式 基于Google Big Table论文 使用HDFS作为存储并利用其可靠性 HBase特点 数据访问速度快,响应时间约2-20毫秒 支持随机读写,每个节点20k~100k+ ops/s 可扩展性,可扩展到20,000+节点 高并发 应用场景: 1、增量数据-时间序列数据 高容量,高速写入 HBase之上有OpenTSDB模块,可以满足时序类场景 2、信

sunbin11220904的博客 3320

HBase底层框架.原理.数据存储

--HBase技术介绍 HBase简介HBase –Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase是GoogleBigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用HadoopHDFS作为其文件存储系统;Google运行...

雷文 4340

Hbase原理(底层原理,存储架构,寻址策略,读写流程,master和Regionserver的工作机制)

目录 1.hbase的底层逻辑架构 2.hbase的底层物理存储原理 3.hbase的寻址机制 4.hbase的读写过程 5.master和Regionserver的工作机制 1.hbase的底层逻辑架构 (1)新旧版本的hbase的架构区别 这是旧版本的hbase的架构图,一个regionserver中只有一个Hlog。 这一张是新版本的图,每一个regionserver中可以有30个Hlog...

qichangjian的博客 2013

HBase底层原理(系统架构、表数据模型、物理存储、读写过程、Region管理、Master工作机制)

一、系统架构 Client 1 包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如regione的位置信息。 Zookeeper 1 保证任何时候,集群中只有一个master 2 存贮所有Region的寻址入口 3 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master 4 存储Hbase的s...

依旧的博客 4033

Hbase底层原理简介(一)

Hbase底层原理简介(一)

cucgyfjklx的博客 8839

HBase --- 底层原理(系统架构,表数据模型,物理存储,读写过程,Region管理,Master工作机制)

hbase系统架构 Client 1 包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如regione的位置信息。 Zookeeper 1 保证任何时候,集群中只有一个master 2 存贮所有Region的寻址入口 3 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master 4 存储Hb...

kismet 2247

HBase 底层原理(系统架构、物理存储、寻址机制、读写过程、主从节点工作机制)

HBase 底层原理(系统架构、物理存储、寻址机制、读写过程、主从节点工作机制)1、系统架构2、物理存储2.1、整体物理结构2.2、StoreFile 和 HFile 结构2.3、MemStore 和 StoreFile2.4、HLog(WAL)3、寻址机制3.1、老的 Region 寻址方式3.2、新的 Region 寻址方式4、读写过程4.1、读请求过程4.2、写请求过程5、RegionServer 工作机制6、Master 工作机制 1、系统架构 每一个 RegionServer 就只有一个 HLo

weixin_44387652的博客 1371

hbase phnoniex数据大时建索引没有反应_HBase 底层原理详解(深度好文,建议收藏)...

HBase简介HBase 是一个分布式的、面向列的开源数据库。建立在 HDFS 之上。Hbase的名字的来源是 Hadoop database,即 Hadoop 数据库。HBase 的计算和存储能力取决于 Hadoop 集群。它介于 NoSql 和 RDBMS 之间,仅能通过主键(row key)和主键的 range 来检索数据,仅支持单行事务(可通过 Hive 支持来实现多表 join 等复杂操...

weixin_36073654的博客 209
上一篇: pycharm license server
下一篇: UnicodeDecodeError: 'ascii' codec can't decode byte... Python编码问题
Always0nTheWay
博客等级 码龄10年 84粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值