python - HBase 的 HappyBase 和原子批量插入

标签 python hbase happybase

使用Python中HBase的HappyBase API,可以通过以下方式执行批量插入:

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() 方法采用 transactionwal 作为参数。是否可以将这些配置为在批处理中途失败时回滚成功保存的行?

happybase会在这里抛出异常,这将允许我记下行键并执行批量删除吗?

最佳答案

您是否遵循了 Happybase 文档中有关批量突变的教程?看起来你在这里混淆了一些东西。 https://happybase.readthedocs.org/en/latest/user.html#performing-batch-mutations

批处理纯粹是一种性能优化:它们避免了存储/删除的每一行往返于 Thrift 服务器,这可能会导致显着的加速。

上下文管理器行为(with block ),正如上面链接的用户指南中的大量示例所解释的那样,是一个纯粹的客户端便利 API,使应用程序代码更易于编写和推理。如果 with block 成功完成,所有突变都会一次性发送到服务器。

但是...这只是幸福的道路。如果 with block 中的某个地方引发了一些 Python 异常,该怎么办?这就是 transaction 标志发挥作用的地方:如果 True,则根本不会向服务器发送任何数据;如果 False,则任何待处理的数据都会被发送到服务器。反正脸红了。首选哪种行为很大程度上取决于您的用例。

关于python - HBase 的 HappyBase 和原子批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30565120/

相关文章:

python - 使用 alembic 获取表值并更新到另一个表。

hadoop - 映射从hbase表中减少特定区域的数据

hadoop - 增量更新 HDFS 上的数据

python - 从 Python 和 happybase/Thrift 连接到 Hbase

python - 如何使用单个 API 调用扫描 HappyBase 中的行集?

python - 有没有办法在关闭 Python 时保持 Telegram 机器人运行?

python - Scikit-learn : Input contains NaN, 无穷大或 dtype ('float64' 的值太大)

java - SparkOnHBase : NullPointerException during build tests "distributedScan"

python - 从 python (happybase) 写入 hbase 表

python - pyGTK 多行输入字段?