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 <[email protected]>:

> 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 <[email protected]>
> 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
> >
>

Reply via email to