我正在使用Hadoop运行ETL作业,我需要将有效的转换数据输出到HBase,并将该数据的外部索引输出到MySQL。我最初的想法是,我可以使用MultipleOutputFormats通过HFileOutputFormat导出转换的数据(键是Text,值是ProtobufWritable),TextOutputFormat的索引(键是Text,值是Text)。
平均大小工作的输入记录数(我需要能够同时运行多个)大约有7亿。
我想知道A)这在效率和复杂性方面似乎是一种合理的方法,B)如果可能的话,如何使用CDH3发行版API实现这一目标。
答案 0 :(得分:1)
如果您使用旧的MapReduce API,则可以使用MultipleOutputs并写入多种输出格式。
但是,如果您正在使用新的MapReduce API,我不确定是否有办法执行您尝试执行的操作。您可能必须为在相同输入上执行另一个MapReduce作业付出代价。但在肯定说之前,我将不得不做更多的研究。可能有一种方法可以将旧的+新api组合在一起,以允许您将MultipleOutputs与新API一起使用。
编辑:看看这个post。您可以实现自己的OutputFormat并在RecordWriters中包装相应的OutputFormat并使用它来写入多种输出格式。