示例#1
0
 /** Initialize the custom comparators. Creates a quick access array for the custom comparators. */
 private void initComparators() {
   TupleMRConfigBuilder.initializeComparators(
       context.getHadoopContext().getConfiguration(), tupleMRConfig);
   customComparators = new RawComparator<?>[maxDepth + 1];
   for (int i = minDepth; i <= maxDepth; i++) {
     SortElement element = tupleMRConfig.getCommonCriteria().getElements().get(i);
     if (element.getCustomComparator() != null) {
       customComparators[i] = element.getCustomComparator();
     }
   }
 }
示例#2
0
  /** Returns the instance files created */
  static Set<String> serializeComparators(
      Criteria criteria,
      Configuration conf,
      List<String> comparatorRefs,
      List<String> comparatorInstanceFiles,
      String prefix)
      throws TupleMRException {

    Set<String> instanceFiles = new HashSet<String>();

    if (criteria == null) {
      return instanceFiles;
    }

    for (SortElement element : criteria.getElements()) {
      if (element.getCustomComparator() != null) {
        RawComparator<?> comparator = element.getCustomComparator();

        if (!(comparator instanceof Serializable)) {
          throw new TupleMRException(
              "The class '"
                  + comparator.getClass().getName()
                  + "' is not Serializable."
                  + " The customs comparators must implement Serializable.");
        }

        String ref = prefix + "|" + element.getName();
        String uniqueName = UUID.randomUUID().toString() + '.' + "comparator.dat";
        try {
          InstancesDistributor.distribute(comparator, uniqueName, conf);
          instanceFiles.add(uniqueName);
        } catch (Exception e) {
          throw new TupleMRException(
              "The class " + comparator.getClass().getName() + " can't be serialized", e);
        }

        comparatorRefs.add(ref);
        comparatorInstanceFiles.add(uniqueName);
      }
    }

    return instanceFiles;
  }