Hadoop中具有DBInputFormat的多个输入

Hadoop中具有DBInputFormat的多个输入,hadoop,mapreduce,rdbms,avro,database-table,Hadoop,Mapreduce,Rdbms,Avro,Database Table,在我的数据库中,我有多个表,其中每个表都是不同的实体类型。我有一个在hadoop中使用的Avro模式,它是这些不同实体类型的所有字段的联合,加上它有一个实体类型字段 我想做的是为每个实体类型设置一个DBInputFormat,其中每个实体类型对应一个DBWritable,将实体类型映射到组合的Avro类型。然后将每个DBInputFormat指定为类似于多个输入的格式,以便创建复合输入格式。复合输入格式可以被提供给我的MapReduce作业,这样来自所有表的所有数据都可以由同一个mapper类一

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

我想做的是为每个实体类型设置一个DBInputFormat,其中每个实体类型对应一个DBWritable,将实体类型映射到组合的Avro类型。然后将每个DBInputFormat指定为类似于多个输入的格式,以便创建复合输入格式。复合输入格式可以被提供给我的MapReduce作业,这样来自所有表的所有数据都可以由同一个mapper类一次处理

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


基本上,我需要DBInputFormat或DataDrivenDBInputFormat的功能,但也需要将它们组合成类似于路径和多个输入的功能。

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

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


评估支持实时处理的框架,如、和。其中有些是Hadoop,有些不是,有些是FOSS,有些是商用的。

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

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


评估支持实时处理的框架,如、和。其中有些是Hadoop,有些不是,有些是自由/开源软件,有些是商业软件。

我担心这可能是除了编写我自己的输入格式之外的唯一答案。这种方法的问题是,所有的映射器将查询所有的表,这将比映射器的子集查询一个表、另一个子集查询不同的表等效率低得多。我必须使每个映射器获取的窗口大小小得多,因为它从每个表中获取该窗口。每个窗口抓取都是对表的完整表扫描,因此会有更多的完整表扫描。或者使用导出实用程序将表转储到多个文件中并使用。如果您碰巧编写了自己的输入格式,那么请尝试将其重新提交给Apache。恐怕这可能是编写自己的输入格式的唯一不足之处。这种方法的问题是,所有的映射器将查询所有的表,这将比映射器的子集查询一个表、另一个子集查询不同的表等效率低得多。我必须使每个映射器获取的窗口大小小得多,因为它从每个表中获取该窗口。每个窗口抓取都是对表的完整表扫描,因此会有更多的完整表扫描。或者使用导出实用程序将表转储到多个文件中并使用。如果您碰巧编写了自己的输入格式,那么请尝试将其贡献回Apache。