java - Hadoop 映射器输出到 HBase 表和一个缩减器

标签 java hadoop mapreduce hbase multiple-tables

我正在尝试编写一个 MapReduce 作业来解析 CSV 文件,将数据存储在 HBase 中,并一次性执行 reduce 函数。理想情况下我想要

  1. Mapper输出好的记录到HBase Table GOOD
  2. Mapper输出坏记录到HBase表BAD
  3. Mapper 使用 key 将所有好的数据发送到 reducer
  4. 还想更新第三个表以指示存在新数据。该表将包含有关数据和日期的基本信息。每个 CSV 文件很可能只有一两条记录。

我知道如何使用 HBase MultiTableOutputFormat 执行 1 和 2,但不确定如何执行 3 和 4。

非常感谢任何有关如何执行此操作的指示。

我对如何做到这一点有一些想法:

对于 1 和 2,我将 ImmutableBytesWriteable 作为键,MultiTableOutputFormat 负责从 Mapper 进行存储。但是对于 3,我希望键是文本。

对于 #4,我应该在 Mapper 中通过以下方式执行此操作吗

  1. 扫描第三个 HBase 表以获取条目,如果没有则填充,否则跳过。我不喜欢这样,因为感觉效率很低。
  2. 或者我应该在 Mapper 中维护一个列表并在 Mapper 清理方法中写入 HBase?
  3. 有更好的方法吗?

最佳答案

  • mapper 通过设置 KeyValueTextInputFormat 读取 csv。

  • 在 mapper 代码中,有一些逻辑来区分好记录和坏记录,并使用 Put(Hbase Api calls ) 将它们放入 Hbase 中。

在映射器设置中,可以初始化 hbaseTable 的处理程序。

可以使用 context.write(key,value) 将好的记录传递给 reducer,并在 reducer 中收集

关于java - Hadoop 映射器输出到 HBase 表和一个缩减器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24519288/

相关文章:

Java - StackExchange 获取 JSON

java - 为什么使用 "volatile"在这里没有显示任何差异?

java - NLineInputFormat 用法超出了 GC 开销限制

java - MapReduce 迭代值以进行 tf-idf 计算

hadoop - 将一组图像作为输入传递给 mapreduce

hadoop - Hadoop作业自动化

Java/Android API 理解

java - (spotify)Java的Maven docker构建器

java - MapReduce Hadoop 运行时字符串异常

image-processing - 对图像(或BLOB)使用CombineFileInputFormat吗?