在我的數據庫中,我有多個表,其中每個表是不同的實體類型。我有一個在hadoop中使用的Avro模式,它是這些不同實體類型的所有字段的聯合,還有一個實體類型字段。在Hadoop中使用DBInputFormat的MultipleInputs
我想要做的是沿用DBWritable爲實體類型映射到組合Avro類型的每個實體類型設置DBInputFormat。然後給每個DBInputFormat類似MultipleInputs,這樣我就可以創建一個複合輸入格式。然後可以將複合輸入格式提供給我的map reduce作業,以便所有表中的所有數據都可以由同一個映射器類一次處理。
數據不斷添加到這些數據庫表中,因此我需要能夠爲每個實體類型/ dbtable配置DBInputFormat以僅抓取新數據並正確執行拆分。
基本上我需要DBInputFormat或DataDrivenDBInputFormat的功能,但也有能力使它們的組合類似於您可以對路徑和MultipleInputs執行的操作。
恐怕這可能是編寫我自己的InputFormat的唯一答案。這種方法的問題是,那麼所有的映射器將查詢所有的表,這將比查詢一個表的映射器的子集,查詢另一個表的另一個子集等效率低得多。我必須使每個Mapper抓取的窗口大小都要小得多,因爲它從每個表中抓取該窗口。每個窗口抓取都是對錶格的全表掃描,因此會有更多的全表掃描。 – user533020
或者使用導出工具將錶轉儲成多個文件並使用[MultipleInputs](http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/lib/MultipleInputs。 HTML)。如果你碰巧寫了你自己的輸入格式,然後嘗試將它提交給Apache。 –