紧凑的映射器部件文件

时间:2015-10-20 01:40:51

标签: java hadoop mapreduce hbase

我有一个mapreduce作业,可以导出hbase表的纯文本。我正在模拟带有hbase但没有运行任何reducer的Export类。另外,我只是为密钥写一个空字符串。像这样:

public void map(ImmutableBytesWritable key, Result value, Context context) throws IOException, InterruptedException {
    List<Cell> cells = value.listCells();
    for(Cell cell : cells) {
        context
            .write(new Text(""), new Text(CellUtil.cloneValue(cell)));
    }
}

这样可以正常工作,除非我受hbase表中有关输出映射文件数量(例如part-m-NNNNN)的许多拆分的支配。

有没有办法在mapreduce作业中组合输出映射文件?

我考虑使用1-50之间的随机整数作为密钥,然后使用减速器,然后在写入HDFS之前剥离密钥,但这似乎是一个黑客。

1 个答案:

答案 0 :(得分:1)

无论您输入什么,我都知道您要合并所有地图输出。以下是选项。

  1. getmerge shell命令 - 这将合并文件提供给本地目录。
  2. 使输入不可拆分,因此只运行一个映射器和一个映射器输出 - 由于您正在读取HBase,因此单个映射器执行整个工作可能不是一个好的选择。
  3. 编写一个reducer并将map reduce设置为只有一个reducer,这就是你正在做的事情。
  4. 鉴于您与HBase的关联,1,3是不错的选择。不确定为什么你认为它是哈克。您可以使用行键作为映射器输出键而不是随机整数。