Home | About | Sematext search-lucene.com search-hadoop.com
NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB
 Search Hadoop and all its subprojects:

Switch to Threaded View
HBase >> mail # user >> KeyValue.getLength() question


Copy link to this message
-
Re: KeyValue.getLength() question
That is correct.
If you do this on the client (for example with a KeyValue you got from a Result object) it might work, but generally you cannot do this.

This, however will always work:

KeyValue kv = ...;

KeyValue myKv = new KeyValue(kv.getBuffer(), kv.getOffset());
byte[] myRowKey = myKv.getRow();
Think of a KeyValue object as a "pointer" into a larger byte[]. Java (unfortunately!) does not have pointers, so we have to pass the array and an offset around.

-- Lars
----- Original Message -----
From: Kim Chew <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Cc:
Sent: Wednesday, September 25, 2013 10:12 AM
Subject: Re: KeyValue.getLength() question

hmm, does it mean if I do something like this, I won't get the correct
KeyValue object back?

byte[] rowKey = kv.getRow();
byte[] buf = kv.getBuffer();
KeyValue myKv = new KeyValue(buf);
byte[] myRowKey = myKv.getRow();

rowKey will not be equal to myRowKey.

Kim
On Wed, Sep 25, 2013 at 12:13 AM, Robert Dyer <[EMAIL PROTECTED]> wrote:

> Note that the buffer may be larger than the actually used portion.
>
> myKV.getBuffer().length gives you the length of the buffer (allocated
> array)
> myKV.getLength() gives you the length of the USED buffer (less than or
> equal to the previous)
>
>
> On Wed, Sep 25, 2013 at 2:06 AM, Kim Chew <[EMAIL PROTECTED]> wrote:
>
> > Hello,
> >
> > I have a "strange" situation that I can't wrap my head around it. Say,
> for
> > example, I have an KeyValue instance, shouldn't
> >
> >     myKV.getLength() == myKV.getBuffer().length ?
> >
> > Given that, "getLength()" returns "Length of bytes this KeyValue occupies
> > in getBuffer()<
> >
> http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/KeyValue.html#getBuffer%28%29
> > >
> > ."
> >
> >
> > In my case the value returned by "myKV.getBuffer().length" is greater
> than
> > "myKV.getLength()". What possibly went wrong?
> >
> > TIA
> >
> > Kim.
> >
>
>
>
> --
>
> Robert Dyer
> [EMAIL PROTECTED]
>
NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB