diff --git a/README.md b/README.md index c7d5b982ac..5def61f47a 100644 --- a/README.md +++ b/README.md @@ -173,8 +173,8 @@ via logging when the Dyno-NN has exited safemode and is ready for use. At this point, a workload job (map-only MapReduce job) can be launched, e.g.: ``` ./bin/start-workload.sh - -Dauditreplay.input-path hdfs:///dyno/audit_logs/ - -Dauditreplay.num-threads 50 + -Dauditreplay.input-path=hdfs:///dyno/audit_logs/ + -Dauditreplay.num-threads=50 -nn_uri hdfs://namenode_address:port/ -start_time_offset 5m -mapper_class_name AuditReplayMapper diff --git a/dynamometer-workload/src/main/java/com/linkedin/dynamometer/workloadgenerator/WorkloadDriver.java b/dynamometer-workload/src/main/java/com/linkedin/dynamometer/workloadgenerator/WorkloadDriver.java index 461afaf4d1..2ba545ded4 100644 --- a/dynamometer-workload/src/main/java/com/linkedin/dynamometer/workloadgenerator/WorkloadDriver.java +++ b/dynamometer-workload/src/main/java/com/linkedin/dynamometer/workloadgenerator/WorkloadDriver.java @@ -131,15 +131,24 @@ public static void main(String[] args) throws Exception { } private Class getMapperClass(String className) throws ClassNotFoundException { - if (!className.contains(".")) { - className = WorkloadDriver.class.getPackage().getName() + "." + className; - } - Class mapperClass = getConf().getClassByName(className); - if (!WorkloadMapper.class.isAssignableFrom(mapperClass)) { - throw new IllegalArgumentException(className + " is not a subclass of " + - WorkloadMapper.class.getCanonicalName()); + String[] potentialQualifiedClassNames = { + WorkloadDriver.class.getPackage().getName() + "." + className, + AuditReplayMapper.class.getPackage().getName() + "." + className, + className + }; + for (String qualifiedClassName : potentialQualifiedClassNames) { + Class mapperClass; + try { + mapperClass = getConf().getClassByName(qualifiedClassName); + } catch (ClassNotFoundException cnfe) { + continue; + } + if (!WorkloadMapper.class.isAssignableFrom(mapperClass)) { + throw new IllegalArgumentException(className + " is not a subclass of " + WorkloadMapper.class.getCanonicalName()); + } + return (Class) mapperClass; } - return (Class) mapperClass; + throw new IllegalArgumentException("Unable to find workload mapper class: " + className); } private String getMapperUsageInfo(String mapperClassName) throws ClassNotFoundException,