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 Threaded View
HBase >> mail # user >> Scanning a row for certain md5hash does not work


Copy link to this message
-
Scanning a row for certain md5hash does not work
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