private void initializeFullOuterObjects() throws HiveException {

    // The Small Table key type jnfo is the same as Big Table's.
    TypeInfo[] smallTableKeyTypeInfos = bigTableKeyTypeInfos;
    final int allKeysSize = smallTableKeyTypeInfos.length;

    /*
     * The VectorMapJoinFullOuter{Long|MultiKey|String}Operator outputs 0, 1, or more
     * Small Key columns in the join result.
     */
    allSmallTableKeyColumnNums = new int[allKeysSize];
    Arrays.fill(allSmallTableKeyColumnNums, -1);
    allSmallTableKeyColumnIncluded = new boolean[allKeysSize];

    final int outputKeysSize = fullOuterSmallTableKeyMapping.getCount();
    int[] outputKeyNums = fullOuterSmallTableKeyMapping.getInputColumns();
    int[] outputKeyOutputColumns = fullOuterSmallTableKeyMapping.getOutputColumns();
    for (int i = 0; i < outputKeysSize; i++) {
      final int outputKeyNum = outputKeyNums[i];
      allSmallTableKeyColumnNums[outputKeyNum] = outputKeyOutputColumns[i];
      allSmallTableKeyColumnIncluded[outputKeyNum] = true;
    }

    if (hashTableKeyType == HashTableKeyType.MULTI_KEY &&
        outputKeysSize > 0) {

      smallTableKeyOuterVectorDeserializeRow =
          new VectorDeserializeRow<BinarySortableDeserializeRead>(BinarySortableDeserializeRead.with(
                          smallTableKeyTypeInfos, true, getConf().getKeyTblDesc().getProperties()));
      smallTableKeyOuterVectorDeserializeRow.init(
          allSmallTableKeyColumnNums, allSmallTableKeyColumnIncluded);
    }
  }
This override lets us substitute our own fast vectorized hash table loader.
ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/VectorMapJoinCommonOperator.java