001/* 002 * Copyright (c) 2016-2017 Chris K Wensel <chris@wensel.net>. All Rights Reserved. 003 * Copyright (c) 2007-2017 Xplenty, Inc. All Rights Reserved. 004 * 005 * Project and contact information: http://www.cascading.org/ 006 * 007 * This file is part of the Cascading project. 008 * 009 * Licensed under the Apache License, Version 2.0 (the "License"); 010 * you may not use this file except in compliance with the License. 011 * You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, software 016 * distributed under the License is distributed on an "AS IS" BASIS, 017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 018 * See the License for the specific language governing permissions and 019 * limitations under the License. 020 */ 021 022package cascading.tap.hadoop.io; 023 024import java.io.IOException; 025 026import cascading.flow.FlowProcess; 027import cascading.flow.SliceCounters; 028import cascading.scheme.Scheme; 029import cascading.tap.Tap; 030import cascading.tap.hadoop.util.MeasuredRecordReader; 031import cascading.tap.type.FileType; 032import cascading.tuple.TupleEntrySchemeIterator; 033import cascading.util.CloseableIterator; 034import org.apache.hadoop.conf.Configuration; 035import org.apache.hadoop.mapred.RecordReader; 036 037/** 038 * 039 */ 040public class HadoopTupleEntrySchemeIterator extends TupleEntrySchemeIterator<Configuration, RecordReader> 041 { 042 private MeasuredRecordReader measuredRecordReader; 043 044 public HadoopTupleEntrySchemeIterator( FlowProcess<? extends Configuration> flowProcess, Tap parentTap, RecordReader recordReader ) throws IOException 045 { 046 this( flowProcess, parentTap, parentTap.getScheme(), makeIterator( flowProcess, parentTap, recordReader ) ); 047 } 048 049 @Deprecated 050 public HadoopTupleEntrySchemeIterator( FlowProcess<? extends Configuration> flowProcess, Scheme scheme, CloseableIterator<RecordReader> closeableIterator ) 051 { 052 super( flowProcess, scheme, closeableIterator, flowProcess.getStringProperty( FileType.CASCADING_SOURCE_PATH ) ); 053 } 054 055 public HadoopTupleEntrySchemeIterator( FlowProcess<? extends Configuration> flowProcess, Tap tap, Scheme scheme, CloseableIterator<RecordReader> closeableIterator ) 056 { 057 super( flowProcess, tap, scheme, closeableIterator, flowProcess.getStringProperty( FileType.CASCADING_SOURCE_PATH ) ); 058 } 059 060 private static CloseableIterator<RecordReader> makeIterator( FlowProcess<? extends Configuration> flowProcess, Tap parentTap, RecordReader recordReader ) throws IOException 061 { 062 if( recordReader != null ) 063 return new RecordReaderIterator( recordReader ); 064 065 return new MultiRecordReaderIterator( flowProcess, parentTap ); 066 } 067 068 @Override 069 protected RecordReader wrapInput( RecordReader recordReader ) 070 { 071 if( measuredRecordReader == null ) 072 measuredRecordReader = new MeasuredRecordReader( getFlowProcess(), SliceCounters.Read_Duration ); 073 074 measuredRecordReader.setRecordReader( super.wrapInput( recordReader ) ); 075 076 return measuredRecordReader; 077 } 078 }