You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-issues@hadoop.apache.org by "Daryn Sharp (JIRA)" <ji...@apache.org> on 2014/11/24 19:31:12 UTC
[jira] [Updated] (HDFS-7435) PB encoding of block reports is very
inefficient
[ https://issues.apache.org/jira/browse/HDFS-7435?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daryn Sharp updated HDFS-7435:
------------------------------
Attachment: HDFS-7435.patch
Adds a backwards-compatible that is more efficient for the primitive long array. Both array re-allocs and the unnecessary boxing/unboxing of the longs is eliminated.
Datanode detects namenode version to determine if it should use the current repeating field or a new more efficient buffer. {{CodedOutputStream}} is used to explicitly encode the longs into a buffer with # of longs followed by varint64 encoded longs.
Namenode detects if datanode has sent old or new format. If new format, it can immediately allocate a long[] of the correct size and decode straight into it which eliminates both re-allocs & unboxing overhead.
> PB encoding of block reports is very inefficient
> ------------------------------------------------
>
> Key: HDFS-7435
> URL: https://issues.apache.org/jira/browse/HDFS-7435
> Project: Hadoop HDFS
> Issue Type: Improvement
> Components: datanode, namenode
> Affects Versions: 2.0.0-alpha, 3.0.0
> Reporter: Daryn Sharp
> Assignee: Daryn Sharp
> Priority: Critical
> Attachments: HDFS-7435.patch
>
>
> Block reports are encoded as a PB repeating long. Repeating fields use an {{ArrayList}} with default capacity of 10. A block report containing tens or hundreds of thousand of longs (3 for each replica) is extremely expensive since the {{ArrayList}} must realloc many times. Also, decoding repeating fields will box the primitive longs which must then be unboxed.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)