public static Scheduler getSchedulerInstance(String appId, Properties properties) {
    if (properties != null) {
      for (SchedulerConfigurationData data : _configuredSchedulers) {
        try {
          Class<?> schedulerClass = Class.forName(data.getClassName());
          Object instance =
              schedulerClass.getConstructor(String.class, Properties.class, SchedulerConfigurationData.class)
                  .newInstance(appId, properties, data);
          if (!(instance instanceof Scheduler)) {
            throw new IllegalArgumentException("Class " + schedulerClass.getName() + " is not an implementation of " + Scheduler.class.getName());
          }
          Scheduler scheduler = (Scheduler) instance;
          if (!scheduler.isEmpty()) {
            return scheduler;
          }
        } catch (ClassNotFoundException e) {
          throw new RuntimeException("Could not find class " + data.getClassName(), e);
        } catch (InstantiationException e) {
          throw new RuntimeException("Could not instantiate class " + data.getClassName(), e);
        } catch (IllegalAccessException e) {
          throw new RuntimeException("Could not access constructor for class" + data.getClassName(), e);
        } catch (RuntimeException e) {
          throw new RuntimeException(data.getClassName() + " is not a valid Scheduler class.", e);
        } catch (InvocationTargetException e) {
          throw new RuntimeException("Could not invoke class " + data.getClassName(), e);
        } catch (NoSuchMethodException e) {
          throw new RuntimeException("Could not find constructor for class " + data.getClassName(), e);
        }
      }
    }
    return null;
  }
Find the scheduler which scheduled the job.

@param appId The application id
@param properties The application properties
@return the corresponding Scheduler which scheduled the job.
app/com/linkedin/drelephant/util/InfoExtractor.java