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