compactMap器部件文件

x33g5p2x  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(221)

我有一个mapreduce作业,它导出hbase表的纯文本。我在模拟hbase附带的export类,不运行任何reducer。另外,我只是在为键写一个空字符串。像这样:

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表中有多少关于输出Map文件(例如part-m-nnnnn)的拆分外,我任由摆布。
有没有办法在mapreduce作业中合并输出Map文件?
我考虑过使用一个1-50之间的随机整数作为密钥,然后使用一个reducer在写入hdfs之前去掉密钥,但这看起来像是一个黑客。

lqfhib0f

lqfhib0f1#

不管你的输入是什么,我知道你想合并所有的Map输出。以下是选项。
getmerge shell命令-这将把合并的文件赋给本地目录。
使输入不可拆分,因此只有一个Map器运行和一个Map器输出-因为您正在读取hbase,所以让一个Map器完成整个工作可能不是一个好的选择。
编写一个reducer,并将map reduce设置为只有一个reducer,这就是您要做的。
考虑到您与hbase的链接,1,3是不错的选择。不知道你为什么认为这是黑客。可以使用行键作为Map器输出键,而不是随机整数。

相关问题