HappyBase 和 HBase 的原子批量插入
HappyBase and Atomic Batch Inserts for HBase
使用 HappyBase API for HBase in Python,可以通过以下方式执行批量插入:
import happybase
connection = happybase.Connection()
table = connection.table('table-name')
batch = table.batch()
# put several rows to this batch via batch.put()
batch.send()
万一这批中途失败了怎么办?已保存的行是否会继续保存,而未保存的行是否会保存?
我在 HappyBase github 中注意到 table.batch()
方法将 transaction
和 wal
作为参数。这些是否可以配置为在批处理中途失败时回滚成功保存的行?
happybase会不会在这里抛出异常,让我记下行键并执行批量删除?
我不知道 python 或 happybase。我知道交易是作为后备策略在图书馆中实施的。由于 Hbase 除了行内突变之外没有任何事务支持,库只能通过回滚它刚刚执行的操作来模拟事务。我认为代码中的这个 Batch class 就是这样做的。
The `transaction` argument specifies whether the returned
:py:class:`Batch` instance should act in a transaction-like manner when
used as context manager in a ``with`` block of code. The `transaction`
flag cannot be used in combination with `batch_size`.
The `wal` argument determines whether mutations should be
written to the HBase Write Ahead Log (WAL). This flag can only
be used with recent HBase versions. If specified, it provides
a default for all the put and delete operations on this batch.
https://github.com/wbolster/happybase/blob/master/happybase/table.py 第 460-480 行
wal也是一种性能参数。如果操作不写入 WAL,速度会更快。来自 hbase 文档;
Turning this off means that the RegionServer will not write the Put to the Write Ahead Log, only into the memstore, HOWEVER the consequence is that if there is a RegionServer failure there will be data loss.
http://hbase.apache.org/0.94/book/perf.writing.html 第 11.7.5 节
您是否遵循了 Happybase 文档中有关批量突变的教程?看起来你在这里混淆了一些东西。 https://happybase.readthedocs.org/en/latest/user.html#performing-batch-mutations
批处理纯粹是一种性能优化:它们避免为 stored/deleted 的每一行往返 Thrift 服务器,这可能会导致显着的加速。
上下文管理器行为(with
块),正如上面链接的用户指南中的大量示例所解释的那样,是一种纯粹的客户端便利性 API,它使应用程序代码更易于编写和理由。如果 with
块成功完成,所有突变都会一次性发送到服务器。
然而...那只是快乐的道路。如果在 with
块的某处引发了一些 Python 异常,该怎么办?这就是 transaction
标志发挥作用的地方:如果 True
,则根本不会向服务器发送任何数据,如果 False
,则无论如何都会刷新任何未决数据。首选哪种行为在很大程度上取决于您的用例。
使用 HappyBase API for HBase in Python,可以通过以下方式执行批量插入:
import happybase
connection = happybase.Connection()
table = connection.table('table-name')
batch = table.batch()
# put several rows to this batch via batch.put()
batch.send()
万一这批中途失败了怎么办?已保存的行是否会继续保存,而未保存的行是否会保存?
我在 HappyBase github 中注意到 table.batch()
方法将 transaction
和 wal
作为参数。这些是否可以配置为在批处理中途失败时回滚成功保存的行?
happybase会不会在这里抛出异常,让我记下行键并执行批量删除?
我不知道 python 或 happybase。我知道交易是作为后备策略在图书馆中实施的。由于 Hbase 除了行内突变之外没有任何事务支持,库只能通过回滚它刚刚执行的操作来模拟事务。我认为代码中的这个 Batch class 就是这样做的。
The `transaction` argument specifies whether the returned
:py:class:`Batch` instance should act in a transaction-like manner when
used as context manager in a ``with`` block of code. The `transaction`
flag cannot be used in combination with `batch_size`.
The `wal` argument determines whether mutations should be
written to the HBase Write Ahead Log (WAL). This flag can only
be used with recent HBase versions. If specified, it provides
a default for all the put and delete operations on this batch.
https://github.com/wbolster/happybase/blob/master/happybase/table.py 第 460-480 行
wal也是一种性能参数。如果操作不写入 WAL,速度会更快。来自 hbase 文档;
Turning this off means that the RegionServer will not write the Put to the Write Ahead Log, only into the memstore, HOWEVER the consequence is that if there is a RegionServer failure there will be data loss.
http://hbase.apache.org/0.94/book/perf.writing.html 第 11.7.5 节
您是否遵循了 Happybase 文档中有关批量突变的教程?看起来你在这里混淆了一些东西。 https://happybase.readthedocs.org/en/latest/user.html#performing-batch-mutations
批处理纯粹是一种性能优化:它们避免为 stored/deleted 的每一行往返 Thrift 服务器,这可能会导致显着的加速。
上下文管理器行为(with
块),正如上面链接的用户指南中的大量示例所解释的那样,是一种纯粹的客户端便利性 API,它使应用程序代码更易于编写和理由。如果 with
块成功完成,所有突变都会一次性发送到服务器。
然而...那只是快乐的道路。如果在 with
块的某处引发了一些 Python 异常,该怎么办?这就是 transaction
标志发挥作用的地方:如果 True
,则根本不会向服务器发送任何数据,如果 False
,则无论如何都会刷新任何未决数据。首选哪种行为在很大程度上取决于您的用例。