@Override public boolean equals(Object o) {
      if (this == o) {
        return true;
      }
      if (o == null || getClass() != o.getClass()) {
        return false;
      }

      SJSourceTarget that = (SJSourceTarget) o;

      if (!source.equals(that.source)) {
        return false;
      }
      return target.equals(that.target);
    }
An object that represents the source and target of a semi-join reducer.

The objects are meant to be used as keys in maps so it is required to implement hashCode and equals methods.
ql/src/java/org/apache/hadoop/hive/ql/optimizer/SemiJoinReductionMerge.java