<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> </p>
<p>一、架构思路</p>
<p> Hbase是基于Hadoop的项目,所以一般情况下我们使用的直接就是HDFS文件系统,这里我们不深谈HDFS如何构造其分布式的文件系统,只需要知 道虽然Hbase中有多个RegionServer的概念,并不意味着数据是持久化在RegionServer上的,事实上,RegionServer是 调度者,管理Regions,但是数据是持久化在HDFS上的。明确这一点,在后面的讨论中,我们直接把文件系统抽象为HDFS,不再深究。</p>
<p> </p>
<p> 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>
在Hbase的概念中,RegionServer对应于集群中的一个节点,而一个RegionServer负责管理多个Region。一个Region代
表一张表的一部分数据,所以在Hbase中的一张表可能会需要很多个Region来存储其数据,但是每个Region中的数据并不是杂乱无章
的,Hbase在管理Region的时候会给每个Region定义一个Rowkey的范围,落在特定范围内的数据将交给特定的Region,从而将负载分
摊到多个节点上,充分利用分布式的优点。另外,Hbase会自动的调节Region处在的位置,如果一个RegionServer变得Hot(大量的请求
落在这个Server管理的Region上),Hbase就会把Region移动到相对空闲的节点,依次保证集群环境被充分利用。</p>
<p> </p>
<p>二、存储模型</p>
<p>
有了架构层面的保证,接下来的事情就只是关注于数据的具体存储了。这里就是每个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> 所以在这里也可以看出为什么在我们查询的时候要尽量减少不需要的列,而经常一起查询的列要组织到一个列簇里:因为要需要查询的列簇越多,意味着要扫描越多的Store文件,这就需要越多的时间。</p>
<p> </p>
<p> 我们来深入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>
</p>
<p>
这是一颗简单的B+树,含义不言而喻,这里不多分析,但是这种数据结构并不适合Hbase中的应用场景。这样的数据结构在内存中效率是很高的,但是
Hbase中数据是存储在文件中的,如果按照这样的结构来存储,意味着我们每一次插入数据都要由一级索引找到文件再在文件中间作操作来保证数据的有序性,
这无疑是效率低下的。所以Hbase采用的是LSM树的结构,这种结构的关键是,每一次的插入操作都会先进入MemStore(内存缓冲区),当
MemStore达到上限的时候,Hbase会将内存中的数据输出为有序的StoreFile文件数据(根据Rowkey、版本、列名排序,这里已经和列
簇无关了因为Store里都属于同一个列簇)。这样会在Store中形成很多个小的StoreFile,当这些小的File数量达到一个阀值的时
候,Hbase会用一个线程来把这些小File合并成一个大的File。这样,Hbase就把效率低下的文件中的插入、移动操作转变成了单纯的文件输出、
合并操作。</p>
<p> </p>
<p>
由上可知,在Hbase底层的Store数据结构中,每个StoreFile内的数据是有序的,但是StoreFile之间不一定是有序的,Store只
需要管理StoreFile的索引就可以了。这里也可以看出为什么指定版本和Rowkey可以加强查询的效率,因为指定版本和Rowkey的查询可以利用
StoreFile的索引跳过一些肯定不包含目标数据的数据。</p>
<p> </p>
<p><img src="http://dl.iteye.com/upload/attachment/0076/9584/acabc47a-6acc-3630-a5d4-0e1538941177.png" alt=""></p>
<p> </p>
<h1 id="1">HBase vs Cassandra</h1>
<table>
<thead>
<tr><th> </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>相关推荐
Mac OS X 工具技巧:一文搞定个性化命令行窗口(iTerm2 + zsh + oh-my-zsh 配置Powerline风格)
本不想写这篇文章的,因为在Linux下已经配置过很多次,想着mac应该找篇文章一次就搞定了,结果还是踩坑,看了很多文章,不是某一点没不清楚,就是截图有问题或者命令有问题,官网又难得找等等……花了3个多小时才搞定,所以,还是来总结一篇文章就能够搞定的教程。 为什么要用zsh?用了这么多年的bash,不能说bash不好,不过当我用了zsh后发现,什么叫更好用。 配置过程稍微有点繁琐,但是你看过效果...
HBase数据库是怎样存储数据的?
4.MemStore中存储的是用户写入的数据,一旦MemStore存储达到阈值时,里面存储的数据就会被刷新到新生成的StoreFile中(底层是HFile),该文件是以HFile的格式存储到HDFS上,具体如图4所示。2.每个Region存储的数据是有限的,如果当Region增大到一个阀值(128)时,会被等分切成两个新的Region,切分方式如图2所示。1.HBase表的数据按照行键RowKey的字典序进行排列,并且切分多个HRegion存储,存储方式如图1所示。 图1 Region在行方向上的存储。
Ansys Circuit新手必看:IBIS模型导入时,Pin Import和Buffer Import到底怎么选?
本文详细解析了Ansys Circuit中IBIS模型导入时Pin Import与Buffer Import的选择策略,帮助SI/PI工程师根据仿真需求做出正确决策。通过对比两种方式的特性差异和应用场景,提供实用的选择指南和性能优化建议,提升信号完整性仿真效率。
Hbase底层数据结构
理解HBase(一个开源的Google的BigTable实际应用)最大的困难是HBase的数据结构概念究竟是什么?首先HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式. Google's BigTable论文 清楚地解释了什么是BigTable: Bigtable是一个疏松的分布式的持久的多维排序的map,这个ma
【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
Unity Addressable资源缓存路径自定义指南:告别C盘爆满烦恼
本文详细介绍了如何自定义Unity Addressable系统的资源缓存路径,解决其默认存储在C盘导致的磁盘空间不足问题。通过配置CacheInitializationSettings并编写编辑器脚本,开发者可以将缓存迁移至项目目录,实现资源的集中管理,提升团队协作效率与开发环境一致性。
HBase底层原理
一、HBase 架构原理 1、StoreFile 保存实际数据的物理文件,StoreFile 以 HFile 的形式存储在 HDFS 上。每个 Store 会有一个或多个 StoreFile(HFile),数据在每个 StoreFile 中都是有序的。 2、MemStore 写缓存,由于 HFile 中的数据要求是有序的,所以数据是先存储在 MemStore 中,排好序后,等到刷写时机才会刷写到...
HBase介绍
HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从HBase的底层物理存储结构(K-V)来看,HBase更像是一个multi-dimensional map(多维地图)。 1)Name Space命名空间,类似于关系型数据库的database概念,每个命名空间下有多个表。HBase两个自带的命名空间,分别是hbase和default,hbase中存放的是HBase内置的表,default表是用户默认使用的
《探秘 BME680温度湿度气压气体传感器模块:环境感知的卓越之选》:此文为AI自动生成
BME680 是一款由博世公司推出的集成环境传感器模块,在环境监测和物联网等领域中发挥着重要作用。它能够同时测量温度、湿度、气压和气体浓度等多个环境参数,为各种应用提供准确可靠的环境数据。该模块采用小巧的封装形式,便于集成到各种设备中,无论是智能家居、可穿戴设备还是工业监测系统,都能轻松适配。例如,在智能家居系统中,BME680 模块可以监测室内环境参数,如温度、湿度、气压和空气质量等。通过与智能家居控制器或智能手机应用程序的连接,用户可以实时了解室内环境状况,并根据需要进行调整。
运维系列【仅供参考】:微信版本过低 使用CheatEngine绕过
微信版本过低 使用CheatEngine绕过
一、Hbase介绍、数据模型、体系结构
一、Hbase介绍、数据模型、体系结构
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表示引入的概念“列簇”,抽...
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...
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
转:HBase底层存储原理
HBase底层存储原理——我靠,和cassandra本质上没有区别啊!都是kv 列存储,只是一个是p2p另一个是集中式而已! 首先HBase不同于一般的关系数据库, 它是一个适合于非结构化数据存储的数据库. 另一个不同的是HBase基于列的而不是基于行的模式. 什么是BigTable: Bigtable是一个疏松的分布式的持久的多维排序的map, 这个map被行键,列键,和时...
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、信
HBase底层框架.原理.数据存储
--HBase技术介绍 HBase简介HBase –Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase是GoogleBigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用HadoopHDFS作为其文件存储系统;Google运行...
Hbase原理(底层原理,存储架构,寻址策略,读写流程,master和Regionserver的工作机制)
目录 1.hbase的底层逻辑架构 2.hbase的底层物理存储原理 3.hbase的寻址机制 4.hbase的读写过程 5.master和Regionserver的工作机制 1.hbase的底层逻辑架构 (1)新旧版本的hbase的架构区别 这是旧版本的hbase的架构图,一个regionserver中只有一个Hlog。 这一张是新版本的图,每一个regionserver中可以有30个Hlog...
HBase底层原理(系统架构、表数据模型、物理存储、读写过程、Region管理、Master工作机制)
一、系统架构 Client 1 包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如regione的位置信息。 Zookeeper 1 保证任何时候,集群中只有一个master 2 存贮所有Region的寻址入口 3 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master 4 存储Hbase的s...
Hbase底层原理简介(一)
Hbase底层原理简介(一)
HBase --- 底层原理(系统架构,表数据模型,物理存储,读写过程,Region管理,Master工作机制)
hbase系统架构 Client 1 包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如regione的位置信息。 Zookeeper 1 保证任何时候,集群中只有一个master 2 存贮所有Region的寻址入口 3 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master 4 存储Hb...
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
hbase phnoniex数据大时建索引没有反应_HBase 底层原理详解(深度好文,建议收藏)...
HBase简介HBase 是一个分布式的、面向列的开源数据库。建立在 HDFS 之上。Hbase的名字的来源是 Hadoop database,即 Hadoop 数据库。HBase 的计算和存储能力取决于 Hadoop 集群。它介于 NoSql 和 RDBMS 之间,仅能通过主键(row key)和主键的 range 来检索数据,仅支持单行事务(可通过 Hive 支持来实现多表 join 等复杂操...
1万+



被折叠的 条评论
为什么被折叠?



