Ami*_*gar 5 hadoop hbase hive hdfs
我正在研究Hbase.我查询了Hbase如何使用LSM按排序顺序存储数据.
据我了解,Hbase使用LSM Tree进行大规模数据处理中的数据传输.当Data来自客户端时,它首先按顺序存储在内存中,然后排序并存储为B-Tree作为Store文件.而不是将Store文件与磁盘B-Tree(密钥)合并.这是对的吗 ?我错过了什么吗?
如果是,则在群集环境中.有多个RegionServers接受客户端请求.在这种情况下,所有Hlog(每个regionServer)如何与磁盘B-Tree合并(因为现有密钥分布在所有dataNode磁盘上)?
是否像Hlog只将数据与同一regionServer的Hfile合并?
小智 9
您可以看看这两篇文章,它们准确描述了您的需求
http://blog.cloudera.com/blog/2012/06/hbase-io-hfile-input-output/
http://blog.cloudera.com/blog/2012/06/hbase-write-path/
简单来说:
关于磁盘数据结构:http: //blog.cloudera.com/blog/2012/06/hbase-io-hfile-input-output/ 上面的文章介绍了hfile格式......这是一种仅附加格式,并且可以看作是一个b +树.(请记住,这个b +树不能在适当的位置修改)
HLog仅用于"安全",一旦将数据写入hfiles,就可以丢弃日志
根据 HBase 中的 LSM 树模型,数据由两部分组成:内存树,其中包含数据的最新更新;磁盘存储树,将数据的其余部分排列成位于以下位置的不可变顺序 B 树的形式:硬盘驱动器。HBase 服务有时会认为内存中有足够的更改,可以将它们刷新到文件存储中。在这种情况下,它执行从虚拟空间到磁盘的数据滚动合并,执行类似于合并排序算法的合并步骤的操作。
在 HBase 基础设施中,此类数据模型基于多个组件,这些组件将集群中的所有数据组织为位于从属服务器上并由主主服务驱动的 LSM 树集合。该系统由以下组件驱动:
HMaster - 主要 HBase 服务,通过管理和平衡从属 Region Server 节点之间的数据来维护从属 Region Server 节点的正确状态。此外,它还驱动存储中元数据信息的更改,例如表或列的创建和更新。
Zookeeper - 代表 HBase 服务及其客户端使用的分布式缓存,用于存储有关命名和配置的最新协调信息。
区域服务器- HBase 工作节点,以 LSM 树方式执行信息片段的管理和存储 HDFS - 区域服务器在后台使用它来实际存储数据
从底层来看,HBase 功能的大部分位于区域服务器内,该服务器对表执行读写工作。从技术上讲,每个表都可以作为称为 HRegions 的单独部分的集合分布在不同的区域服务器上。单个区域服务器节点可以容纳一张表的多个HRegion。每个 HRegion 保存在内存和磁盘空间之间共享的一定范围的行,并按键属性排序。这些范围在不同区域之间不相交,因此我们可以在集群中依赖它们的顺序行为。单个区域服务器HRegion包括以下部分:
预写日志 (WAL) 文件- 在进入内存之前在每次写入操作中保存数据的第一个位置。正如我之前提到的,LSM 树的第一部分保存在内存中,这意味着它可能会受到一些外部因素的影响,例如示例中的断电。将此类操作的日志文件保存在单独的位置可以轻松恢复这部分而不会出现任何丢失。
Memstore - 在内存中保存最新信息更新的排序集合。它是前面描述的 LMS 树结构第一部分的实际实现。定期滚动合并到本地硬盘上名为 HFiles 的存储文件中
HFile - 表示从 Memstore 接收并保存在 HDFS 中的一小段数据。每个 HFile 都包含排序的 KeyValues 集合和 B-Tree+ 索引,允许在不读取整个文件的情况下查找数据。HBase 定期对这些文件执行合并排序操作,使它们适合标准 HDFS 块的配置大小,避免小文件问题
您可以通过推送数据并将其传递到整个 LSM 树进程来手动浏览这些元素。我在最近的文章中描述了如何做到这一点:
https://oyermolenko.blog/2017/02/21/hbase-as-primary-nosql-hadoop-storage/
归档时间: |
|
查看次数: |
13171 次 |
最近记录: |