Home | About | Sematext search-lucene.com search-hadoop.com
 Search Hadoop and all its subprojects:

Switch to Threaded View
HBase, mail # user - java.io.IOException: Pass a Delete or a Put


Copy link to this message
-
Re: java.io.IOException: Pass a Delete or a Put
Doug Meil 2012-09-12, 18:05

Did you compare your example to this...

http://hbase.apache.org/book.html#mapreduce.example
7.2.2. HBase MapReduce Read/Write Example
?
On 9/12/12 1:02 PM, "Jothikumar Ekanath" <[EMAIL PROTECTED]> wrote:

>Any help on this one please.
>
>On Tue, Sep 11, 2012 at 11:19 AM, Jothikumar Ekanath
><[EMAIL PROTECTED]>wrote:
>
>> Hi Stack,
>>                 Thanks for the reply. I looked at the code and i am
>>having
>> a very basic confusion on how to use it correctly.  The code i wrote
>> earlier has the following input and output types and i want it that way
>>
>> After looking at the sources and examples, i modified my reducer (given
>> below), the mapper and job configuration are still the same. Still i see
>> the same error. Am i doing something wrong?
>>
>>
>>  DailySumMapper extends TableMapper<Text, Text>
>>     KEYOUT = Text
>>     VALUEOUT = Text
>>
>>  DailySumReducer extends TableReducer<Text, Text,
>>ImmutableBytesWritable>
>>
>>     KEYIN = Text
>>     VALUEIN = Text
>>     KEYOUT = ImmutableBytesWritable
>>     VALUEOUT = must be always Put or Delete when we extend TableReducer,
>> So we are not specifying that.
>>
>> Code
>>  public static class DailySumReducer extends TableReducer<Text, Text,
>> ImmutableBytesWritable> {
>>
>>         private int count = 0;
>>         protected void reduce(Text key, Iterable<Text>
>> values,Reducer.Context context) throws IOException,
>>InterruptedException{
>>
>>             long inbound = 0l;
>>             long outbound = 0l;
>>             for (Text val : values) {
>>                 String text = val.toString();
>>                 int index = text.indexOf("-");
>>                 String in = text.substring(0,index);
>>                 String out = text.substring(index+1,text.length());
>>                 inbound = inbound + Long.parseLong(in);
>>                 outbound = outbound + Long.parseLong(out);
>>             }
>>             ByteBuffer data = ByteBuffer.wrap(new byte[16]);
>>             data.putLong(inbound);
>>             data.putLong(outbound);
>>             Put put = new Put(Bytes.toBytes(key.toString()+20120804));
>>             put.add(Bytes.toBytes("t"),
>>Bytes.toBytes("s"),data.array());
>>             context.setStatus("Emitting Put " + count++);
>>             ImmutableBytesWritable ibw = new
>> ImmutableBytesWritable(Bytes.toBytes(key.toString()));
>>             context.write(ibw,put);
>>
>>         }
>>     }
>>
>> On Tue, Sep 11, 2012 at 10:38 AM, Stack <[EMAIL PROTECTED]> wrote:
>>
>>> On Mon, Sep 10, 2012 at 7:06 PM, Jothikumar Ekanath
>>><[EMAIL PROTECTED]>
>>> wrote:
>>> > Hi,
>>> >        Getting this error while using hbase as a sink.
>>> >
>>> >
>>> > Error
>>> > java.io.IOException: Pass a Delete or a Put
>>>
>>> Would suggest you study the mapreduce jobs that ship with hbase both
>>> in main and under test.
>>>
>>> Looking at your program, you are all Text.  The above complaint is
>>> about wanting a Put or Delete.  Can you change what you produce so
>>> Put/Delete rather than Text?
>>>
>>> St.Ack
>>>
>>
>>