【问题标题】:Hadoop or HBase writing partial results?Hadoop 或 HBase 写入部分结果?
【发布时间】:2012-08-11 01:06:39
【问题描述】:

在将部分结果写入我们的 HBase 数据库时,我遇到了一个很少发生的问题。这是我的映射器和减速器的描述:

  • Mappers 计算与特定功能关联的数据,并使用键 = 数据名称和值 = 计数发送 MapWritables。例如:

    Key = "Feature X"
    MapWritables = 
       {"Total Usage":"4", "Unique Usage":2, "Associated Revenue":22}, 
       {"Total Usage":"3", "Unique Usage":1, "Associated Revenue":20}
    
  • 如果键相同,Reducers 会将 MapWritable 中的值相加。结果被写入 HBase,其中键是行 ID,列是映射中的键,值是总和。给定上面的示例键和映射,我们将写入 HBase:

     rowID = "Feature X" 
     column,value="Total Usage", 7 
     column,value="Unique Usage", 3 
     column,value="Associated Revenue", 42
    

在过去 4 个月中两次(所以不是很频繁),结果已写入 HBase,其中一列的数字非常低(如 1 或 3),其余列的数字正常。当我重新运行作业时,错误的列值会跳到其预期值。两次都“损坏”的不是同一列。没有错误写入日志。

有没有其他人经历过类似的行为?有人有想法吗?任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • 你的 Hadoop 版本是什么?还有 Hbase?
  • hadoop-core-0.20.2-cdh3u4, hbase-0.90.4-cdh3u4

标签: hadoop mapreduce hbase


【解决方案1】:

如果您使用的是 hadoop 0.20.*,它缺少附加支持,这会导致 hbase 偶尔丢失数据。 HBase 需要 append 诸如写入 WAL 之类的东西,没有它就不能保证所有写入都写入磁盘。 - 如果这是您的情况,您可以将 hadoop 更新到更高版本。

【讨论】:

  • 我的问题可能属于这一类,因为我使用的是 hadoop 0.20*(尽管我们的版本是 Cloudera 的 cdh3u4),但是,为什么会写入一个奇怪的值对我来说没有意义HBase 而不是没有价值。我不会不断更新 HBase 中的值——我只写一次,那为什么它会选择写 1 而不是 530,000?
  • 好吧,如果它在写一些垃圾,它就是在写一些垃圾。尝试在不同的 hadoop 版本上运行它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多