BufferSorter.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 org.apache.hadoop.io.OutputBuffer;
  20. import org.apache.hadoop.io.SequenceFile.Sorter.RawKeyValueIterator;
  21. import org.apache.hadoop.util.Progressable;
  22. /** This class provides a generic sort interface that should be implemented
  23.  * by specific sort algorithms. The use case is the following:
  24.  * A user class writes key/value records to a buffer, and finally wants to
  25.  * sort the buffer. This interface defines methods by which the user class
  26.  * can update the interface implementation with the offsets of the records
  27.  * and the lengths of the keys/values. The user class gives a reference to
  28.  * the buffer when the latter wishes to sort the records written to the buffer
  29.  * so far. Typically, the user class decides the point at which sort should
  30.  * happen based on the memory consumed so far by the buffer and the data
  31.  * structures maintained by an implementation of this interface. That is why
  32.  * a method is provided to get the memory consumed so far by the datastructures
  33.  * in the interface implementation.  
  34.  */
  35. interface BufferSorter extends JobConfigurable {
  36.   
  37.   /** Pass the Progressable object so that sort can call progress while it is sorting
  38.    * @param reporter the Progressable object reference
  39.    */
  40.   public void setProgressable(Progressable reporter);
  41.     
  42.   /** When a key/value is added at a particular offset in the key/value buffer, 
  43.    * this method is invoked by the user class so that the impl of this sort 
  44.    * interface can update its datastructures. 
  45.    * @param recordOffset the offset of the key in the buffer
  46.    * @param keyLength the length of the key
  47.    * @param valLength the length of the val in the buffer
  48.    */
  49.   public void addKeyValue(int recordoffset, int keyLength, int valLength);
  50.   
  51.   /** The user class invokes this method to set the buffer that the specific 
  52.    * sort algorithm should "indirectly" sort (generally, sort algorithm impl 
  53.    * should access this buffer via comparators and sort offset-indices to the
  54.    * buffer).
  55.    * @param buffer the map output buffer
  56.    */
  57.   public void setInputBuffer(OutputBuffer buffer);
  58.   
  59.   /** The framework invokes this method to get the memory consumed so far
  60.    * by an implementation of this interface.
  61.    * @return memoryUsed in bytes 
  62.    */
  63.   public long getMemoryUtilized();
  64.   
  65.   /** Framework decides when to actually sort
  66.    */
  67.   public RawKeyValueIterator sort();
  68.   
  69.   /** Framework invokes this to signal the sorter to cleanup
  70.    */
  71.   public void close();
  72. }