【问题标题】:Verify HBase snapshot caputred all data验证 HBase 快照捕获了所有数据
【发布时间】:2016-07-06 18:16:46
【问题描述】:

在 HBase 中创建快照时,我收到一条错误消息,指出“快照 'snapshot_name' 未在预期时间:60000 毫秒内完成。

但是,当我随后列出我当前的快照时,我看到返回错误说它没有在预期时间内完成的快照实际上是无论如何创建的。

如何将该快照与源表(我正在对其进行快照)进行比较,以验证它是否创建了源表的完整快照?

【问题讨论】:

    标签: hbase snapshot cloudera-cdh


    【解决方案1】:

    该错误表示快照过程花费的时间比预期的要长,相关代码在HbaseAdmin.snapshot

    if (!done.getDone()) {
      throw new SnapshotCreationException("Snapshot '" + snapshot.getName()
          + "' wasn't completed in expectedTime:" + max + " ms", snapshot);
    }
    

    但是请求被发送到服务器并且快照过程已经开始。如果要查看快照的说明,可以在 webUI 上查看,URL 如下:

    http://your-hmaster:60010/snapshot.jsp?name=your-snapshot-name
    

    如果要比较数据,可以先将快照克隆到另一个表,然后运行 ​​map-reduce 作业进行比较。

    【讨论】:

    • 谢谢,我已经将快照克隆到另一个表。我发现一些东西说我可以运行下面的命令,但我是从 hbase shell 的命令行运行它吗?如果是这样,我是使用整个命令还是只使用第一行?如果我需要使用“用法:”之后的部分,我不知道该填写什么。  hbase org.apache.hadoop.hbase.mapreduce.RowCounter 用法:RowCounter [options] [ --starttime=[start] --endtime=[end] [--range=[startKey],[ endKey]] [...] ]
    • RowCounter hbase.apache.org/book.html#_rowcounter_example 只是获取指定表中的行数,而不是比较两个表的内容。所以你的意思是你只想比较克隆表和原始表的行数?如果需要,您可以在 hbase shell 中运行“count 'your-table'”...
    • "Count " 是我最初尝试的,但它花费的时间太长然后失败了。我找到了一个命令可以更快地返回计数,但减少作业永远不会运行。完成后,它总是说 INFO mapreduce.Job: map 100% reduce 0%。但是,它仍然提供行数。减少作业是否也需要运行才能获得准确的计数?此外,许多作业将返回如下结果:INFO mapreduce.Job: map 100% reduce 0% INFO mapreduce.Job: Job job_123456 failed with state FAILED due to: Task failed task_123456 Job failed as tasks failed。跨度>
    • @N.Smith RowCounter 实际上使用映射器 org.apache.hadoop.hbase.mapreduce.RowCounter$RowCounterMapper 运行作业并且没有减速器,如果没有并发写入,org.apache.hadoop.hbase.mapreduce.RowCounter$RowCounterMapper$Counters ROWS=$ROWNUM 的计数器显示是准确的。如果作业结束时没有像completed successfully 这样的消息,您应该检查失败详细信息。
    猜你喜欢
    • 2015-08-26
    • 2023-03-24
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    相关资源
    最近更新 更多