Home | About | Sematext search-lucene.com search-hadoop.com
NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB
 Search Hadoop and all its subprojects:

Switch to Plain View
HBase >> mail # user >> Scanning a row for certain md5hash does not work


+
Paul van Hoven 2013-02-19, 18:46
Copy link to this message
-
Re: Scanning a row for certain md5hash does not work
Sorry, I had a mistake in my rowkey generation.

Thanks for reading!

2013/2/19 Paul van Hoven <[EMAIL PROTECTED]>:
> I'm currently reading a book about hbase (hbase in action by manning).
> In this book it is explained how to perform a scan if the rowkey is
> made out of a md5 hash (page 45 in the book). My rowkey design (and
> table filling method) looks like this:
>
> SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
> SimpleDateFormat timeFormatter = new SimpleDateFormat("HH:mm:ss");
> Date date = dateFormatter.parse("2013-01-01");
>
> for( int i = 0; i < 31; ++i ) {
>         for( int k = 0; k < 24; ++k ) {
>                 for( int j = 0; j < 1; ++j ) {
>                         //md5() is a custom method that transforms a
> string into a md5 hash
>                         byte[] ts = md5( dateFormatter.format(date) );
>                         byte[] tm = md5( timeFormatter.format(date) );
>                         byte[] ip = md5( generateRandomIPAddress() /* toy method that
> generates ip addresses */ );
>                         byte[] rowkey = new byte[ ts.length + tm.length + ip.length ];
>                         System.arraycopy( ts, 0, rowkey, 0, ts.length );
>                         System.arraycopy( tm, 0, rowkey, ts.length, tm.length );
>                         System.arraycopy( ip, 0, rowkey, ts.length+tm.length, ip.length );
>                         Put p = new Put( rowkey );
>
>                         p.add( Bytes.toBytes("CF"), Bytes.toBytes("SampleCol"),
> Bytes.toBytes( "Value_" + (i+1) + " = " + dateFormatter.format(date) +
> " " + timeFormatter.format(date) ) );
>                         toyDataTable.put( p );
>                 }
>
>                 //custom method that adds an hour to the current date object
>                 date = addHours( date, 1 );
>         }
>
> }
>
> Now I'd like to do the following scan (I more or less took the same
> code from the example in the book):
>
> SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
> Date refDate = formatter.parse("2013-01-15");
>
> HTableInterface toyDataTable = pool.getTable("ToyDataTable");
>
> byte[] md5Key = md5( refDate.getTime() +"" );
> int md5Length = 16;
> int longLength = 8;
> byte[] startRow = Bytes.padTail( md5Key, longLength );
> byte[] endRow = Bytes.padTail( md5Key, longLength );
> endRow[md5Length-1]++;
>
> Scan scan = new Scan( startRow, endRow );
> ResultScanner rs = toyDataTable.getScanner( scan );
> for( Result r : rs ) {
>         String value =  Bytes.toString( r.getValue( Bytes.toBytes("CF"),
> Bytes.toBytes("SampleCol")) );
>         System.out.println( value );
> }
>
> The result is empty. How is that possible?
NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB