org.apache.mahout.cf.taste.hadoop.als.MultithreadedSharingMapper.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.mahout.cf.taste.hadoop.als.MultithreadedSharingMapper.java

Source

/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.mahout.cf.taste.hadoop.als;

import com.google.common.base.Preconditions;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mapreduce.JobContext;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.map.MultithreadedMapper;
import org.apache.hadoop.util.ReflectionUtils;

import java.io.IOException;

/**
 * Multithreaded Mapper for {@link SharingMapper}s. Will call setupSharedInstance() once in the controlling thread
 * before executing the mappers using a thread pool.
 *
 * @param <K1>
 * @param <V1>
 * @param <K2>
 * @param <V2>
 */
public class MultithreadedSharingMapper<K1, V1, K2, V2> extends MultithreadedMapper<K1, V1, K2, V2> {

    @Override
    public void run(Context ctx) throws IOException, InterruptedException {
        Class<Mapper<K1, V1, K2, V2>> mapperClass = MultithreadedSharingMapper.getMapperClass((JobContext) ctx);
        Preconditions.checkNotNull(mapperClass, "Could not find Multithreaded Mapper class.");

        Configuration conf = ctx.getConfiguration();
        // instantiate the mapper
        Mapper<K1, V1, K2, V2> mapper1 = ReflectionUtils.newInstance(mapperClass, conf);
        SharingMapper<K1, V1, K2, V2, ?> mapper = null;
        if (mapper1 instanceof SharingMapper) {
            mapper = (SharingMapper<K1, V1, K2, V2, ?>) mapper1;
        }
        Preconditions.checkNotNull(mapper, "Could not instantiate SharingMapper. Class was: %s",
                mapper1.getClass().getName());

        // single threaded call to setup the sharing mapper
        mapper.setupSharedInstance(ctx);

        // multithreaded execution
        super.run(ctx);
    }
}