Uploaded image for project: 'Hadoop Map/Reduce'
  1. Hadoop Map/Reduce
  2. MAPREDUCE-4381

Make PROGRESS_INTERVAL of org.apache.hadoop.mapred.Task a tunable

    Details

    • Type: Improvement
    • Status: Open
    • Priority: Minor
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: task, tasktracker
    • Labels:
      None

      Description

      Currently PROGRESS_INTERVAL is a hard-coded value and is set to 3000 msec. We tried making it a tunable and experimented with different values. In some cases setting it to a smaller value like 1000 msec helps significantly improve performance of short running jobs such as piEstimator. This is because the task threads do not end up blocking for as many as 3 seconds for their last progress update event. We also noticed close to 14% improvement on Mahout KMeans iteration jobs which take more than 5 minutes on the test cluster that we are using. Please let me know if this seems to be a good idea. I have an initial patch that I have attached here. This is based on branch-1 tree. It may need some rework on MRv2 based branches I think. Also note that I have not changed the variable naming style for PROGRESS_INTERVAL even though it is not a public static final anymore. I can revise the patch if there are no objections to this idea.
      Thanks.

      1. progress_interval.patch
        2 kB
        Shrinivas Joshi
      2. MAPREDUCE-4381-branch-1.patch
        3 kB
        Shrinivas Joshi

        Issue Links

          Activity

          Hide
          stevel@apache.org Steve Loughran added a comment -

          I can see the value in this, though I worry that per-job tuning may cause some people to submit tasks that trigger scalability issues -someone else will have to comment on that.

          Independent of that,
          #yes, the value field name should be switched to the standard form of a variable; being private there's no compatibility problems.
          #the parameter name should be extracted into a static final field of Task, along with the default value, for ease of setup from code.
          #it needs to be documented somewhere
          #How do you think this should be tested?

          Show
          stevel@apache.org Steve Loughran added a comment - I can see the value in this, though I worry that per-job tuning may cause some people to submit tasks that trigger scalability issues -someone else will have to comment on that. Independent of that, #yes, the value field name should be switched to the standard form of a variable; being private there's no compatibility problems. #the parameter name should be extracted into a static final field of Task, along with the default value, for ease of setup from code. #it needs to be documented somewhere #How do you think this should be tested?
          Hide
          jshrinivas Shrinivas Joshi added a comment -

          Thanks for the code review.
          I agree about the possibility of creating scalability issues. Setting progress interval to a very small value may lead to excessive status update events. Can we address this by setting a lower bound requirement on the value of progress interval that the user can set? If so, how does 500 milliseconds sound as the lower bound?
          I will address your comments in the 1st and 2nd bullet above in the revised version of this patch along with other changes.
          As you may have seen I have included a short description of the new property in src/mapred/mapred-default.xml file. Is there any other more appropriate file/location where this needs to be documented?
          Since this patch only makes progress_interval a tunable, would it suffice to test whether the value returned by JobConf matches the one set in mapred-site.xml?

          Show
          jshrinivas Shrinivas Joshi added a comment - Thanks for the code review. I agree about the possibility of creating scalability issues. Setting progress interval to a very small value may lead to excessive status update events. Can we address this by setting a lower bound requirement on the value of progress interval that the user can set? If so, how does 500 milliseconds sound as the lower bound? I will address your comments in the 1st and 2nd bullet above in the revised version of this patch along with other changes. As you may have seen I have included a short description of the new property in src/mapred/mapred-default.xml file. Is there any other more appropriate file/location where this needs to be documented? Since this patch only makes progress_interval a tunable, would it suffice to test whether the value returned by JobConf matches the one set in mapred-site.xml?
          Hide
          jshrinivas Shrinivas Joshi added a comment -

          I have attached a revised version of this patch which addresses some of the code review comments from Steve. Specifically changes in this version are:

          • Renamed patch file name to match official contribution patch naming conventions
          • Used appropriate naming style for PROGRESS_INTERVAL variable
          • Used more appropriate name for the progress interval property
          • The new property is now read using existing JobConf.getInt method instead of introducing a new query method

          I have not thought this through completely, but would it be possible to implement a test case similar to TestCombineOutputCollector for this feature?

          Show
          jshrinivas Shrinivas Joshi added a comment - I have attached a revised version of this patch which addresses some of the code review comments from Steve. Specifically changes in this version are: Renamed patch file name to match official contribution patch naming conventions Used appropriate naming style for PROGRESS_INTERVAL variable Used more appropriate name for the progress interval property The new property is now read using existing JobConf.getInt method instead of introducing a new query method I have not thought this through completely, but would it be possible to implement a test case similar to TestCombineOutputCollector for this feature?
          Hide
          vicaya Luke Lu added a comment -

          MAPREDUCE-4400 makes the configuration unnecessary. I agree with Steve that exposing this config can cause more issues than it can solve.

          Show
          vicaya Luke Lu added a comment - MAPREDUCE-4400 makes the configuration unnecessary. I agree with Steve that exposing this config can cause more issues than it can solve.

            People

            • Assignee:
              Unassigned
              Reporter:
              jshrinivas Shrinivas Joshi
            • Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

              • Created:
                Updated:

                Development