Package eu.stratosphere.nephele.services.iomanager

Examples of eu.stratosphere.nephele.services.iomanager.ChannelWriterOutputView


        // create writer
        final BlockChannelWriter writer = this.ioManager.createBlockChannelWriter(
                                channel, this.numWriteBuffersToCluster);
        registerOpenChannelToBeRemovedAtShudown(writer);
        final ChannelWriterOutputView output = new ChannelWriterOutputView(writer, this.writeMemory,
                                      this.memManager.getPageSize());

        // write sort-buffer to channel
        if (LOG.isDebugEnabled()) {
          LOG.debug("Combining buffer " + element.id + '.');
        }

        // set up the combining helpers
        final InMemorySorter<E> buffer = element.buffer;
        final CombineValueIterator<E> iter = new CombineValueIterator<E>(buffer, this.serializer.createInstance());
        final WriterCollector<E> collector = new WriterCollector<E>(output, this.serializer);

        int i = 0;
        int stop = buffer.size() - 1;

        try {
          while (i < stop) {
            int seqStart = i;
            while (i < stop && 0 == buffer.compare(i, i + 1)) {
              i++;
            }
 
            if (i == seqStart) {
              // no duplicate key, no need to combine. simply copy
              buffer.writeToOutput(output, seqStart, 1);
            } else {
              // get the iterator over the values
              iter.set(seqStart, i);
              // call the combiner to combine
              combineStub.combine(iter, collector);
            }
            i++;
          }
        }
        catch (Exception ex) {
          throw new IOException("An error occurred in the combiner user code.", ex);
        }

        // write the last pair, if it has not yet been included in the last iteration
        if (i == stop) {
          buffer.writeToOutput(output, stop, 1);
        }

        // done combining and writing out
        if (LOG.isDebugEnabled()) {
          LOG.debug("Combined and spilled buffer " + element.id + ".");
        }

        output.close();
        unregisterOpenChannelToBeRemovedAtShudown(writer);
       
        channelIDs.add(new ChannelWithBlockCount(channel, output.getBlockCount()));

        // pass empty sort-buffer to reading thread
        element.buffer.reset();
        this.queues.empty.add(element);
      }
View Full Code Here


      final Channel.ID mergedChannelID = this.ioManager.createChannel();
      registerChannelToBeRemovedAtShudown(mergedChannelID);
      final BlockChannelWriter writer = this.ioManager.createBlockChannelWriter(
                              mergedChannelID, this.numWriteBuffersToCluster);
      registerOpenChannelToBeRemovedAtShudown(writer);
      final ChannelWriterOutputView output = new ChannelWriterOutputView(writer, writeBuffers,
                                      this.memManager.getPageSize());
     
      final WriterCollector<E> collector = new WriterCollector<E>(output, this.serializer);
      final GenericCombine<E> combineStub = CombiningUnilateralSortMerger.this.combineStub;

      // combine and write to disk
      try {
        while (groupedIter.nextKey()) {
          combineStub.combine(groupedIter.getValues(), collector);
        }
      }
      catch (Exception e) {
        throw new IOException("An error occurred in the combiner user code.");
      }
      output.close(); //IS VERY IMPORTANT!!!!
     
      final int numBlocksWritten = output.getBlockCount();
     
      // register merged result to be removed at shutdown
      unregisterOpenChannelToBeRemovedAtShudown(writer);
     
      // remove the merged channel readers from the clear-at-shutdown list
View Full Code Here

TOP

Related Classes of eu.stratosphere.nephele.services.iomanager.ChannelWriterOutputView

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.