package mil.nga.giat.geowave.core.ingest.hdfs.mapreduce; import java.io.IOException; import java.util.List; import org.apache.avro.mapred.AvroKey; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.mapreduce.Mapper; import mil.nga.giat.geowave.core.index.ByteArrayId; import mil.nga.giat.geowave.core.index.ByteArrayUtils; import mil.nga.giat.geowave.core.index.PersistenceUtils; import mil.nga.giat.geowave.core.ingest.GeoWaveData; import mil.nga.giat.geowave.core.store.CloseableIterator; import mil.nga.giat.geowave.mapreduce.output.GeoWaveOutputKey; /** * This class is the map-reduce mapper for ingestion with the mapper only. */ public class IngestMapper extends Mapper<AvroKey, NullWritable, GeoWaveOutputKey, Object> { private IngestWithMapper ingestWithMapper; private String globalVisibility; private List<ByteArrayId> primaryIndexIds; @Override protected void map( final AvroKey key, final NullWritable value, final org.apache.hadoop.mapreduce.Mapper.Context context ) throws IOException, InterruptedException { try (CloseableIterator<GeoWaveData> data = ingestWithMapper.toGeoWaveData( key.datum(), primaryIndexIds, globalVisibility)) { while (data.hasNext()) { final GeoWaveData d = data.next(); context.write( d.getOutputKey(), d.getValue()); } } } @Override protected void setup( final org.apache.hadoop.mapreduce.Mapper.Context context ) throws IOException, InterruptedException { super.setup(context); try { final String ingestWithMapperStr = context.getConfiguration().get( AbstractMapReduceIngest.INGEST_PLUGIN_KEY); final byte[] ingestWithMapperBytes = ByteArrayUtils.byteArrayFromString(ingestWithMapperStr); ingestWithMapper = PersistenceUtils.fromBinary( ingestWithMapperBytes, IngestWithMapper.class); globalVisibility = context.getConfiguration().get( AbstractMapReduceIngest.GLOBAL_VISIBILITY_KEY); primaryIndexIds = AbstractMapReduceIngest.getPrimaryIndexIds(context.getConfiguration()); } catch (final Exception e) { throw new IllegalArgumentException( e); } } }