TestSequenceFileAsBinaryInputFormat.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:3k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.mapred;
  19. import java.io.IOException;
  20. import java.util.Random;
  21. import org.apache.hadoop.fs.*;
  22. import org.apache.hadoop.io.*;
  23. import junit.framework.TestCase;
  24. import org.apache.commons.logging.*;
  25. public class TestSequenceFileAsBinaryInputFormat extends TestCase {
  26.   private static final Log LOG = FileInputFormat.LOG;
  27.   private static final int RECORDS = 10000;
  28.   public void testBinary() throws IOException {
  29.     JobConf job = new JobConf();
  30.     FileSystem fs = FileSystem.getLocal(job);
  31.     Path dir = new Path(System.getProperty("test.build.data",".") + "/mapred");
  32.     Path file = new Path(dir, "testbinary.seq");
  33.     Random r = new Random();
  34.     long seed = r.nextLong();
  35.     r.setSeed(seed);
  36.     fs.delete(dir, true);
  37.     FileInputFormat.setInputPaths(job, dir);
  38.     Text tkey = new Text();
  39.     Text tval = new Text();
  40.     SequenceFile.Writer writer =
  41.       new SequenceFile.Writer(fs, job, file, Text.class, Text.class);
  42.     try {
  43.       for (int i = 0; i < RECORDS; ++i) {
  44.         tkey.set(Integer.toString(r.nextInt(), 36));
  45.         tval.set(Long.toString(r.nextLong(), 36));
  46.         writer.append(tkey, tval);
  47.       }
  48.     } finally {
  49.       writer.close();
  50.     }
  51.     InputFormat<BytesWritable,BytesWritable> bformat =
  52.       new SequenceFileAsBinaryInputFormat();
  53.     int count = 0;
  54.     r.setSeed(seed);
  55.     BytesWritable bkey = new BytesWritable();
  56.     BytesWritable bval = new BytesWritable();
  57.     Text cmpkey = new Text();
  58.     Text cmpval = new Text();
  59.     DataInputBuffer buf = new DataInputBuffer();
  60.     final int NUM_SPLITS = 3;
  61.     FileInputFormat.setInputPaths(job, file);
  62.     for (InputSplit split : bformat.getSplits(job, NUM_SPLITS)) {
  63.       RecordReader<BytesWritable,BytesWritable> reader =
  64.         bformat.getRecordReader(split, job, Reporter.NULL);
  65.       try {
  66.         while (reader.next(bkey, bval)) {
  67.           tkey.set(Integer.toString(r.nextInt(), 36));
  68.           tval.set(Long.toString(r.nextLong(), 36));
  69.           buf.reset(bkey.getBytes(), bkey.getLength());
  70.           cmpkey.readFields(buf);
  71.           buf.reset(bval.getBytes(), bval.getLength());
  72.           cmpval.readFields(buf);
  73.           assertTrue(
  74.               "Keys don't match: " + "*" + cmpkey.toString() + ":" +
  75.                                            tkey.toString() + "*",
  76.               cmpkey.toString().equals(tkey.toString()));
  77.           assertTrue(
  78.               "Vals don't match: " + "*" + cmpval.toString() + ":" +
  79.                                            tval.toString() + "*",
  80.               cmpval.toString().equals(tval.toString()));
  81.           ++count;
  82.         }
  83.       } finally {
  84.         reader.close();
  85.       }
  86.     }
  87.     assertEquals("Some records not found", RECORDS, count);
  88.   }
  89. }