You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gora.apache.org by le...@apache.org on 2014/01/07 14:41:25 UTC
svn commit: r1556216 - in /gora/branches/GORA_94: CHANGES.txt
gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java
gora-hbase/src/test/java/org/apache/gora/hbase/store/TestHBaseStore.java
Author: lewismc
Date: Tue Jan 7 13:41:25 2014
New Revision: 1556216
URL: http://svn.apache.org/r1556216
Log:
port of GORA-117 gora hbase does not have a mechanism to set the caching on a scanner, which makes for poor performance on map/reduce jobs
Modified:
gora/branches/GORA_94/CHANGES.txt
gora/branches/GORA_94/gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java
gora/branches/GORA_94/gora-hbase/src/test/java/org/apache/gora/hbase/store/TestHBaseStore.java
Modified: gora/branches/GORA_94/CHANGES.txt
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/CHANGES.txt?rev=1556216&r1=1556215&r2=1556216&view=diff
==============================================================================
--- gora/branches/GORA_94/CHANGES.txt (original)
+++ gora/branches/GORA_94/CHANGES.txt Tue Jan 7 13:41:25 2014
@@ -6,6 +6,8 @@ Gora Change Log
* GORA-94 Upgrade to Apache Avro 1.7.x ==1st Attempt== (Ed Kohlwey via lewismc)
+* GORA-117 gora hbase does not have a mechanism to set the caching on a scanner, which makes for poor performance on map/reduce jobs (alfonsonishikawa)
+
* GORA-281 More flexible file locations for cassandra's config and log4j (Nate McCall via hsaputra)
* GORA-275 Update Gora stores to pass conf when creating instance of PartitionQueryImpl (Damien Raude-Morvan via hsaputra)
Modified: gora/branches/GORA_94/gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java?rev=1556216&r1=1556215&r2=1556216&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java (original)
+++ gora/branches/GORA_94/gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java Tue Jan 7 13:41:25 2014
@@ -48,6 +48,7 @@ import org.apache.gora.persistency.impl.
import org.apache.gora.query.PartitionQuery;
import org.apache.gora.query.Query;
import org.apache.gora.query.impl.PartitionQueryImpl;
+import org.apache.gora.store.DataStoreFactory;
import org.apache.gora.store.impl.DataStoreBase;
import org.apache.hadoop.conf.Configurable;
@@ -87,6 +88,9 @@ implements Configurable {
private static final String DEPRECATED_MAPPING_FILE = "hbase-mapping.xml";
public static final String DEFAULT_MAPPING_FILE = "gora-hbase-mapping.xml";
+ private static final String SCANNER_CACHING_PROPERTIES_KEY = "scanner.caching" ;
+ private static final int SCANNER_CACHING_PROPERTIES_DEFAULT = 0 ;
+
private volatile HBaseAdmin admin;
private volatile HBaseTableConnection table;
@@ -95,6 +99,8 @@ implements Configurable {
private volatile HBaseMapping mapping;
+ private int scannerCaching = SCANNER_CACHING_PROPERTIES_DEFAULT ;
+
public HBaseStore() {
}
@@ -126,6 +132,17 @@ implements Configurable {
throw new RuntimeException(e);
}
+ // Set scanner caching option
+ try {
+ this.setScannerCaching(
+ Integer.valueOf(DataStoreFactory.findProperty(this.properties, this,
+ SCANNER_CACHING_PROPERTIES_KEY,
+ String.valueOf(SCANNER_CACHING_PROPERTIES_DEFAULT)))) ;
+ }catch(Exception e){
+ LOG.error("Can not load " + SCANNER_CACHING_PROPERTIES_KEY + " from gora.properties. Setting to default value: " + SCANNER_CACHING_PROPERTIES_DEFAULT, e) ;
+ this.setScannerCaching(SCANNER_CACHING_PROPERTIES_DEFAULT) ; // Default value if something is wrong
+ }
+
if(autoCreateSchema) {
createSchema();
}
@@ -436,6 +453,9 @@ implements Configurable {
public ResultScanner createScanner(Query<K, T> query) throws IOException {
final Scan scan = new Scan();
+
+ scan.setCaching(this.getScannerCaching()) ;
+
if (query.getStartKey() != null) {
scan.setStartRow(toBytes(query.getStartKey()));
}
@@ -699,4 +719,29 @@ implements Configurable {
this.conf = conf;
}
+ /**
+ * Gets the Scanner Caching optimization value
+ * @return The value used internally in {@link Scan#setCaching(int)}
+ */
+ public int getScannerCaching() {
+ return this.scannerCaching ;
+ }
+
+ /**
+ * Sets the value for Scanner Caching optimization
+ *
+ * @see Scan#setCaching(int)
+ *
+ * @param numRows the number of rows for caching >= 0
+ * @return <<Fluent interface>>
+ */
+ public HBaseStore<K, T> setScannerCaching(int numRows) {
+ if (numRows < 0) {
+ LOG.warn("Invalid Scanner Caching optimization value. Cannot set to: " + numRows + ".") ;
+ return this ;
+ }
+ this.scannerCaching = numRows ;
+ return this ;
+ }
+
}
Modified: gora/branches/GORA_94/gora-hbase/src/test/java/org/apache/gora/hbase/store/TestHBaseStore.java
URL: http://svn.apache.org/viewvc/gora/branches/GORA_94/gora-hbase/src/test/java/org/apache/gora/hbase/store/TestHBaseStore.java?rev=1556216&r1=1556215&r2=1556216&view=diff
==============================================================================
--- gora/branches/GORA_94/gora-hbase/src/test/java/org/apache/gora/hbase/store/TestHBaseStore.java (original)
+++ gora/branches/GORA_94/gora-hbase/src/test/java/org/apache/gora/hbase/store/TestHBaseStore.java Tue Jan 7 13:41:25 2014
@@ -229,6 +229,11 @@ public class TestHBaseStore extends Data
table.close();
}
+ @Test
+ public void assertScannerCachingValue() {
+ assertEquals(1000, ((HBaseStore<String,WebPage>)this.webPageStore).getScannerCaching()) ;
+ assertEquals(1000, ((HBaseStore<String,Employee>)this.employeeStore).getScannerCaching()) ;
+ }
@Ignore("We need to skip this test since gora considers endRow inclusive, while its exclusive for HBase.")
@Override