2012-02-25 41 views
1

我正在使用Hadoop的ETL工作,我需要输出有效,转换后的数据到HBase的,而该数据到MySQL外部指标。我最初的想法是,我可以使用MultipleOutputFormats用HFileOutputFormat(关键字是Text并且值是ProtobufWritable)和TextOutputFormat的索引(关键字是Text,值是Text)来导出转换后的数据。Hadoop的MultipleOutputFormats到HFileOutputFormat和TextOutputFormat

的输入记录的平均大小的就业人数(我需要同时运行很多的能力)为700万美元。

我想知道如果A)这似乎是在效率和复杂性而言,一个合理的做法,和B)如何与CDH3分布的API,如果可能做到这一点。

回答

1

如果您使用的是旧版的MapReduce API,那么你可以使用MultipleOutputs和写入多种输出格式。

不过,如果您使用的是新的MapReduce API,我不知道,有一种方法可以做到你想要做什么。您可能不得不在相同的输入上支付另一个MapReduce作业的代价。但在肯定之前,我必须对此做更多的研究。可能有一种方法可以将旧的+新的api混合在一起,以允许您在新的API中使用MultipleOutputs。

编辑:有一个在这个post。你可以实现你自己的OutputFormat并在OutputFormat中包装合适的RecordWriters,并用它写入多种输出格式。

+0

我使用CDH3u3,它具有MultipleOutputs。我会尝试的。你认为一般的方法是高性能的吗?还有其他建议吗?我不想显然执行第二项工作,因为我已经在减速器的RAM中存储了所有的数据。 – ja87 2012-02-26 22:09:46

+0

我个人没有使用MultipleOutputs,但我怀疑它会非常高效。至少比运行第二份MR作业更有效。我对这种方法的建议是注意你的泄漏。如果您不再对数据进行第二次扫描而获得性能,那么您的工作量就会增加一倍,这可能会导致泄漏事件增加一倍。我会运行MultipleOutputs运行作业的实验,并将作业作为两个独立的作业运行,以查看哪些作业更具性能。 – 2012-02-27 05:08:21