/** 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(); } } }
/** 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; }