hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ted Yu <yuzhih...@gmail.com>
Subject Re: Anyone good with JRuby?
Date Sat, 04 Oct 2014 23:43:55 GMT
Take a look at Bytes.readByteArray():

  public static byte [] readByteArray(final DataInput in)

...

    byte [] result = new byte[len];

    in.readFully(result, 0, len);

In your case, you have 'buffer' so you don't need to allocate 'result'.

Just plug buffer in the call to readFully().

Cheers

On Sat, Oct 4, 2014 at 4:37 PM, Roger Maillist <darkchanterlist@gmail.com>
wrote:

> I still don't see how they would read into a byte[] buffer. This method
> seems to read an integer value, which is simple. The read(byte[]) method
> returns the number of bytes read and copies the stream into the
> out-parameter. That's unclear to me for JRuby...
>
> 2014-10-05 0:29 GMT+02:00 Ted Yu <yuzhihong@gmail.com>:
>
> > Take a look at readFile() method in bin/region_mover.rb
> >
> > Cheers
> >
> > On Sat, Oct 4, 2014 at 2:33 PM, Roger Maillist <
> darkchanterlist@gmail.com>
> > wrote:
> >
> > > Well, I see they are using .to_java_bytes to cast a string and pass it
> to
> > > the put-method, that's ok. But I am having trouble calling
> > > the inputStream.read method.
> > >
> > > I tried this:
> > >
> > > inFile = File.new("/home/roger/Downloads/test.jpg")
> > > inputStream = FileInputStream.new(inFile)
> > >
> > > length = inFile.length()
> > > buffer = ""
> > >
> > > inputStream.read(buffer)
> > >
> > > But that won't work. It's probably more of a JRuby question than
> actually
> > > an HBase issue...
> > >
> > > 2014-10-04 23:22 GMT+02:00 Ted Yu <yuzhihong@gmail.com>:
> > >
> > > > Take a look at _put_internal() method of
> > > > hbase-shell//src/main/ruby/hbase/table.rb
> > > >
> > > > On Sat, Oct 4, 2014 at 2:15 PM, Roger Maillist <
> > > darkchanterlist@gmail.com>
> > > > wrote:
> > > >
> > > > > Hi out there
> > > > >
> > > > > I am trying to read a (binary) file from the local FS and store it
> in
> > > > HBase
> > > > > using JRuby.
> > > > >
> > > > > But I fail with the byte-array InputStream needed for the
> Put-Method:
> > > > >
> > > > > require "java"
> > > > >
> > > > > java_import "java.io.File"
> > > > > java_import "java.io.FileInputStream"
> > > > >
> > > > > java_import "org.apache.hadoop.hbase.client.HTable"
> > > > > java_import "org.apache.hadoop.hbase.client.Put"
> > > > >
> > > > > def jbytes(*args)
> > > > >   args.map { |arg| arg.to_s.to_java_bytes }
> > > > > end
> > > > >
> > > > > puts "Hello from Ruby"
> > > > >
> > > > > inFile = File.new("/home/roger/Downloads/test.jpg")
> > > > > inputStream = FileInputStream.new(inFile)
> > > > >
> > > > > length = inFile.length()
> > > > > buffer = Java::byte[length].new
> > > > >
> > > > > inputStream.read(buffer)
> > > > >
> > > > > table = HTable.new(@hbase.configuration, "emails")
> > > > > p = Put.new(*jbytes("roger3.pdf"))
> > > > >
> > > > > p.add(*jbytes("inhalt", "", buffer))
> > > > >
> > > > > table.put(p)
> > > > >
> > > > > inputStream.close()
> > > > > table.close()
> > > > >
> > > > >
> > > > >
> > > > > Has anyone done this right?
> > > > >
> > > > > I tried and googled....no breakthrough :-/
> > > > >
> > > > > Thanks
> > > > > Roger
> > > > >
> > > >
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message