Hi, I have identified the problem, and fixed it. The problem is, I have to provide default constructor for CustomComparator...
Regards, Nageswaran. S On Wed, Jan 4, 2012 at 3:54 AM, Jean-Daniel Cryans <[email protected]>wrote: > Is your comparator on the region server's classpath? Else it won't be > able to guess what that comparator looks like :) > > Also your region server log should tell you it's not able to find > CustomComparator. > > J-D > > On Fri, Dec 30, 2011 at 12:56 AM, Nageswaran Surendhar > <[email protected]> wrote: > > public class CustomComparator extends WritableByteArrayComparable > > { > > > > final CimKeyType cimKeyType; > > final byte[] value; > > > > public CustomComparator(byte[] value, CimKeyType cimKeyType) > > { > > super(value); > > this.value = value; > > this.cimKeyType = cimKeyType; > > } > > > > @Override > > public int compareTo(byte[] value) > > { > > int differenceValue; > > > > switch (cimKeyType) > > { > > case INTEGER: > > differenceValue = Bytes.toInt(this.value) - > Bytes.toInt(value); > > break; > > case LONG: > > differenceValue = (int) (Bytes.toLong(this.value) - > > Bytes.toLong(value)); > > break; > > case DOUBLE: > > differenceValue = (int) (Bytes.toDouble(this.value) - > > Bytes.toDouble(value)); > > break; > > case STRING: > > default: > > differenceValue = > > Bytes.toString(this.value).compareTo(Bytes.toString(value)); > > } > > > > System.out.println("differenceValue : " +differenceValue); > > > > return differenceValue; > > } > > } > > > > > > > > CustomComparator comparator = new CustomComparator(filterValue, > > lField.getCimKeyType()); > > //BinaryComparator comparator = new BinaryComparator(filterValue); > > > > SingleColumnValueFilter singleColumnValueFilter = new > > SingleColumnValueFilter(Bytes.toBytes(familyAndCol[0]), > > Bytes.toBytes(familyAndCol[1]), compareOperator, comparator); > > > > if (myNumberOfVersions > 0) > > get.setMaxVersions(myNumberOfVersions); > > > > > > if (filterList != null) > > get.setFilter(filterList); > > > > Result result = hTable.get(get); > > > > > > I m using the above code inside hadoop-mapper. I had make it jar and > placed > > it inside both hadoop/lib and hbase/lib. > > > > If i use BinaryComparator, i m not getting any exception, and error. But > if > > I used CustomComparator, I m getting the follwoing Exception. > > > > > > at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:391) > > at org.apache.hadoop.mapred.MapTask.run(MapTask.java:325) > > at org.apache.hadoop.mapred.Child$4.run(Child.java:270) > > at java.security.AccessController.doPrivileged(Native Method) > > at javax.security.auth.Subject.doAs(Subject.java:396) > > at > org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127) > > at org.apache.hadoop.mapred.Child.main(Child.java:264) > > Caused by: org.apache.hadoop.hbase.client.RetriesExhaustedException: > > Trying to contact region server localhost:50682 for region > > mytable,,1325226129670.708fa93842d13d3448295d88906d7ab8., row '444', > > but failed after 10 attempts. > > Exceptions: > > java.io.IOException: Call to localhost/127.0.0.1:50682 failed on > > local exception: java.io.EOFException > > java.io.IOException: Call to localhost/127.0.0.1:50682 failed on > > local exception: java.io.EOFException > > java.io.IOException: Call to localhost/127.0.0.1:50682 failed on > > local exception: java.io.EOFException > > java.io.IOException: Call to localhost/127.0.0.1:50682 failed on > > local exception: java.io.EOFException > > java.io.IOException: Call to localhost/127.0.0.1:50682 failed on > > local exception: java.io.EOFException > > java.io.IOException: Call to localhost/127.0.0.1:50682 failed on > > local exception: java.io.EOFException > > java.io.IOException: Call to localhost/127.0.0.1:50682 failed on > > local exception: java.io.EOFException > > java.io.IOException: Call to localhost/127.0.0.1:50682 failed on > > local exception: java.io.EOFException > > java.io.IOException: Call to localhost/127.0.0.1:50682 failed on > > local exception: java.io.EOFException > > java.io.IOException: Call to localhost/127.0.0.1:50682 failed on > > local exception: java.io.EOFException > > > > at > org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionServerWithRetries(HConnectionManager.java:1024) > > at org.apache.hadoop.hbase.client.HTable.get(HTable.java:555) > > at > > ... 12 more > > 2011-12-30 13:36:30,175 INFO org.apache.hadoop.mapred.Task: > > Runnning cleanup for the task > > > > command line jps output is > > 18667 HMaster > > 17929 NameNode > > 21942 Jps > > 18266 SecondaryNameNode > > 18100 DataNode > > 19143 Main > > 18523 TaskTracker > > 18362 JobTracker > > 8641 > > > > > > here mytable is my hbase table name and 444 is rowkey > > > > Development environment : Ubuntu-11.10, Java-6, Hadoop and Hbase from > > Cloudera CDH3U2 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Regards, > > Nageswaran S > -- Regards, Nageswaran S Ericsson +91 95669 13981
