我正在使用Hadoop运行ETL作业,需要将有效的转换数据输出到HBase,并将该数据的外部索引输出到MySQL。我最初的想法是,我可以使用MultipleOutputFormats导出具有HFileOutputFormat(键为Text,值为ProtobufWritable)和TextOutputFormat索引(键为Text,值为Text)的转换数据。
一个平均大小的作业(我需要一次运行多个作业的能力)的输入记录数量约为7亿。
我想知道A)就效率和复杂性而言,这是否是一种合理的方法,以及B)如果可能的话,如何使用CDH3发行版的API实现这一点。
如果使用旧的MapReduce API,则可以使用MultipleOutputs并写入多种输出格式。
然而,如果你正在使用新的MapReduce API,我不确定是否有办法做你正在尝试做的事情。你可能需要为在相同的输入上做另一个MapReduce工作付出代价。但在确定之前,我还得做更多的研究。可能有一种方法可以将旧的+新的api一起破解,使您可以将MultipleOutputs与新的api一起使用。
编辑:看看这篇文章。您可能可以实现自己的OutputFormat,并将适当的RecordWriters封装在OutputFormat中,然后使用它来写入多种输出格式。