[ 
https://issues.apache.org/jira/browse/MAPREDUCE-1594?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12845752#action_12845752
 ] 

Hong Tang commented on MAPREDUCE-1594:
--------------------------------------

- Overall, the approach looks fine although the implementation is still a bit 
hacky in the sense that users still need to specify input/output directories 
for running sleep jobs (which should be ignored). But I am fine with it for now 
as the structure is likely evolving with more extensions to be added to Gridmix.
- Style comment: Consider change JobType to JobCreator - it sounds more natural 
to call JobCreator.createGridmixJob(...).
- Structure wise, it would be better to rename GridmixJob to LoadJob, and 
create a common base (probably should be abstract) class for LoadJob and 
SleepJob and call it GridmixJob that *only* contains the shared parts of 
LoadJob and SleepJob. E.g. outdir may only belong to LoadJob but not SleepJob. 
(BTW, are File{Input,Output}Format.set{Input,Output}Path needed for 
SleepJob.call()?)
- SleepInputFormat.createRecordReader - should return a record reader that 
produces consecutive keys that match the expected wakeup time for the mapper 
process. Something like the following:
{noformat}
      return new RecordReader<LongWritable, LongWritable>() {
        long start = -1;
        long slept = 0L;
        long sleep = 0L;
        final LongWritable key = new LongWritable();
        final LongWritable val = new LongWritable();

        @Override
        public boolean nextKeyValue() throws IOException {
          if (start == -1) {
            start = System.nanoTime()/1000000;
          }
          slept += sleep;
          sleep = Math.min(duration - slept, RINTERVAL);
          key.set(slept + sleep + start);
          val.set(duration - slept);
          return slept < duration;
        }

        @Override
        public float getProgress() throws IOException {
          return slept / ((float) duration);
        }

        @Override
        public LongWritable getCurrentKey() {
          return key;
        }

        @Override
        public LongWritable getCurrentValue() {
          return val;
        }

        @Override
        public void close() throws IOException {
          final String msg = "Slept for " + duration;
          LOG.info(msg);
        }

        public void initialize(InputSplit split, TaskAttemptContext ctxt) {
        }
      };
{noformat}

Accordingly, SleepMapper.map(...) should be modified as follows:
{noformat}
    public void map(LongWritable key, LongWritable value, Context context)
      throws IOException, InterruptedException {
      context.setStatus("Sleeping... " + value.get() + " ms left");
      long now = System.nanoTime()/1000000;
      if (now < key.get()) {
        TimeUnit.MILLISECONDS.sleep(key.get()-now);
      }
    }
{noformat}
This is to avoid the actual sleep time deviates from the expected sleep time 
and the error gets accumulated over many map() calls.
- Similar idea should be applied to SleepReducer too.
- Do I read it right that by default the mapper() updates its progress once 
every 10 seconds? It is more interesting to make RINTERVAL == Math.min(1sec, 
totalDuration/20) so that the reported map task progress could be smoother. 
(Unfortunately the reduce progress may not be very useful).
- Should issue a warning in SleepJob.getSuccessfulAttemptInfo() if no 
successful attempt is found.
- SleepJob.buildSplits(): should not use InputStriper at all. At the end, you 
should set locations  of SleepSplit to "new String[0]" instead of 
"striper.splitFor(inputDir, 512, 3).getLocations()"


> Support for Sleep Jobs in gridmix
> ---------------------------------
>
>                 Key: MAPREDUCE-1594
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-1594
>             Project: Hadoop Map/Reduce
>          Issue Type: New Feature
>          Components: contrib/gridmix
>            Reporter: rahul k singh
>         Attachments: 1594-yhadoop-20-1xx-1.patch, 1594-yhadoop-20-1xx.patch
>
>
> Support for Sleep jobs in gridmix

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to