code: private void addUserIdentifiers(JobConf job) throws IOException {
      Pattern x = Pattern.compile("^mapred\\.join\\.define\\.(\\w+)$");
      for (Map.Entry<String,String> kv : job) {
        Matcher m = x.matcher(kv.getKey());
        if (m.matches()) {
          try {
            Parser.CNode.addIdentifier(m.group(1),
                job.getClass(m.group(0), null, ComposableRecordReader.class));
          } catch (NoSuchMethodException e) {
            throw (IOException)new IOException(
                "Invalid define for " + m.group(1)).initCause(e);
          }
        }
      }
    }
docs: Inform the parser of user-defined types.