[ 
https://issues.apache.org/jira/browse/HADOOP-3364?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12595434#action_12595434
 ] 

Tsz Wo (Nicholas), SZE commented on HADOOP-3364:
------------------------------------------------

fastLoadImage.patch simplifies the image reading codes a lot.  We should do 
something similar for writing.  Here are some comments:

# check whether LOG.isDebugEnabled() before calling LOG.debug(...).
# keep NodeIterator private by defining a method BlockInfo.iterater().
# In FSDirectory.closeFile(...), remove local variable fileNode.  Also, do we 
need "synchronized (rootDir)" there?
# In FSDirectory.addToParent(...), remove "parentINode = newParent;" and return 
newParent.
# Make FSImage.uStr final.  Initialize FSImage.uStr.bytes to a large enough 
array.
# Define a static final field EMPTY_ARRAY = new DatanodeDescriptor[0] in 
DatanodeDescriptor.  Then, change "lastLocations = new DatanodeDescriptor[0];" 
to
lastLocations = DatanodeDescriptor.EMPTY_ARRAY;" in case OP_CLOSE.
# For case OP_SET_GENSTAMP, call in.readLong() directly.
# In FSImage, change saveImage(..., INode current, ...) to saveImage(..., 
INodeDirectory curDir, ...) since current always is a directory
# In INode, remove isRoot and getParentINode since they are not used.
# Add comments saying that FSDirectory/INodeDirectory.addToParent(...) should 
only be used in FSImage.
# Revert the change in LeaseManager.


> Faster image and log edits loading.
> -----------------------------------
>
>                 Key: HADOOP-3364
>                 URL: https://issues.apache.org/jira/browse/HADOOP-3364
>             Project: Hadoop Core
>          Issue Type: Improvement
>          Components: dfs
>    Affects Versions: 0.18.0
>            Reporter: Konstantin Shvachko
>            Assignee: Konstantin Shvachko
>             Fix For: 0.18.0
>
>         Attachments: fastLoadImage.patch
>
>
> This patch optimizes code to provide faster load of fsimage and edits log.
> I implemented ideas mentioned in HADOOP-3022. Namely, removed unnecessary 
> object allocations,
> and implemented optimized loading which avoids unnecessary name-space tree 
> lookups 
> if consecutive files belong to the same parent.
> I changed saveImage algorithm so that it writes first all children of the 
> same directory,
> and then goes inside of its sub-directories. This does not change the format 
> of the image, 
> just changes the order of the stored objects. 
> This should make loading faster after the image is saved with the new version.
> The advantages in performance are
> load/save fsimage: 15-20%
> load edits: 5-10%
> In terms of performance I expected somewhat more from this changes.
> Especially for edits, but it turned out that recent changes substantially 
> slowed down
> edits loading. ADD and CLOSE operations first remove existing file with all 
> its blocks,
> then include at back with potentially new blocks, and then ADD additionally 
> replaces
> just inserted inode by inode-under-construction for the same file.
> This is very inefficient, but hard to fix.
> I'll do it in a separate jira.
> Other changes:
> - I combined most of the UTF8 references in one place at least for FSImage.
> - Included log messages about the startup progress with load/save times and 
> file sizes.
> - Removed pre-crc-upgrade code from FSEdits, which was missed by the 
> crc-remove patch.

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