【问题标题】:How to use a HBase secondary index table as and input in a MapReduce Job?如何使用 HBase 二级索引表作为 MapReduce 作业的输入?
【发布时间】:2019-04-23 13:18:49
【问题描述】:

我是 HBase 的新手,我有一个带有 rowkey =id-YYYYMMDD 的主表,一个带有 rowkey =YYYYMMDD-id 的二级索引表和一个带有主表中 rowkey 的列。在不久的将来我将拥有大约 100 万个 id,我需要创建一个 MapReduce 作业来汇总给定日期 (YYYYMMDD) 中的 id。

如何将二级索引表传递给 mapreduce 作业,以便在主表中运行相应的“get(rowkey)”以获取列并汇总数据?

【问题讨论】:

    标签: hadoop mapreduce hbase


    【解决方案1】:

    你有两个选择:

    1. 首先对索引表运行扫描。 Scan 会有 startRowstopRow(例如 '20190401' 和 '20190402'),因此它会扫描一个连续的键空间区域并从主表中收集 ID。时间复杂度为 O(M),其中 M 是给定批次中的项目数。然后,您使用 Get 按 id 从主表请求数据。
    2. 由于您将日期作为主表键的一部分,因此您可以使用键过滤执行 MapReduce 扫描,它将在 O(N/P) 中运行,其中 N 是表中的总行数,P是集群的并行度。

    【讨论】:

    • 使用选项 1,您的意思是我必须使用索引表作为 tableinputformat 并在映射函数中使用 Get 获取索引表中扫描的每一行?。我认为选项 2 需要全表扫描,对吗?
    • @RADU 是的,你理解正确。关于选项 2 - 在 HBase 中使用 RowKeyFilter 很便宜,因为过滤是在服务器端完成的,所以您不会将数据提取到映射器,这与过滤器不匹配
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多