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)