Optimize locking codepath in LocalDirAllocator.getLocalPathToRead() and reduce 
creating many Path objects
---------------------------------------------------------------------------------------------------------

                 Key: HADOOP-7016
                 URL: https://issues.apache.org/jira/browse/HADOOP-7016
             Project: Hadoop Common
          Issue Type: Bug
          Components: fs
    Affects Versions: 0.20.2
            Reporter: Rajesh Balamohan
             Fix For: 0.20.2


LocalDirAllocator.getLocalPathToRead() is called from TaskTracker to retrieve 
temporary map output location. This method is synchronized and amount of time 
spent on this method directly affects the performance of TaskTracker's ability 
to serve faster.  This JIRA is created to reduce the additional fat in 
getLocalPathToRead() and reduce creating the number of Path obejcts which are 
expensive.

1. getLocalPathToRead() internally calls RawLocalFileSystem.exists() in order 
to check the existence of a local file. RawLocalFileSystem.exists() internally 
creates a FileStatus object which needs to be populated with lastModified, 
length, directory details etc. This might not be necessary for just checking  
file existence.

2. Creating a Path object out of a string requires fair amount of processing. 
It might be worth to store "localDirsPath" in LocalDirAllocator instead of 
storing "localDirs". This would avoid the number of times Path() object is 
created in LocalDirAllocator.

Any other codepath using LocalDirAllocator would also benefit from the above 2 
optimizations.

The attached patch addresses the above 2 issues.

-- 
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