package mil.nga.giat.geowave.core.ingest.hdfs.mapreduce; import mil.nga.giat.geowave.core.ingest.avro.AvroSchemaProvider; import mil.nga.giat.geowave.core.ingest.index.IndexProvider; /** * This is the main plugin interface for ingesting intermediate data into * Geowave that has previously been staged in HDFS. Although both of the * available map-reduce ingestion techniques can be implemented (one that simply * uses the mapper only, and another that uses the reducer as well), the * framework will choose only one based on this plugin's preference, so it is * unnecessary to implement both (in this case returning null is expected if its * not implemented). * * @param <I> * the type for intermediate data, it must match the type supported * by the Avro schema * @param <O> * the type that represents each data entry being ingested */ public interface IngestFromHdfsPlugin<I, O> extends IndexProvider, AvroSchemaProvider { /** * Returns a flag indicating to the ingestion framework whether it should * try to use the ingestWithMapper() implementation or the * ingestWithReducer() implementation in the case that both implementations * are non-null. * * @return If true, the framework will use ingestWithReducer() and only fall * back to ingestWithMapper() if necessary, otherwise the behavior * will be the reverse */ public boolean isUseReducerPreferred(); /** * An implementation of ingestion that can be persisted to a mapper within * the map-reduce job configuration to perform an ingest of data into * GeoWave from intermediate data * * @return The implementation for ingestion with only a mapper */ public IngestWithMapper<I, O> ingestWithMapper(); /** * An implementation of ingestion that can be persisted to a mapper and * reducer within the map-reduce job configuration to aggregate intermediate * data by defined keys within a reducer and perform an ingest of data into * GeoWave from the key-value pairs emitted by the mapper. * * @return The implementation for ingestion with a mapper and reducer. It is * important to provide the correct concrete implementation of Key * and Value classes within the appropriate generics because the * framework will use reflection to set the key and value classes * for map-reduce. */ public IngestWithReducer<I, ?, ?, O> ingestWithReducer(); }