1

在我的数据库中,我有多个表,每个表都是不同的实体类型。我有一个在 hadoop 中使用的 Avro 模式,它是这些不同实体类型的所有字段的联合,加上它有一个实体类型字段。

我想做的是为每个实体类型设置一个带有 DBWritable 的 DBInputFormat,将实体类型映射到组合的 Avro 类型。然后将每个 DBInputFormat 赋予 MultipleInputs 之类的东西,以便我可以创建复合输入格式。然后可以将复合输入格式提供给我的 map reduce 作业,以便所有表中的所有数据都可以由同一个映射器类一次处理。

数据会不断地添加到这些数据库表中,因此我需要能够为每个实体类型/dbtable 配置 DBInputFormat 以仅获取新数据并正确进行拆分。

基本上,我需要 DBInputFormat 或 DataDrivenDBInputFormat 的功能,但也需要能够将它们组合起来,类似于使用路径和 MultipleInputs 可以做的事情。

4

1 回答 1

1

从 N 个输入表创建一个视图并在 DBInputFormat#setInput 中设置该视图。根据 Cloudera文章。因此,我猜在作业完成时不应更新表中的数据。

Hadoop 可能需要多次执行相同的查询。每次都需要返回相同的结果。因此,对数据库等的任何并发更新都不应影响 MapReduce 作业正在运行的查询。这可以通过在 MapReduce 作业运行时禁止对表的写入来实现,通过诸如“insert_date <昨天”之类的子句限制 MapReduce 的查询,或者在启动 MapReduce 进程之前将数据转储到数据库中的临时表中。

评估支持实时处理的框架,如StormHStreamingS4Strembases。其中有些位于 Hadoop 之上,有些则没有,有些是 FOSS,有些是商业的。

于 2011-12-02T15:04:54.490 回答