@Override
  protected void initializeOp(Configuration hconf) throws HiveException {

    super.initializeOp(hconf);

    VectorExpression.doTransientInit(bigTableFilterExpressions, hconf);
    VectorExpression.doTransientInit(bigTableKeyExpressions, hconf);
    VectorExpression.doTransientInit(bigTableValueExpressions, hconf);
    VectorExpression.doTransientInit(bigTableValueExpressions, hconf);

    /*
     * Get configuration parameters.
     */
    overflowRepeatedThreshold = HiveConf.getIntVar(hconf,
        HiveConf.ConfVars.HIVE_VECTORIZATION_MAPJOIN_NATIVE_OVERFLOW_REPEATED_THRESHOLD);
    useOverflowRepeatedThreshold = (overflowRepeatedThreshold >= 0);


    /*
     * Create our vectorized copy row and deserialize row helper objects.
     */
    if (vectorMapJoinVariation == VectorMapJoinVariation.FULL_OUTER) {
      initializeFullOuterObjects();
    }

    if (smallTableValueMapping.getCount() > 0) {
      smallTableValueVectorDeserializeRow =
          new VectorDeserializeRow<LazyBinaryDeserializeRead>(
              new LazyBinaryDeserializeRead(
                  smallTableValueMapping.getTypeInfos(),
                  /* useExternalBuffer */ true));
      smallTableValueVectorDeserializeRow.init(smallTableValueMapping.getOutputColumns());
    }

    if (bigTableRetainColumnMap.length > 0) {
      bigTableRetainedVectorCopy = new VectorCopyRow();
      bigTableRetainedVectorCopy.init(
          bigTableRetainColumnMap, bigTableRetainTypeInfos);
    }

    if (nonOuterSmallTableKeyColumnMap.length > 0) {
      nonOuterSmallTableKeyVectorCopy = new VectorCopyRow();
      nonOuterSmallTableKeyVectorCopy.init(
          nonOuterSmallTableKeyColumnMap, nonOuterSmallTableKeyTypeInfos);
    }

    if (outerSmallTableKeyMapping.getCount() > 0) {
      outerSmallTableKeyVectorCopy = new VectorCopyRow();
      outerSmallTableKeyVectorCopy.init(outerSmallTableKeyMapping);
    }

    /*
     * Setup the overflow batch.
     */
    overflowBatch = setupOverflowBatch();

    needCommonSetup = true;
    needFirstBatchSetup = true;
    needHashTableSetup = true;

    if (LOG.isDebugEnabled()) {
      int[] currentScratchColumns = vOutContext.currentScratchColumns();
      LOG.debug(getLoggingPrefix() + " VectorMapJoinCommonOperator initializeOp currentScratchColumns " + Arrays.toString(currentScratchColumns));

      StructObjectInspector structOutputObjectInspector = (StructObjectInspector) outputObjInspector;
      List<? extends StructField> fields = structOutputObjectInspector.getAllStructFieldRefs();
      int i = 0;
      for (StructField field : fields) {
        LOG.debug(getLoggingPrefix() + " VectorMapJoinCommonOperator initializeOp " + i + " field " + field.getFieldName() + " type " + field.getFieldObjectInspector().getTypeName());
        i++;
      }
    }
  }
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