/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2017 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* 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 org.pentaho.hadoop.mapreduce;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.JobConf;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.trans.TransConfiguration;
import org.pentaho.di.trans.TransExecutionConfiguration;
import org.pentaho.di.trans.TransMeta;
/**
* @author Tatsiana_Kasiankova
*
*/
@SuppressWarnings( { "rawtypes" } )
public class MRTestUtil {
protected static final String OUTPUT_STEP = "Output";
protected static final String INJECTOR_STEP = "Injector";
protected static final String TRANSFORMATION_REDUCE_OUTPUT_STEPNAME = "transformation-reduce-output-stepname";
protected static final String TRANSFORMATION_REDUCE_INPUT_STEPNAME = "transformation-reduce-input-stepname";
protected static final String TRANSFORMATION_REDUCE_XML = "transformation-reduce-xml";
protected static final String TRANSFORMATION_COMBINER_OUTPUT_STEPNAME = "transformation-combiner-output-stepname";
protected static final String TRANSFORMATION_COMBINER_INPUT_STEPNAME = "transformation-combiner-input-stepname";
protected static final String TRANSFORMATION_COMBINER_XML = "transformation-combiner-xml";
protected static final String TRANSFORMATION_MAP_OUTPUT_STEPNAME = "transformation-map-output-stepname";
protected static final String TRANSFORMATION_MAP_INPUT_STEPNAME = "transformation-map-input-stepname";
protected static final String TRANSFORMATION_MAP_XML = "transformation-map-xml";
protected static final String PATH_TO_NULL_TEST_TRANSFORMATION = "/null-test.ktr";
protected static final String PATH_TO_NOT_NULL_TEST_TRANSFORMATION = "/not-null-value-test.ktr";
protected static final String PATH_TO_WORDCOUNT_REDUCER_TEST_TRANSFORMATION = "/wordcount-reducer.ktr";
protected static final String PATH_TO_WORDCOUNT_MAPPER_TEST_TRANSFORMATION = "/wordcount-mapper.ktr";
protected static final String PATH_TO_NO_OUTPUT_STEP_TEST_TRANSFORMATION = "/no-output-step.ktr";
protected static final String PATH_TO_NO_INJECTOR_STEP_TEST_TRANSFORMATION = "/no-injector-step.ktr";
protected static final String PATH_TO_BAD_INJECTOR_STEP_TEST_TRANSFORMATION = "/bad-injector-fields.ktr";
protected static final String PATH_TO_MR_PASSTHROUGH_TEST_TRANSFORMATION = "/resources/mr-passthrough.ktr";
protected static final Text KEY_TO_NULL = new Text( "0" );
protected static final Text VALUE_TO_NULL = new Text( "test" );
protected static TransMeta getTransMeta( String transMetaNname ) {
TransMeta transMeta = new TransMeta();
transMeta.setName( transMetaNname );
return transMeta;
}
protected static TransConfiguration getTransExecConfig( TransMeta trMeta ) {
TransExecutionConfiguration transExecConfig = new TransExecutionConfiguration();
return new TransConfiguration( trMeta, transExecConfig );
}
/**
* Set up properties for base job reducer transformation.
*
* @param transMeta
* @param genericTransReduce
* @throws IOException
* @throws KettleException
*/
protected static void configJobReducerBaseCase( TransMeta transMeta, JobConf mrJobConfig, GenericTransReduce genericTransReduce ) throws IOException, KettleException {
// mrJobConfig.set( "debug", "true" );
mrJobConfig.set( TRANSFORMATION_REDUCE_XML, MRTestUtil.getTransExecConfig( transMeta ).getXML() );
mrJobConfig.set( TRANSFORMATION_REDUCE_INPUT_STEPNAME, MRTestUtil.INJECTOR_STEP );
mrJobConfig.set( TRANSFORMATION_REDUCE_OUTPUT_STEPNAME, MRTestUtil.OUTPUT_STEP );
mrJobConfig.setOutputKeyClass( Text.class );
mrJobConfig.setOutputValueClass( IntWritable.class );
genericTransReduce.configure( mrJobConfig );
}
/**
* Set up properties for base job combiner transformation.
*
* @param transMeta
* @throws IOException
* @throws KettleException
*/
protected static void configJobCombinerBaseCase( TransMeta transMeta, JobConf mrJobConfig, GenericTransCombiner genericTransCombiner ) throws IOException, KettleException {
// mrJobConfig.set( "debug", "true" );
mrJobConfig.set( TRANSFORMATION_COMBINER_XML, MRTestUtil.getTransExecConfig( transMeta ).getXML() );
mrJobConfig.set( TRANSFORMATION_COMBINER_INPUT_STEPNAME, MRTestUtil.INJECTOR_STEP );
mrJobConfig.set( TRANSFORMATION_COMBINER_OUTPUT_STEPNAME, MRTestUtil.OUTPUT_STEP );
mrJobConfig.setOutputKeyClass( Text.class );
mrJobConfig.setOutputValueClass( IntWritable.class );
genericTransCombiner.configure( mrJobConfig );
}
/**
* Set up properties for base job map transformation.
*
* @param transMeta
* @throws IOException
* @throws KettleException
*/
static void configJobMapBaseCase( TransMeta transMeta, JobConf mrJobConfig, PentahoMapRunnable mapRunnable ) throws IOException, KettleException {
// mrJobConfig.set( "debug", "true" );
mrJobConfig.set( TRANSFORMATION_MAP_XML, MRTestUtil.getTransExecConfig( transMeta ).getXML() );
mrJobConfig.set( TRANSFORMATION_MAP_INPUT_STEPNAME, MRTestUtil.INJECTOR_STEP );
mrJobConfig.set( TRANSFORMATION_MAP_OUTPUT_STEPNAME, MRTestUtil.OUTPUT_STEP );
mrJobConfig.setOutputKeyClass( Text.class );
mrJobConfig.setOutputValueClass( IntWritable.class );
mapRunnable.configure( mrJobConfig );
}
}