在我的数据库中,我有多个表,其中每个表都是不同的实体类型。我在hadoop中使用了一个Avro模式,它是这些不同实体类型的所有字段的并集,并且具有实体类型字段。
我想做的事情是为每个实体类型设置一个DBInputFormat和DBWritable,以将实体类型映射到组合的Avro类型。然后将每个DBInputFormat赋予类似MultipleInputs之类的东西,以便我可以创建复合输入格式。然后可以将复合输入格式提供给我的map reduce作业,以便所有表中的所有数据都可以由同一mapper类立即处理。
数据不断地添加到这些数据库表中,因此我需要能够为每种实体类型/ dbtable配置DBInputFormat,以便仅获取新数据并正确进行拆分。
基本上,我需要DBInputFormat或DataDrivenDBInputFormat的功能,还需要使它们组合的功能类似于您对路径和MultipleInputs所做的操作。
最佳答案
从N个输入表中创建一个 View ,然后在DBInputFormat#setInput中设置该 View 。根据Cloudera article的说法。因此,我猜不应该在作业完成时更新表中的数据。
评估支持实时处理的框架,例如Storm,HStreaming,S4和Strembases。其中有些位于Hadoop之上,有些则不在FOSS上,有些则是商业化的。