Hi,
I attach a summing combiner into a newly created table. The snippet code is
something like:

                        EnumSet<IteratorScope> iteratorScopes =
EnumSet.allOf(IteratorScope.class);

                        // first, remove versioning iterator since it will not 
work with combiner
                        conn.tableOperations().removeIterator(tableName,
                                VERS_ITERATOR_NAME,
                                iteratorScopes);
                        
                        // create the combiner setting, in this case it is 
SummingCombiner, which
will
                        // sum value of all rows with same key (different 
timestamp is considered
same)
                        // and result in single row with that key and aggregate 
value
                        IteratorSetting setting = new IteratorSetting(
                                COMBINERS_PRIORITY,
                                SUM_COMBINERS_NAME,
                                SummingCombiner.class);
                        
                        // set the combiner to apply to all columns
                        SummingCombiner.setCombineAllColumns(setting, true);
                        
                        // need to set encoding type, otherwise exception will 
be thrown during
scan
                        SummingCombiner.setEncodingType(setting, 
LongLexicoder.class);
                        
                        // attach the combiner to the table
                        conn.tableOperations().attachIterator(tableName, 
setting,
iteratorScopes);


As you see from the code above, I use LongLexicoder class as the encoding
type.
The mutation I add for that table will be unique row id, a string for column
family, empty column qualifier, and the value is "new
LongLexicoder().encode(1L)", so basically the value is 1.

It runs fine until at one point (and I can see rows are inserted into the
table), but it hung then.
Looking at the tablet server logs I found:

2015-08-31 17:59:42,371 [tserver.MinorCompactor] WARN : MinC failed (0) to
create
hdfs://<machine>:<port>/accumulo/tables/l/default_tablet/F00009gp.rf_tmp
retrying ...
java.lang.ArrayIndexOutOfBoundsException: 0
        at
org.apache.accumulo.core.client.lexicoder.ULongLexicoder.decode(ULongLexicoder.java:60)
        at
org.apache.accumulo.core.client.lexicoder.LongLexicoder.decode(LongLexicoder.java:33)
        at
org.apache.accumulo.core.client.lexicoder.LongLexicoder.decode(LongLexicoder.java:25)
        at
org.apache.accumulo.core.iterators.TypedValueCombiner$VIterator.hasNext(TypedValueCombiner.java:82)
        at
org.apache.accumulo.core.iterators.user.SummingCombiner.typedReduce(SummingCombiner.java:31)
        at
org.apache.accumulo.core.iterators.user.SummingCombiner.typedReduce(SummingCombiner.java:27)
        at
org.apache.accumulo.core.iterators.TypedValueCombiner.reduce(TypedValueCombiner.java:182)
        at
org.apache.accumulo.core.iterators.Combiner.findTop(Combiner.java:166)
        at
org.apache.accumulo.core.iterators.Combiner.next(Combiner.java:147)
        at
org.apache.accumulo.tserver.Compactor.compactLocalityGroup(Compactor.java:505)
        at org.apache.accumulo.tserver.Compactor.call(Compactor.java:362)
        at
org.apache.accumulo.tserver.MinorCompactor.call(MinorCompactor.java:96)
        at org.apache.accumulo.tserver.Tablet.minorCompact(Tablet.java:2072)
        at org.apache.accumulo.tserver.Tablet.access$4400(Tablet.java:172)
        at
org.apache.accumulo.tserver.Tablet$MinorCompactionTask.run(Tablet.java:2159)
        at
org.apache.accumulo.core.util.LoggingRunnable.run(LoggingRunnable.java:34)
        at
org.apache.accumulo.trace.instrument.TraceRunnable.run(TraceRunnable.java:47)
        at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at
org.apache.accumulo.trace.instrument.TraceRunnable.run(TraceRunnable.java:47)
        at
org.apache.accumulo.core.util.LoggingRunnable.run(LoggingRunnable.java:34)
        at java.lang.Thread.run(Thread.java:722)


Looking at Accumulo's source code in ULongLexicoder.java, it looks like the
array is empty, hence it throws exception, which is still happening even
after I killed my app. I am thinking to stop Accumulo.
Do you have any idea why the array is empty? I am thinking to experiment
with String encoder instead of using LongLexicoder.


  public Long decode(byte[] data) {

    long l = 0;
    int shift = 0;

    if (data[0] < 0 || data[0] > 16)
      throw new IllegalArgumentException("Unexpected length " + (0xff &
data[0]));

    ...
  }


Thanks,
zainal



--
View this message in context: 
http://apache-accumulo.1065345.n5.nabble.com/exception-thrown-during-minor-compaction-tp15010.html
Sent from the Developers mailing list archive at Nabble.com.

Reply via email to