我有一个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之前去掉密钥,但这看起来像是一个黑客。
1条答案
按热度按时间lqfhib0f1#
不管你的输入是什么,我知道你想合并所有的Map输出。以下是选项。
getmerge shell命令-这将把合并的文件赋给本地目录。
使输入不可拆分,因此只有一个Map器运行和一个Map器输出-因为您正在读取hbase,所以让一个Map器完成整个工作可能不是一个好的选择。
编写一个reducer,并将map reduce设置为只有一个reducer,这就是您要做的。
考虑到您与hbase的链接,1,3是不错的选择。不知道你为什么认为这是黑客。可以使用行键作为Map器输出键,而不是随机整数。