hadoop - Hbase 中的日志结构化合并树

标签 hadoop hbase hive hdfs

我正在研究 Hbase。我对 Hbase 如何使用 LSM 按排序顺序存储数据有疑问。

据我了解,Hbase在大规模数据处理中使用LSM Tree进行数据传输。当数据来自客户端时,它首先按顺序存储在内存中,然后排序并存储为 B-Tree 作为存储文件。比它将存储文件与磁盘 B 树(关键)合并。这是正确的吗 ?我错过了什么吗?

  • 如果是,则在集群环境中。有多个接受客户端请求的 RegionServer。在那种情况下,(每个区域服务器的)所有 Hlog 如何与磁盘 B 树合并(作为现有 key 分布在所有数据节点磁盘上)?

  • 是不是像Hlog一样只是合并同一个regionServer的Hfile的数据?

最佳答案

你可以看看这两篇文章,正是你想要的内容

http://blog.cloudera.com/blog/2012/06/hbase-io-hfile-input-output/

http://blog.cloudera.com/blog/2012/06/hbase-write-path/

简而言之:

  • 客户端向负责处理key的region server发送数据
  • (.META。包含每个区域的关键范围)
  • 将用户操作(如put)写入Write-Ahead-Log(WAL,HLog)
  • (日志仅用于“安全”,如果区域服务器崩溃,日志将被重放以恢复未写入磁盘的数据)
  • 写入日志后,数据也写入MemStore
  • ...一旦 memstore 达到阈值(conf 属性)
  • memstore 被刷新到磁盘上,创建一个 hfile
  • ...当 hfiles 的数量增长太多(conf 属性)时,压缩开始(合并)

在磁盘数据结构方面: http://blog.cloudera.com/blog/2012/06/hbase-io-hfile-input-output/ 上面的文章涵盖了 hfile 格式...... 它是一种仅附加格式,可以看作是一个 b+树。 (切记这个b+tree不能原地修改)

HLog只是为了“安全”,一旦数据写入hfiles,日志就可以扔掉

关于hadoop - Hbase 中的日志结构化合并树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13762992/

相关文章:

apache - Kerberos 升级

hadoop - hadoop中可写接口(interface)错误

hadoop - 通过 flume 将事件数据写入 HDFS 时出错

hadoop - 无法通过带有Jdbc的Hive连接到HBase

xml - 在 Hive 中使用横向 View 时出现异常

regex - 仅从 Hive 中的字符串字段中提取数字

hadoop - Hive中的持续时间计算

spring - 使用 Spring 的HBase连接失败

HBase 一对多 'relationship' 存储

java - 在 Linux Fedora Hyper-V 虚拟机上独立启动 HBase 时出错