[ https://issues.apache.org/jira/browse/CASSANDRA-2542?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13023217#comment-13023217 ]
Timu Eren commented on CASSANDRA-2542: -------------------------------------- i have absolutely no idea why i get this exception, if i use column names instead SliceRange for SlicePredicate does not change at all > InvalidRequestException > ----------------------- > > Key: CASSANDRA-2542 > URL: https://issues.apache.org/jira/browse/CASSANDRA-2542 > Project: Cassandra > Issue Type: Bug > Components: Core > Affects Versions: 0.7.4 > Reporter: Timu Eren > Priority: Minor > > i got InvalidRequestException when execute map reduce jobs on supercolumn, if > i set the comparator as LongType, other types (AsciiType, UTF8Type, > IntegerType) works just fine > Here is reprocedure details. > create column family > SuperTest > with > column_type=Super and > comparator=LongType and > subcomparator=UTF8Type and > default_validation_class=UTF8Type; > list SuperTest; > Using default limit of 100 > ------------------- > RowKey: 2 > => (super_column=10, > (column=1, value=1, timestamp=1303459440853000)) > => (super_column=11, > (column=1, value=1, timestamp=1303459437632000)) > => (super_column=12, > (column=1, value=1, timestamp=1303459432652000)) > => (super_column=13, > (column=1, value=1, timestamp=1303459435102000)) > ------------------- > RowKey: 1 > => (super_column=10, > (column=1, value=1, timestamp=1303459423202000)) > => (super_column=11, > (column=1, value=1, timestamp=1303459419112000)) > => (super_column=12, > (column=deneme, value=1, timestamp=1303459362702000)) > => (super_column=13, > (column=deneme, value=1, timestamp=1303459382023000)) > => (super_column=15, > (column=1, value=1, timestamp=1303459426402000)) > 2 Rows Returned. > == Test class == > import java.io.IOException; > import java.nio.ByteBuffer; > import java.util.List; > import java.util.SortedMap; > import org.apache.cassandra.hadoop.ColumnFamilyInputFormat; > import org.apache.cassandra.hadoop.ColumnFamilyOutputFormat; > import org.apache.cassandra.hadoop.ConfigHelper; > import org.apache.cassandra.avro.Mutation; > import org.apache.cassandra.thrift.SliceRange; > import org.apache.cassandra.thrift.SlicePredicate; > import org.apache.cassandra.utils.ByteBufferUtil; > import org.apache.cassandra.db.IColumn; > import org.apache.hadoop.conf.Configuration; > import org.apache.hadoop.conf.Configured; > import org.apache.hadoop.io.IntWritable; > import org.apache.hadoop.io.Text; > import org.apache.hadoop.mapreduce.Job; > import org.apache.hadoop.mapreduce.Mapper; > import org.apache.hadoop.mapreduce.Reducer; > import org.apache.hadoop.util.Tool; > import org.apache.hadoop.util.ToolRunner; > import org.slf4j.Logger; > import org.slf4j.LoggerFactory; > class SuperColumnTest extends Configured implements Tool { > > private static final Logger logger = > LoggerFactory.getLogger(SuperColumnTest.class); > > public static void main(String[] args) throws Exception { > ToolRunner.run(new Configuration(), new SuperColumnTest(), args); > System.exit(0); > } > > public static class SuperColumnTestMapper extends Mapper<ByteBuffer, > SortedMap<ByteBuffer, IColumn>, Text, IntWritable> { > private static final Logger logger = > LoggerFactory.getLogger(SuperColumnTestMapper.class); > > public void map(ByteBuffer key, SortedMap<ByteBuffer, IColumn> > columns, Context context) throws IOException, InterruptedException { > > logger.info(String.format("Key:%s, size: %s", > ByteBufferUtil.string(key), columns.size())); > > > } > } > > public static class SuperColumnTestReducer extends Reducer<Text, > IntWritable, ByteBuffer, List<Mutation>> { > public void reduce(Text key, Iterable<IntWritable> values, Context > context) throws IOException, InterruptedException { > > } > } > > public int run(String[] args) throws Exception{ > > Job job = new Job(this.getConf(), "SuperColumnMapReduceTest"); > job.setJarByClass(SuperColumnTest.class); > job.setMapperClass(SuperColumnTestMapper.class); > job.setReducerClass(SuperColumnTestReducer.class); > > > job.setOutputFormatClass(ColumnFamilyOutputFormat.class); > ConfigHelper.setOutputColumnFamily(job.getConfiguration(), "xxxx", > "SuperTest"); > > job.setMapOutputKeyClass(Text.class); > job.setMapOutputValueClass(IntWritable.class); > > job.setOutputKeyClass(ByteBuffer.class); > job.setOutputValueClass(List.class); > job.setInputFormatClass(ColumnFamilyInputFormat.class); > > > ConfigHelper.setInputColumnFamily(job.getConfiguration(), "xxxx", > "SuperTest"); > ConfigHelper.setRpcPort(job.getConfiguration(), "9160"); > ConfigHelper.setInitialAddress(job.getConfiguration(), "xxxx"); > ConfigHelper.setPartitioner(job.getConfiguration(), > "org.apache.cassandra.dht.RandomPartitioner"); > > > > SlicePredicate sp =new SlicePredicate(); > > ByteBuffer startKey = ByteBuffer.wrap("".getBytes()); > ByteBuffer endKey = ByteBuffer.wrap("".getBytes()); > SliceRange range = new SliceRange(); > range.setStart(startKey); > range.setFinish(endKey); > range.setCount(Integer.MAX_VALUE); > > sp.setSlice_range(range); > > ConfigHelper.setInputSlicePredicate(job.getConfiguration(), sp); > > Long start = System.currentTimeMillis(); > job.waitForCompletion(true); > logger.info(String.format("Job Finished in " + > (System.currentTimeMillis() - start) / 1000.0 + " seconds")); > > return 0; > } > } > java.lang.RuntimeException: InvalidRequestException(why:Expected 8 or 0 byte > long (2)) > at > org.apache.cassandra.hadoop.ColumnFamilyRecordReader$RowIterator.maybeInit(ColumnFamilyRecordReader.java:260) > at > org.apache.cassandra.hadoop.ColumnFamilyRecordReader$RowIterator.computeNext(ColumnFamilyRecordReader.java:275) > at > org.apache.cassandra.hadoop.ColumnFamilyRecordReader$RowIterator.computeNext(ColumnFamilyRecordReader.java:172) > at > com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:136) > at > com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:131) > at > org.apache.cassandra.hadoop.ColumnFamilyRecordReader.nextKeyValue(ColumnFamilyRecordReader.java:131) > at > org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:423) > at > org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67) > at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143) > at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:621) > at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305) > at > org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177) > Caused by: InvalidRequestException(why:Expected 8 or 0 byte long (2)) > at > org.apache.cassandra.thrift.Cassandra$get_range_slices_result.read(Cassandra.java:12088) > at > org.apache.cassandra.thrift.Cassandra$Client.recv_get_range_slices(Cassandra.java:732) > at > org.apache.cassandra.thrift.Cassandra$Client.get_range_slices(Cassandra.java:704) > at > org.apache.cassandra.hadoop.ColumnFamilyRecordReader$RowIterator.maybeInit(ColumnFamilyRecordReader.java:238) > ... 11 more -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira