public virtual void TestSkipBadRecords() { // test default values Configuration conf = new Configuration(); NUnit.Framework.Assert.AreEqual(2, SkipBadRecords.GetAttemptsToStartSkipping(conf )); NUnit.Framework.Assert.IsTrue(SkipBadRecords.GetAutoIncrMapperProcCount(conf)); NUnit.Framework.Assert.IsTrue(SkipBadRecords.GetAutoIncrReducerProcCount(conf)); NUnit.Framework.Assert.AreEqual(0, SkipBadRecords.GetMapperMaxSkipRecords(conf)); NUnit.Framework.Assert.AreEqual(0, SkipBadRecords.GetReducerMaxSkipGroups(conf), 0); NUnit.Framework.Assert.IsNull(SkipBadRecords.GetSkipOutputPath(conf)); // test setters SkipBadRecords.SetAttemptsToStartSkipping(conf, 5); SkipBadRecords.SetAutoIncrMapperProcCount(conf, false); SkipBadRecords.SetAutoIncrReducerProcCount(conf, false); SkipBadRecords.SetMapperMaxSkipRecords(conf, 6L); SkipBadRecords.SetReducerMaxSkipGroups(conf, 7L); JobConf jc = new JobConf(); SkipBadRecords.SetSkipOutputPath(jc, new Path("test")); // test getters NUnit.Framework.Assert.AreEqual(5, SkipBadRecords.GetAttemptsToStartSkipping(conf )); NUnit.Framework.Assert.IsFalse(SkipBadRecords.GetAutoIncrMapperProcCount(conf)); NUnit.Framework.Assert.IsFalse(SkipBadRecords.GetAutoIncrReducerProcCount(conf)); NUnit.Framework.Assert.AreEqual(6L, SkipBadRecords.GetMapperMaxSkipRecords(conf)); NUnit.Framework.Assert.AreEqual(7L, SkipBadRecords.GetReducerMaxSkipGroups(conf), 0); NUnit.Framework.Assert.AreEqual("test", SkipBadRecords.GetSkipOutputPath(jc).ToString ()); }
/// <exception cref="System.IO.IOException"/> private void RunOldReducer <Inkey, Invalue, Outkey, Outvalue>(JobConf job, TaskUmbilicalProtocol umbilical, Task.TaskReporter reporter, RawKeyValueIterator rIter, RawComparator <INKEY> comparator) { System.Type keyClass = typeof(INKEY); System.Type valueClass = typeof(INVALUE); Reducer <INKEY, INVALUE, OUTKEY, OUTVALUE> reducer = ReflectionUtils.NewInstance(job .GetReducerClass(), job); // make output collector string finalName = GetOutputName(GetPartition()); RecordWriter <OUTKEY, OUTVALUE> @out = new ReduceTask.OldTrackingRecordWriter <OUTKEY , OUTVALUE>(this, job, reporter, finalName); RecordWriter <OUTKEY, OUTVALUE> finalOut = @out; OutputCollector <OUTKEY, OUTVALUE> collector = new _OutputCollector_419(finalOut, reporter); // indicate that progress update needs to be sent // apply reduce function try { //increment processed counter only if skipping feature is enabled bool incrProcCount = SkipBadRecords.GetReducerMaxSkipGroups(job) > 0 && SkipBadRecords .GetAutoIncrReducerProcCount(job); ReduceTask.ReduceValuesIterator <INKEY, INVALUE> values = IsSkipping() ? new ReduceTask.SkippingReduceValuesIterator <INKEY, INVALUE>(this, rIter, comparator, keyClass, valueClass, job, reporter, umbilical ) : new ReduceTask.ReduceValuesIterator <INKEY, INVALUE>(this, rIter, job.GetOutputValueGroupingComparator (), keyClass, valueClass, job, reporter); values.InformReduceProgress(); while (values.More()) { reduceInputKeyCounter.Increment(1); reducer.Reduce(values.GetKey(), values, collector, reporter); if (incrProcCount) { reporter.IncrCounter(SkipBadRecords.CounterGroup, SkipBadRecords.CounterReduceProcessedGroups , 1); } values.NextKey(); values.InformReduceProgress(); } reducer.Close(); reducer = null; @out.Close(reporter); @out = null; } finally { IOUtils.Cleanup(Log, reducer); CloseQuietly(@out, reporter); } }