【问题标题】:How to bulk load data to hbase in python如何在python中将数据批量加载到hbase
【发布时间】:2017-08-20 10:43:38
【问题描述】:

我在 python 中编写了一个通过流 jar 包运行的 MR 作业。我想知道如何使用批量加载将数据放入 HBase。

我知道有两种方法可以通过批量加载将数据导入 hbase。

  1. 在 MR 作业中生成 HFiles,并使用 CompleteBulkLoad 将数据加载到 hbase。
  2. 使用 ImportTsv 选项,然后使用 CompleteBulkLoad 加载数据。

我不知道如何使用 python 生成 HFile 来适应 Hbase。然后我尝试使用 ImportTsv 实用程序。却遭遇失败。我按照这个[示例]中的说明进行操作(http://hbase.apache.org/book.html#importtsv)。但是我得到了异常:

线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/filter/Filter...

现在我想问三个问题:

  1. 是否可以使用 Python 通过流 jar 生成 HFile。
  2. 如何使用 importtsv。
  3. 可以使用批量加载来更新 Hbase 中的表。我每天都会收到一个大于 10GB 的大文件。可以使用 bulkload 将文件推送到 Hbase。

hadoop版本为:Hadoop 2.8.0

hbase版本为:HBase 1.2.6

两者都以独立模式运行。

感谢您的任何回答。

--- 更新 ---

ImportTsv 工作正常。

但我仍然想知道如何通过 Python 语言流式传输 jar 在 MR 作业中生成 HFile。

【问题讨论】:

    标签: python hadoop hbase bulk-load


    【解决方案1】:

    你可以试试happyBase

    table = connection.table("mytable")
    with table.batch(batch_size=1000) as b:
        for i in range(1200):
    
            b.put(b'row-%04d'.format(i), {
               b'cf1:col1': b'v1',
               b'cf1:col2': b'v2',
            })
    

    正如您可能已经想象的那样,Batch 将所有突变保存在内存中,直到通过显式调用 Batch.send() 或 with 块结束时发送批处理。这不适用于需要存储大量数据的应用程序,因为它可能导致批处理太大而无法在一次往返中发送,或者批处理使用太多内存。对于这些情况,可以指定 batch_size 参数。 batch_size 充当阈值:当有超过 batch_size 的待处理操作时,Batch 实例会自动发送所有待处理的突变。

    这需要一个 Thrift 服务器站在 hbase 之前。只是一个建议。

    【讨论】:

    • 感谢您的回答。但是happybase似乎不适合我的问题。大文件有点慢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多