在我的数据库中,我有多个表,其中每个表都是不同的实体类型。我有一个我在hadoop中使用的Avro架构,它是这些不同实体类型的所有字段的并集,并且它具有实体类型字段。
我想要做的是为每个实体类型设置DBInputFormat并使用DBWritable,将实体类型映射到组合的Avro类型。然后将每个DBInputFormat赋予MultipleInputs之类的内容,以便我可以创建复合输入格式。然后可以将复合输入格式提供给我的map reduce作业,以便所有表中的所有数据可以由同一个映射器类一次处理。
数据不断添加到这些数据库表中,因此我需要能够为每个实体类型/ dbtable配置DBInputFormat,以便只获取新数据并正确执行拆分。
基本上我需要DBInputFormat或DataDrivenDBInputFormat的功能,但也能够将它们组合成与路径和MultipleInputs相似的功能。
答案 0 :(得分:1)
从N个输入表创建视图,并在DBInputFormat#setInput中设置视图。根据Cloudera article。所以,我想在作业完成时不应该在表格中更新数据。
Hadoop可能需要多次执行相同的查询。每次都需要返回相同的结果。因此,对数据库等的任何并发更新都不应影响MapReduce作业运行的查询。这可以通过在MapReduce作业运行时禁止写入表来实现,通过诸如“insert_date<”之类的子句限制MapReduce的查询。昨天,“或者在启动MapReduce进程之前将数据转储到数据库中的临时表。
评估支持实时处理的框架,例如Storm,HStreaming,S4和Strembases。其中一些位于Hadoop之上,一些不存在,一些是FOSS,一些是商业性的。