package mil.nga.giat.geowave.test.osm;
import java.io.File;
import org.apache.accumulo.core.client.Connector;
import org.apache.accumulo.core.client.ZooKeeperInstance;
import org.apache.accumulo.core.client.security.tokens.PasswordToken;
import org.apache.accumulo.core.security.Authorizations;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import mil.nga.giat.geowave.cli.osm.operations.IngestOSMToGeoWaveCommand;
import mil.nga.giat.geowave.cli.osm.operations.StageOSMToHDFSCommand;
import mil.nga.giat.geowave.core.cli.parser.ManualOperationParams;
import mil.nga.giat.geowave.core.store.operations.remote.options.DataStorePluginOptions;
import mil.nga.giat.geowave.datastore.accumulo.operations.config.AccumuloRequiredOptions;
import mil.nga.giat.geowave.test.AccumuloStoreTestEnvironment;
import mil.nga.giat.geowave.test.GeoWaveITRunner;
import mil.nga.giat.geowave.test.TestUtils;
import mil.nga.giat.geowave.test.annotation.Environments;
import mil.nga.giat.geowave.test.annotation.GeoWaveTestStore;
import mil.nga.giat.geowave.test.annotation.Environments.Environment;
import mil.nga.giat.geowave.test.annotation.GeoWaveTestStore.GeoWaveStoreType;
import mil.nga.giat.geowave.test.mapreduce.MapReduceTestEnvironment;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
@RunWith(GeoWaveITRunner.class)
@Environments({
Environment.MAP_REDUCE
})
public class MapReduceIT
{
private final static Logger LOGGER = LoggerFactory.getLogger(MapReduceIT.class);
protected static final String TEST_RESOURCE_DIR = new File(
"./src/test/resources/osm/").getAbsolutePath().toString();
protected static final String TEST_DATA_ZIP_RESOURCE_PATH = TEST_RESOURCE_DIR + "/" + "andorra-latest.zip";
protected static final String TEST_DATA_BASE_DIR = new File(
TestUtils.TEST_CASE_BASE,
"osm").getAbsoluteFile().toString();
@GeoWaveTestStore({
GeoWaveStoreType.ACCUMULO,
GeoWaveStoreType.BIGTABLE,
GeoWaveStoreType.HBASE
})
protected DataStorePluginOptions dataStoreOptions;
@BeforeClass
public static void setupTestData()
throws ZipException {
ZipFile data = new ZipFile(
new File(
TEST_DATA_ZIP_RESOURCE_PATH));
data.extractAll(TEST_DATA_BASE_DIR);
}
@Test
public void testIngestOSMPBF()
throws Exception {
TestUtils.deleteAll(dataStoreOptions);
// NOTE: This will probably fail unless you bump up the memory for the
// tablet
// servers, for whatever reason, using the
// miniAccumuloConfig.setMemory() function.
MapReduceTestEnvironment mrEnv = MapReduceTestEnvironment.getInstance();
// TODO: for now this only works with accumulo, generalize the data
// store usage
AccumuloStoreTestEnvironment accumuloEnv = AccumuloStoreTestEnvironment.getInstance();
String hdfsPath = mrEnv.getHdfsBaseDirectory() + "/osm_stage/";
StageOSMToHDFSCommand stage = new StageOSMToHDFSCommand();
stage.setParameters(
TEST_DATA_BASE_DIR,
mrEnv.getHdfs(),
hdfsPath);
stage.execute(new ManualOperationParams());
Connector conn = new ZooKeeperInstance(
accumuloEnv.getAccumuloInstance(),
accumuloEnv.getZookeeper()).getConnector(
accumuloEnv.getAccumuloUser(),
new PasswordToken(
accumuloEnv.getAccumuloPassword()));
Authorizations auth = new Authorizations(
new String[] {
"public"
});
conn.securityOperations().changeUserAuthorizations(
accumuloEnv.getAccumuloUser(),
auth);
IngestOSMToGeoWaveCommand ingest = new IngestOSMToGeoWaveCommand();
ingest.setParameters(
mrEnv.getHdfs(),
hdfsPath,
null);
ingest.setInputStoreOptions(dataStoreOptions);
ingest.getIngestOptions().setJobName(
"ConversionTest");
// Execute for node's ways, and relations.
ingest.getIngestOptions().setMapperType(
"NODE");
ingest.execute(new ManualOperationParams());
System.out.println("finished accumulo ingest Node");
ingest.getIngestOptions().setMapperType(
"WAY");
ingest.execute(new ManualOperationParams());
System.out.println("finished accumulo ingest Way");
ingest.getIngestOptions().setMapperType(
"RELATION");
ingest.execute(new ManualOperationParams());
System.out.println("finished accumulo ingest Relation");
}
}