public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
		// Parse command line
		final Configuration conf = new Configuration();
		final String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
		CmdArguments cmdArgs = CmdArguments.instantiate(otherArgs);

		prepOutDir(conf, getSpecaialFolder());
		conf.set(DAY_STATS_DATA_FOLDER_ATT, getOutputForJob("D").toString());
		conf.set(TRENDS_DATA_FOLDER_ATT, getOutputForJob("C").toString());

		List<Job> jobs = new ArrayList<Job>();

		// The order is not alphabetical!

		if (!cmdArgs.skipJob("A")) {
			throw new RuntimeException("Job A is Hardcoded not to run. Please use -skip A or change source code");
			// jobs.add(createJobA(conf, getInput(), getOutputForJob("A")));
		}
		if (!cmdArgs.skipJob("D")) {
			jobs.add(createJobD(conf, getOutputForJob("A"), getOutputForJob("D")));
		}
		if (!cmdArgs.skipJob("E")) {
			jobs.add(createJobE(conf, getOutputForJob("A"), getOutputForJob("E")));
		}

		if (!cmdArgs.skipJob("B")) {
			jobs.add(createJobB(conf, getOutputForJob("E"), getOutputForJob("B")));
		}
		if (!cmdArgs.skipJob("C")) {
			jobs.add(createJobC(conf, getOutputForJob("B"), getOutputForJob("C")));
		}
		if (!cmdArgs.skipJob("F")) {
			jobs.add(createJobF(conf, getOutputForJob("E"), getOutputForJob("F")));
		}

		for (Job job : jobs) {
			System.out.println("\nRunning Job:" + job.getJobName());
			if (!job.waitForCompletion(true)) {
				throw new RuntimeException("Job failed: " + job.getJobName());
			}
		}

		printTrends(conf);
		printTweetsForTrends(conf);
	}