当前位置: 首页 > 知识库问答 >
问题:

尝试确认我对HBase和MapReduce行为的理解

朱梓
2023-03-14

我正在尝试对我的HBase数据集进行一些处理。但我对HBase和Hadoop生态系统还是个新手。

我想从这个社区得到一些反馈,看看我对HBase和它上的MapReduce操作的理解是否正确。

这里的一些背景:

    null

为了简化这个问题,我将以正式的行计数器实现为例,我想确认我的知识是正确的。

所以我对HBase和MapReduce的问题是:

>

  • 在RowCounter的最简单形式中(没有任何可选参数),它实际上是一个全表扫描。HBase遍历表中的所有记录,并将行发出到RowCounterMapper中的map方法。这是正确的吗?

    在我们的例子中,我们可能需要根据修改后的时间过滤数据。在这种情况下,我们可以使用scan.setTimeRange()来限制数据集的范围。我的问题是,既然HBase没有索引时间戳,那么这个扫描是否会变成一个全表扫描,并且与我们仅仅通过MapReduce作业本身过滤它相比没有任何优势?

    最后,实际上我们对我们应该怎么做这个出口进行了一些讨论。我们有以下两种方法,但不确定哪一种更好。

    >

  • 使用上面描述的MapReduce方法。但是我们不确定并行性是否会受到一个表有多少个区域的约束。即,并发永远不会超过区域计数,除非增加区域,否则无法提高性能

  • 共有1个答案

    齐乐
    2023-03-14

    看起来你有一个很小的集群。可伸缩性还取决于区域服务器的数量。因此,仅仅增加表中的区域数量而不增加区域服务器的数量并不能真正帮助您加快工作速度。我认为80个地区/卢比的表本身就足够了。我假设您将使用TableInputFormat,它通过运行1 mapper/region来工作,并根据scan对象执行服务器端筛选。我同意使用TableInputFormat进行扫描是从hbase导出大量数据的最佳方法,但可伸缩性和性能不只是与区域数量成正比。还有很多其他因素,比如RS的数量、每个RS上的RAM和磁盘、数据的均匀分布等等。

    一般情况下,我会选择#1,因为您只需要准备一个扫描对象,然后hbase将负责Rest。

    #2比较麻烦,因为您需要在HBase外部维护行键状态。

     类似资料:
    • 贡献者:BridgetLai Apache MapReduce 是 Apache Hadoop 提供的软件框架,用来进行大规模数据分析.MapReduce 已超出本文档范围,可通过如下文档学习https://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTuto

    • 我写作业MapReduce,输入是HBase中的一个表。 作业运行时,had错误: 你能帮我修一下吗。

    • 问题内容: 以下代码示例的输出是: {1–e = e2,2–e1 = e1} 我不明白对象如何能够覆盖对象中的键,但不能覆盖值。以我的理解,输出应该是: {1–e2 = e2,2–e1 = e1} 问题答案: 实际上,您将其倒退了。该值被覆盖。密钥没有被替换,因为就e和e2而言,它们是相同的。 您的输出是:

    • 导出HADOOP_CLASSPATH=“

    • 现在我正在编写一个 Java 程序,使用哈道普映射还原将输出写入 HBase。问题是关于合并器类的。因为现在我的 reduce 类扩展了 TableReducer,而不是化简器。那么我的合并器类呢,它应该也扩展表还原器,还是仍然扩展化简器?

    • 我想在HBase中执行查询操作,以使用提供的行键列表提取记录。由于MapReduce中的Mappers是并行工作的,所以我想使用它。 行键的输入列表将在~100000的范围内,我已经为映射器创建了一个,它将为每个映射器提供1000行键的列表以查询HBase表。这些查询的记录可能存在于 HBase 表中,也可能不存在,我只想返回那些存在的记录。 我看到了各种各样的例子,我发现hbase table操