Apache HBase写路径

文章来源:

        Apache HBase Write Path - Cloudera Blogicon-default.png?t=L892https://blog.cloudera.com/apache-hbase-write-path/原文翻译:

Apache HBaseHadoop数据库,并基于Hadoop分布式文件系统(HDFS)。 HBase可以随机访问和更新数据存储在HDFS中,但在HDFS文件只能被附加到,创建后是不可变的。 所以你可能会问,如何HBase提供低延迟的读和写吗? 在这篇文章中,我们解释这个通过描述HBase的写作路径——HBase如何更新数据。

写路径是一个HBase完成put或delete操作。 这条路开始于一个客户,移动到一个地区的服务器,和结束时的数据最终被写入一个HBase称为数据文件HFile。 包含在写路径的设计特性,HBase使用以防止数据丢失事件的地区服务器故障。 因此理解写路径可以提供洞察HBase的本地数据损失预防机制。

每个HBase表由设置的服务器托管和管理分为三类:

  1. 一个活动主服务器
  2. 一个或多个备份主服务器
  3. 许多地区服务器

地区服务器有助于处理HBase表。 因为HBase表可以大,他们分成分区被称为区域。 每个地区服务器处理一个或多个地区。 注意,由于地区服务器是唯一服务器HBase表数据,主服务器崩溃不会导致数据丢失。

HBase数据组织类似于排序图,排序键空间划分为不同的碎片或地区。 一个HBase客户端更新一个表通过调用put或delete命令。 当一个客户机请求改变,请求被路由到一个地区的服务器在默认情况下。 然而,以编程方式,客户可以在客户端缓存的变化,和冲洗这些变化在一批区域服务器,通过把autoflush。如果autoflush关闭,修改缓存,直到flush-commits被调用时,或者缓冲区满是取决于缓冲区大小设置以编程方式或配置参数“hbase.client.write.buffer”。

由于行关键是分类,很容易确定哪些地区的服务器管理的关键。 一个变更请求为一个特定的行。 每一行键属于一个特定的区域服务的区域服务器。 所以基于put或delete键,一个HBase服务器端可以找到一个合适的区域。 首先,它位于该地区的地址服务器托管的根——从动物园管理员群体。 从根区域服务器,客户端发现的位置区域服务器托管meta -区域。 元地区的服务器,那么我们终于找到所请求的服务的实际的区域服务器区域。 这是一个三步的过程,所以缓存区域位置是为了避免这种昂贵的一系列操作。 如果缓存的位置是无效的(例如,我们得到一些未知地区除外),该地区是时候重新定位和更新缓存。

正确的区域服务器接收到请求后,立即更改无法写入HFile因为HFile中的数据必须按行排序键。 这允许搜索随机行有效地读取数据时。 数据不能随机插入到HFile。 相反,变更必须写到一个新文件。 如果每次更新写入到一个文件,许多小文件将被创建。 这样的解决方案不会是可伸缩的和有效的合并或者阅读在稍后的时间。 因此,更改不会立即写入一个新的HFile。

相反,每一个变化是在内存中被称为存储在一个地方memstore廉价和有效支持随机写道。 memstore中的数据进行排序以同样的方式作为HFile数据。 当memstore积累足够的数据,整个排序设置写入一个新的HFile HDFS。 完成一个大任务是写效率和利用HDFS的优势。

Write Path

 虽然memstore写入数据是有效的,但它也引入了风险:信息存储在memstore存储在挥发性记忆,所以如果系统失败,所有memstore信息丢失。 帮助减轻这种风险,HBase write-ahead-log保存更新(细胞膜写信息memstore之前)。 通过这种方式,如果一个地区的服务器失败,信息存储在服务器的memstore可以从其细胞膜中恢复过来。

注意:默认情况下,启用了细胞膜,但是写作的过程WAL文件到磁盘并消耗一些资源。 细胞膜可能被禁用,但只能这样做如果数据丢失的风险不是一个问题。 如果你选择禁用细胞膜,考虑实现自己的灾难恢复解决方案或数据丢失的可能性做好准备。

WAL文件中的数据组织与HFile不同。 WAL文件包含一个编辑列表,与一个编辑代表一个put或delete。 编辑包括信息的变化和区域变化适用。 编辑是按时间顺序写的,所以,对于持久性,添加附加到年底WAL存储在磁盘上的文件。 因为WAL文件命令顺序,没有一个需要编写一个随机位置内的文件。

作为细胞膜的成长,他们的最终关闭,一个新的、积极创建细胞膜文件接受额外的编辑。 这就是所谓的“滚动”WAL文件。 一旦滚WAL文件,没有额外的更改旧的文件。

默认情况下,细胞膜文件卷当其规模约95%的HDFS块大小。 您可以使用参数配置乘数:“hbase.regionserver.logroll。 乘数”,并使用参数块大小:“hbase.regionserver.hlog.blocksize”。 细胞膜文件也定期根据配置的间隔”hbase.regionserver.logroll滚。 期”,默认情况下,一个小时甚至WAL文件大小小于配置的限制。

约束的WAL文件大小促进有效文件回放如果复苏是必需的。 这回放期间尤其重要的地区犯下的文件,因为当一个文件被重播,相应的地区不可用。 最终目的是编写所有更改从每个文件到磁盘和持续HFile内容。 这样做之后,文件可以存档和LogCleaner守护线程最终删除。 请注意,WAL文件作为保护措施。 细胞膜的文件只需要重播后恢复更新,否则会丢失区域服务器崩溃。

地区服务器服务于许多地区,但是没有WAL文件为每个地区。 相反,一个活跃的WAL文件是所有区域的区域服务器之间共享。 因为WAL文件定期滚,一个地区的服务器可能会有很多WAL文件。 请注意,只有一个积极WAL每地区服务器在给定的时间。

假设默认HBase根“/ HBase”,所有地区的细胞膜文件服务器实例存储在同一根文件夹,如下:

/hbase/.logs/<host>,
<port>,<startcode>

For example:

/hbase/.logs/srv.example.com,60020,1254173957298

WAL 日志文件命名如下:

/hbase/.logs/<host>,
<port>,<startcode>/<host>%2C
<port>%2C<startcode>.<timestamp>

For example:

/hbase/.logs/srv.example.com,60020,1254173957298/srv.example.com%2C60020%2C1254173957298.1254173957495

细胞膜中的每个编辑文件有一个独特的id序列。这个id增加保存编辑的顺序。 日志文件时,滚下一个序列id和旧文件名放在一个内存映射。 这些信息是用来跟踪每个犯下的最大序列id文件,这样我们可以很容易地找出如果可以存档文件稍后当一些memstore刷新到磁盘。

编辑及其序列id在区域中是唯一的。 任何时候一个编辑添加到WAL日志,编辑的序列id也记录最后一个序列id写。 memstore刷新到磁盘时,最后一个序列id为该地区是写清除。 如果最后一个序列id写入磁盘一样WAL的最大序列id文件,可以得出的结论是,所有编辑WAL申请这个区域已经被写入磁盘。 如果所有地区的所有编辑WAL文件被写入磁盘,很明显,没有分裂或需要重放,和WAL文件可以存档。

文件滚动和memstore冲洗是两个不同的动作,并没有发生在一起。 然而,我们不想让太多的WAL文件/地区服务器,避免耗时的复苏,以防服务器故障区域。 因此,当WAL文件卷,HBase检查如果有太多WAL文件,并决定什么应该刷新,这样一些地区WAL文件可以存档。

在这篇文章中,我们解释了HBase写路径,数据如何在HBase创建和/或更新。 一些重要的部分是:

  1. 客户端如何定位区域服务器,
  2. Memstore支持快速随机写道,
  3. 细胞膜避免数据丢失文件的方法,以防地区服务器失败。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值