/// <exception cref="System.IO.IOException"/> public static void OutputRecords(OutputStream @out, bool useAscii, Unsigned16 firstRecordNumber , Unsigned16 recordsToGenerate, Unsigned16 checksum) { byte[] row = new byte[100]; Unsigned16 recordNumber = new Unsigned16(firstRecordNumber); Unsigned16 lastRecordNumber = new Unsigned16(firstRecordNumber); Checksum crc = new PureJavaCrc32(); Unsigned16 tmp = new Unsigned16(); lastRecordNumber.Add(recordsToGenerate); Unsigned16 One = new Unsigned16(1); Unsigned16 rand = Random16.SkipAhead(firstRecordNumber); while (!recordNumber.Equals(lastRecordNumber)) { Random16.NextRand(rand); if (useAscii) { GenerateAsciiRecord(row, rand, recordNumber); } else { GenerateRecord(row, rand, recordNumber); } if (checksum != null) { crc.Reset(); crc.Update(row, 0, row.Length); tmp.Set(crc.GetValue()); checksum.Add(tmp); } recordNumber.Add(One); @out.Write(row); } }
/// <exception cref="System.IO.IOException"/> /// <exception cref="System.Exception"/> protected override void Map(LongWritable row, NullWritable ignored, Mapper.Context context) { if (rand == null) { rowId = new Unsigned16(row.Get()); rand = Random16.SkipAhead(rowId); checksumCounter = context.GetCounter(TeraGen.Counters.Checksum); } Random16.NextRand(rand); GenSort.GenerateRecord(buffer, rand, rowId); key.Set(buffer, 0, TeraInputFormat.KeyLength); value.Set(buffer, TeraInputFormat.KeyLength, TeraInputFormat.ValueLength); context.Write(key, value); crc32.Reset(); crc32.Update(buffer, 0, TeraInputFormat.KeyLength + TeraInputFormat.ValueLength); checksum.Set(crc32.GetValue()); total.Add(checksum); rowId.Add(One); }