/* * Copyright 2016 Crown Copyright * * Licensed 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 uk.gov.gchq.gaffer.hdfs.operation; import com.fasterxml.jackson.annotation.JsonSetter; import org.apache.hadoop.mapreduce.Partitioner; import uk.gov.gchq.gaffer.hdfs.operation.handler.job.initialiser.JobInitialiser; import uk.gov.gchq.gaffer.hdfs.operation.mapper.generator.MapperGenerator; import uk.gov.gchq.gaffer.operation.Operation; import uk.gov.gchq.gaffer.operation.Options; import java.util.List; import java.util.Map; /** * An <code>AddElementsFromHdfs</code> operation is for adding {@link uk.gov.gchq.gaffer.data.element.Element}s from HDFS. * This operation requires an input, output and failure path. * It order to be generic and deal with any type of input file you also need to provide a * {@link MapperGenerator} class name and a * {@link uk.gov.gchq.gaffer.hdfs.operation.handler.job.initialiser.JobInitialiser}. * <p> * For normal operation handlers the operation {@link uk.gov.gchq.gaffer.data.elementdefinition.view.View} will be ignored. * </p> * <b>NOTE</b> - currently this job has to be run as a hadoop job. * * @see Builder */ public class AddElementsFromHdfs implements Operation, MapReduce, Options { private String failurePath; private boolean validate = true; /** * Used to generate elements from the Hdfs files. * For Avro data see {@link uk.gov.gchq.gaffer.hdfs.operation.mapper.generator.AvroMapperGenerator}. * For Text data see {@link uk.gov.gchq.gaffer.hdfs.operation.mapper.generator.TextMapperGenerator}. */ private String mapperGeneratorClassName; private List<String> inputPaths; private String outputPath; private JobInitialiser jobInitialiser; private Integer numMapTasks; private Integer numReduceTasks; private Class<? extends Partitioner> partitioner; private Map<String, String> options; public String getFailurePath() { return failurePath; } public void setFailurePath(final String failurePath) { this.failurePath = failurePath; } public boolean isValidate() { return validate; } public void setValidate(final boolean validate) { this.validate = validate; } public String getMapperGeneratorClassName() { return mapperGeneratorClassName; } @JsonSetter(value = "mapperGeneratorClassName") public void setMapperGeneratorClassName(final String mapperGeneratorClassName) { this.mapperGeneratorClassName = mapperGeneratorClassName; } public void setMapperGeneratorClassName(final Class<? extends MapperGenerator> mapperGeneratorClass) { this.mapperGeneratorClassName = mapperGeneratorClass.getName(); } @Override public List<String> getInputPaths() { return inputPaths; } @Override public void setInputPaths(final List<String> inputPaths) { this.inputPaths = inputPaths; } @Override public String getOutputPath() { return outputPath; } @Override public void setOutputPath(final String outputPath) { this.outputPath = outputPath; } @Override public JobInitialiser getJobInitialiser() { return jobInitialiser; } @Override public void setJobInitialiser(final JobInitialiser jobInitialiser) { this.jobInitialiser = jobInitialiser; } @Override public Integer getNumMapTasks() { return numMapTasks; } @Override public void setNumMapTasks(final Integer numMapTasks) { this.numMapTasks = numMapTasks; } @Override public Integer getNumReduceTasks() { return numReduceTasks; } @Override public void setNumReduceTasks(final Integer numReduceTasks) { this.numReduceTasks = numReduceTasks; } @Override public Class<? extends Partitioner> getPartitioner() { return partitioner; } @Override public void setPartitioner(final Class<? extends Partitioner> partitioner) { this.partitioner = partitioner; } @Override public Map<String, String> getOptions() { return options; } @Override public void setOptions(final Map<String, String> options) { this.options = options; } public static final class Builder extends Operation.BaseBuilder<AddElementsFromHdfs, Builder> implements MapReduce.Builder<AddElementsFromHdfs, Builder>, Options.Builder<AddElementsFromHdfs, Builder> { public Builder() { super(new AddElementsFromHdfs()); } public Builder validate(final boolean validate) { _getOp().setValidate(validate); return _self(); } public Builder mapperGenerator(final Class<? extends MapperGenerator> mapperGeneratorClass) { _getOp().setMapperGeneratorClassName(mapperGeneratorClass); return _self(); } public Builder failurePath(final String failurePath) { _getOp().setFailurePath(failurePath); return _self(); } } }