/* * Copyright 2013-2014 eXascale Infolab, University of Fribourg. All rights reserved. */ package org.apache.hadoop.hadaps; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Arrays; import java.util.Iterator; public class HadapsTest extends Configured implements Tool { private static final Logger LOG = LoggerFactory.getLogger(HadapsTest.class); private static final String USAGE = String.format("Usage: java %s <command>%n" + "%n" + "Available commands are:%n" + " read [-in <input directory>]%n" + " [-out <output directory>]%n" + " [-iteration <number of iterations>]%n" + " [-csv <filename>]%n" + " Reads files from the test directory using MapReduce.%n" + "%n" + " write [-out <test directory>]%n" + " [-count <number of files>]%n" + " [-size <minsize in megabytes>:<maxsize in megabytes>]%n" + " Writes files with random content to the test directory.%n", HadapsTest.class.getSimpleName() ); private Parameters getParameters(String[] args) { assert args != null; // Default parameters Parameters.Mode mode = Parameters.DEFAULT.mode; String inputDirectory = Parameters.DEFAULT.inputDirectory; String outputDirectory = null; String csv = Parameters.DEFAULT.csv; int iteration = Parameters.DEFAULT.iteration; int count = Parameters.DEFAULT.count; int minsize = Parameters.DEFAULT.minsize; int maxsize = Parameters.DEFAULT.maxsize; // Get arguments Iterator<String> tokens = Arrays.asList(args).iterator(); while (tokens.hasNext()) { String token = tokens.next(); if (token.equalsIgnoreCase("read")) { mode = Parameters.Mode.READ; } else if (token.equalsIgnoreCase("write")) { mode = Parameters.Mode.WRITE; } else if (token.equalsIgnoreCase("-in") && tokens.hasNext()) { inputDirectory = tokens.next().trim(); } else if (token.equalsIgnoreCase("-out") && tokens.hasNext()) { outputDirectory = tokens.next().trim(); } else if (token.equalsIgnoreCase("-csv") && tokens.hasNext()) { csv = tokens.next().trim(); } else if (token.equalsIgnoreCase("-iteration") && tokens.hasNext()) { iteration = Integer.parseInt(tokens.next().trim()); if (iteration <= 0) { throw new IllegalStateException("Invalid iteration format"); } } else if (token.equalsIgnoreCase("-count") && tokens.hasNext()) { count = Integer.parseInt(tokens.next().trim()); if (count <= 0) { throw new IllegalStateException("Invalid count format"); } } else if (token.equalsIgnoreCase("-size") && tokens.hasNext()) { String[] sizeTokens = tokens.next().trim().split(":"); if (sizeTokens.length != 2) { throw new IllegalStateException("Invalid size format"); } minsize = Integer.parseInt(sizeTokens[0].trim()); maxsize = Integer.parseInt(sizeTokens[1].trim()); if (minsize <= 0 || maxsize <= 0) { throw new IllegalStateException("Invalid size format"); } } } if (outputDirectory == null) { if (mode == Parameters.Mode.WRITE) { outputDirectory = Parameters.DEFAULT.inputDirectory; } else { outputDirectory = Parameters.DEFAULT.outputDirectory; } } LOG.debug("Using mode: " + mode); switch (mode) { case READ: LOG.debug("Using input directory: " + inputDirectory); LOG.debug("Using output directory: " + outputDirectory); LOG.debug("Using csv: " + csv); LOG.debug("Using iteration: " + iteration); break; case WRITE: LOG.debug("Using output directory: " + outputDirectory); LOG.debug("Using count: " + count); LOG.debug("Using minsize: " + minsize); LOG.debug("Using maxsize: " + maxsize); break; default: throw new IllegalStateException("Invalid mode"); } return new Parameters(mode, inputDirectory, outputDirectory, csv, iteration, count, minsize, maxsize); } @Override public int run(String[] args) throws Exception { // Get parameters Parameters parameters = getParameters(args); // Get configuration Configuration configuration = getConf(); // Run test mode switch (parameters.mode) { case READ: new ReadMode(parameters, configuration).run(); break; case WRITE: new WriteMode(parameters, configuration).run(); break; default: throw new IllegalStateException("Invalid mode"); } return 0; } public static void main(String[] args) { if (args.length == 0 || (args.length == 1 && args[0].equalsIgnoreCase("-help"))) { System.out.print(USAGE); System.exit(0); } try { System.exit(ToolRunner.run(new Configuration(), new HadapsTest(), args)); } catch (Throwable e) { LOG.error("Exiting " + HadapsTest.class.getSimpleName() + " due to an exception", e); System.exit(-1); } } }