Review Board 1.7.22


[HCAT-301]Reading from a table created with upper case table name throws error

Review Request #4416 - Created March 20, 2012 and submitted

Rohini Palaniswamy
HCATALOG-301
Reviewers
avandana, francisliu
hcatalog
Introduced a new table property "hbase.table.name" similar to Hive to store hbase table names retaining the case. This will be used to access hbase and zookeeper which are case sensitive from within the HbaseHCatStorageHandler.

Added two new APIs setupTable and dropTable to RevisionManager and removed public APIs for setting up and dropping znodes in ZKBasedRevisionManager.
Unit tests added

Diff revision 3 (Latest)

1 2 3
1 2 3

  1. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/HBaseHCatStorageHandler.java: Loading...
  2. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/snapshot/RevisionManager.java: Loading...
  3. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/snapshot/RevisionManagerEndpoint.java: Loading...
  4. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/snapshot/RevisionManagerEndpointClient.java: Loading...
  5. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/snapshot/ZKBasedRevisionManager.java: Loading...
  6. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/TestHBaseBulkOutputFormat.java: Loading...
  7. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/TestHBaseDirectOutputFormat.java: Loading...
  8. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/TestHBaseHCatStorageHandler.java: Loading...
  9. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/TestHBaseInputFormat.java: Loading...
  10. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/snapshot/TestRevisionManagerEndpoint.java: Loading...
http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/HBaseHCatStorageHandler.java
Revision 1304584 New Change
[20] 57 lines
[+20]
58
import org.apache.hcatalog.data.schema.HCatSchema;
58
import org.apache.hcatalog.data.schema.HCatSchema;
59
import org.apache.hcatalog.hbase.HBaseBulkOutputFormat.HBaseBulkOutputCommitter;
59
import org.apache.hcatalog.hbase.HBaseBulkOutputFormat.HBaseBulkOutputCommitter;
60
import org.apache.hcatalog.hbase.HBaseDirectOutputFormat.HBaseDirectOutputCommitter;
60
import org.apache.hcatalog.hbase.HBaseDirectOutputFormat.HBaseDirectOutputCommitter;
61
import org.apache.hcatalog.hbase.snapshot.RevisionManager;
61
import org.apache.hcatalog.hbase.snapshot.RevisionManager;
62
import org.apache.hcatalog.hbase.snapshot.Transaction;
62
import org.apache.hcatalog.hbase.snapshot.Transaction;
63
import org.apache.hcatalog.hbase.snapshot.ZKBasedRevisionManager;

   
64
import org.apache.hcatalog.mapreduce.HCatOutputFormat;
63
import org.apache.hcatalog.mapreduce.HCatOutputFormat;
65
import org.apache.hcatalog.mapreduce.HCatTableInfo;
64
import org.apache.hcatalog.mapreduce.HCatTableInfo;
66
import org.apache.hcatalog.mapreduce.InputJobInfo;
65
import org.apache.hcatalog.mapreduce.InputJobInfo;
67
import org.apache.hcatalog.mapreduce.OutputJobInfo;
66
import org.apache.hcatalog.mapreduce.OutputJobInfo;
68
import org.apache.hcatalog.mapreduce.HCatStorageHandler;
67
import org.apache.hcatalog.mapreduce.HCatStorageHandler;
[+20] [20] 12 lines
[+20]
81

    
   
80

   
82
    public final static String DEFAULT_PREFIX = "default.";
81
    public final static String DEFAULT_PREFIX = "default.";
83
    private final static String PROPERTY_INT_OUTPUT_LOCATION = "hcat.hbase.mapreduce.intermediateOutputLocation";
82
    private final static String PROPERTY_INT_OUTPUT_LOCATION = "hcat.hbase.mapreduce.intermediateOutputLocation";
84

    
   
83

   
85
    private Configuration hbaseConf;
84
    private Configuration hbaseConf;

    
   
85
    private Configuration jobConf;
86
    private HBaseAdmin admin;
86
    private HBaseAdmin admin;
87

    
   
87

   
88
    @Override
88
    @Override
89
    public void configureInputJobProperties(TableDesc tableDesc, Map<String, String> jobProperties) {
89
    public void configureInputJobProperties(TableDesc tableDesc, Map<String, String> jobProperties) {
90
        // Populate jobProperties with input table name, table columns, RM snapshot,
90
        // Populate jobProperties with input table name, table columns, RM snapshot,
91
        // hbase-default.xml and hbase-site.xml
91
        // hbase-default.xml and hbase-site.xml
92
        Map<String, String> tableJobProperties = tableDesc.getJobProperties();
92
        Map<String, String> tableJobProperties = tableDesc.getJobProperties();
93
        String jobString = tableJobProperties.get(HCatConstants.HCAT_KEY_JOB_INFO);
93
        String jobString = tableJobProperties.get(HCatConstants.HCAT_KEY_JOB_INFO);
94
        try {
94
        try {
95
            InputJobInfo inputJobInfo = (InputJobInfo) HCatUtil.deserialize(jobString);
95
            InputJobInfo inputJobInfo = (InputJobInfo) HCatUtil.deserialize(jobString);
96
            HCatTableInfo tableInfo = inputJobInfo.getTableInfo();
96
            HCatTableInfo tableInfo = inputJobInfo.getTableInfo();
97
            String qualifiedTableName = HBaseHCatStorageHandler.getFullyQualifiedName(tableInfo);
97
            String qualifiedTableName = HBaseHCatStorageHandler.getFullyQualifiedHBaseTableName(tableInfo);
98
            jobProperties.put(TableInputFormat.INPUT_TABLE, qualifiedTableName);
98
            jobProperties.put(TableInputFormat.INPUT_TABLE, qualifiedTableName);
99

    
   
99

   
100
            Configuration jobConf = getConf();
100
            Configuration jobConf = getJobConf();
101
            addHbaseResources(jobConf, jobProperties);
101
            addHbaseResources(jobConf, jobProperties);
102
            Configuration copyOfConf = new Configuration(jobConf);
102
            JobConf copyOfConf = new JobConf(jobConf);
103
            HBaseConfiguration.addHbaseResources(copyOfConf);
103
            HBaseConfiguration.addHbaseResources(copyOfConf);
104
            //Getting hbase delegation token in getInputSplits does not work with PIG. So need to
104
            //Getting hbase delegation token in getInputSplits does not work with PIG. So need to
105
            //do it here
105
            //do it here
106
            if (jobConf instanceof JobConf) {
106
            if (jobConf instanceof JobConf) { //Should be the case
107
                HBaseUtil.addHBaseDelegationToken((JobConf)jobConf);
107
                HBaseUtil.addHBaseDelegationToken(copyOfConf);

    
   
108
                ((JobConf)jobConf).getCredentials().addAll(copyOfConf.getCredentials());
108
            }
109
            }
109

    
   
110

   
110
            String outputSchema = jobConf.get(HCatConstants.HCAT_KEY_OUTPUT_SCHEMA);
111
            String outputSchema = jobConf.get(HCatConstants.HCAT_KEY_OUTPUT_SCHEMA);
111
            jobProperties.put(TableInputFormat.SCAN_COLUMNS, getScanColumns(tableInfo, outputSchema));
112
            jobProperties.put(TableInputFormat.SCAN_COLUMNS, getScanColumns(tableInfo, outputSchema));
112

    
   
113

   
[+20] [20] 25 lines
[+20] [+] public void configureOutputJobProperties(TableDesc tableDesc, Map<String, String> jobProperties) {
138
        Map<String, String> tableJobProperties = tableDesc.getJobProperties();
139
        Map<String, String> tableJobProperties = tableDesc.getJobProperties();
139
        String jobString = tableJobProperties.get(HCatConstants.HCAT_KEY_OUTPUT_INFO);
140
        String jobString = tableJobProperties.get(HCatConstants.HCAT_KEY_OUTPUT_INFO);
140
        try {
141
        try {
141
            OutputJobInfo outputJobInfo = (OutputJobInfo) HCatUtil.deserialize(jobString);
142
            OutputJobInfo outputJobInfo = (OutputJobInfo) HCatUtil.deserialize(jobString);
142
            HCatTableInfo tableInfo = outputJobInfo.getTableInfo();
143
            HCatTableInfo tableInfo = outputJobInfo.getTableInfo();
143
            String qualifiedTableName = HBaseHCatStorageHandler.getFullyQualifiedName(tableInfo);
144
            String qualifiedTableName = HBaseHCatStorageHandler.getFullyQualifiedHBaseTableName(tableInfo);
144
            jobProperties.put(HBaseConstants.PROPERTY_OUTPUT_TABLE_NAME_KEY, qualifiedTableName);
145
            jobProperties.put(HBaseConstants.PROPERTY_OUTPUT_TABLE_NAME_KEY, qualifiedTableName);
145
            jobProperties.put(TableOutputFormat.OUTPUT_TABLE, qualifiedTableName);
146
            jobProperties.put(TableOutputFormat.OUTPUT_TABLE, qualifiedTableName);
146

    
   
147

   
147
            Configuration jobConf = getConf();
148
            Configuration jobConf = getJobConf();
148
            addHbaseResources(jobConf, jobProperties);
149
            addHbaseResources(jobConf, jobProperties);
149

    
   
150

   
150
            Configuration copyOfConf = new Configuration(jobConf);
151
            Configuration copyOfConf = new Configuration(jobConf);
151
            HBaseConfiguration.addHbaseResources(copyOfConf);
152
            HBaseConfiguration.addHbaseResources(copyOfConf);
152

    
   
153

   
153
            String txnString = outputJobInfo.getProperties().getProperty(
154
            String txnString = outputJobInfo.getProperties().getProperty(
154
                    HBaseConstants.PROPERTY_WRITE_TXN_KEY);
155
                    HBaseConstants.PROPERTY_WRITE_TXN_KEY);
155
            String jobTxnString = jobConf.get(HBaseConstants.PROPERTY_WRITE_TXN_KEY);

   
156
            //Pig makes 3 calls to HCatOutputFormat.setOutput(HCatStorer) with different JobConf

   
157
            //which leads to creating 2 transactions.

   
158
            //So apart from fixing HCatStorer to pass same OutputJobInfo, making the call idempotent for other

   
159
            //cases which might call multiple times but with same JobConf.

   
160
            Transaction txn = null;
156
            Transaction txn = null;
161
            if (txnString == null && jobTxnString == null) {
157
            if (txnString == null) {
162
                txn = HBaseRevisionManagerUtil.beginWriteTransaction(qualifiedTableName, tableInfo, copyOfConf);
158
                txn = HBaseRevisionManagerUtil.beginWriteTransaction(qualifiedTableName, tableInfo, copyOfConf);
163
                String serializedTxn = HCatUtil.serialize(txn);
159
                String serializedTxn = HCatUtil.serialize(txn);
164
                outputJobInfo.getProperties().setProperty(HBaseConstants.PROPERTY_WRITE_TXN_KEY,
160
                outputJobInfo.getProperties().setProperty(HBaseConstants.PROPERTY_WRITE_TXN_KEY,
165
                        serializedTxn);
161
                        serializedTxn);
166
                jobProperties.put(HBaseConstants.PROPERTY_WRITE_TXN_KEY, serializedTxn);

   
167
            } else {
162
            } else {
168
                txnString = (txnString == null) ? jobTxnString : txnString;

   
169
                txn = (Transaction) HCatUtil.deserialize(txnString);
163
                txn = (Transaction) HCatUtil.deserialize(txnString);
170
                outputJobInfo.getProperties().setProperty(HBaseConstants.PROPERTY_WRITE_TXN_KEY,

   
171
                        txnString);

   
172
                jobProperties.put(HBaseConstants.PROPERTY_WRITE_TXN_KEY, txnString);

   
173
            }
164
            }
174
            if (isBulkMode(outputJobInfo)) {
165
            if (isBulkMode(outputJobInfo)) {
175
                String tableLocation = tableInfo.getTableLocation();
166
                String tableLocation = tableInfo.getTableLocation();
176
                String location = new Path(tableLocation, "REVISION_" + txn.getRevisionNumber())
167
                String location = new Path(tableLocation, "REVISION_" + txn.getRevisionNumber())
177
                        .toString();
168
                        .toString();
[+20] [20] 79 lines
[+20] [+] public void preCreateTable(Table tbl) throws MetaException {
257
        if (tbl.getSd().getLocation() != null) {
248
        if (tbl.getSd().getLocation() != null) {
258
            throw new MetaException("LOCATION may not be specified for HBase.");
249
            throw new MetaException("LOCATION may not be specified for HBase.");
259
        }
250
        }
260

    
   
251

   
261
        try {
252
        try {
262
            String tableName = getHBaseTableName(tbl);
253
            String tableName = getFullyQualifiedHBaseTableName(tbl);
263
            String hbaseColumnsMapping = tbl.getParameters().get(
254
            String hbaseColumnsMapping = tbl.getParameters().get(
264
                    HBaseSerDe.HBASE_COLUMNS_MAPPING);
255
                    HBaseSerDe.HBASE_COLUMNS_MAPPING);
265

    
   
256

   
266
            tbl.putToParameters(HBaseConstants.PROPERTY_COLUMN_MAPPING_KEY,
257
            tbl.putToParameters(HBaseConstants.PROPERTY_COLUMN_MAPPING_KEY,
267
                    hbaseColumnsMapping);
258
                    hbaseColumnsMapping);
[+20] [20] 61 lines
[+20] public void preCreateTable(Table tbl) throws MetaException {
329
            }
320
            }
330

    
   
321

   
331
            // ensure the table is online
322
            // ensure the table is online
332
            new HTable(hbaseConf, tableDesc.getName());
323
            new HTable(hbaseConf, tableDesc.getName());
333

    
   
324

   
334
            //Set up znodes in revision manager.
325
            //Set up table in revision manager.
335
            RevisionManager rm = HBaseRevisionManagerUtil.getOpenedRevisionManager(hbaseConf);
326
            RevisionManager rm = HBaseRevisionManagerUtil.getOpenedRevisionManager(hbaseConf);
336
            if (rm instanceof ZKBasedRevisionManager) {
327
            rm.createTable(tableName, new ArrayList<String>(uniqueColumnFamilies));
337
                ZKBasedRevisionManager zkRM = (ZKBasedRevisionManager) rm;

   
338
                zkRM.setUpZNodes(tableName, new ArrayList<String>(

   
339
                        uniqueColumnFamilies));

   
340
            }

   
341

    
   
328

   
342
        } catch (MasterNotRunningException mnre) {
329
        } catch (MasterNotRunningException mnre) {
343
            throw new MetaException(StringUtils.stringifyException(mnre));
330
            throw new MetaException(StringUtils.stringifyException(mnre));
344
        } catch (IOException ie) {
331
        } catch (IOException ie) {
345
            throw new MetaException(StringUtils.stringifyException(ie));
332
            throw new MetaException(StringUtils.stringifyException(ie));
[+20] [20] 61 lines
[+20] [+] private HBaseAdmin getHBaseAdmin() throws MetaException {
407
        } catch (ZooKeeperConnectionException zkce) {
394
        } catch (ZooKeeperConnectionException zkce) {
408
            throw new MetaException(StringUtils.stringifyException(zkce));
395
            throw new MetaException(StringUtils.stringifyException(zkce));
409
        }
396
        }
410
    }
397
    }
411

    
   
398

   
412
    private String getHBaseTableName(Table tbl) {
399
    private String getFullyQualifiedHBaseTableName(Table tbl) {
413
        String tableName = tbl.getParameters().get(HBaseSerDe.HBASE_TABLE_NAME);
400
        String tableName = tbl.getParameters().get(HBaseSerDe.HBASE_TABLE_NAME);
414
        if (tableName == null) {
401
        if (tableName == null) {
415
            tableName = tbl.getSd().getSerdeInfo().getParameters()
402
            tableName = tbl.getSd().getSerdeInfo().getParameters()
416
                    .get(HBaseSerDe.HBASE_TABLE_NAME);
403
                    .get(HBaseSerDe.HBASE_TABLE_NAME);
417
        }
404
        }
418
        if (tableName == null) {
405
        if (tableName == null) {
419
            if (tbl.getDbName().equals(MetaStoreUtils.DEFAULT_DATABASE_NAME)) {
406
            if (tbl.getDbName().equals(MetaStoreUtils.DEFAULT_DATABASE_NAME)) {
420
                tableName = tbl.getTableName();
407
                tableName = tbl.getTableName();
421
            } else {
408
            } else {
422
                tableName = tbl.getDbName() + "." + tbl.getTableName();
409
                tableName = tbl.getDbName() + "." + tbl.getTableName();
423
            }
410
            }

    
   
411
            tableName = tableName.toLowerCase();
424
        }
412
        }
425
        return tableName;
413
        return tableName;
426
    }
414
    }
427

    
   
415

   

    
   
416
    static String getFullyQualifiedHBaseTableName(HCatTableInfo tableInfo){

    
   
417
        String qualifiedName = tableInfo.getStorerInfo().getProperties()

    
   
418
                .getProperty(HBaseSerDe.HBASE_TABLE_NAME);

    
   
419
        if (qualifiedName == null) {
Moved from 497

    
   
420
            String databaseName = tableInfo.getDatabaseName();
Moved from 498

    
   
421
            String tableName = tableInfo.getTableName();

    
   
422
            if ((databaseName == null)

    
   
423
                    || (databaseName.equals(MetaStoreUtils.DEFAULT_DATABASE_NAME))) {
Moved from 501

    
   
424
                qualifiedName = tableName;
Moved from 502

    
   
425
            } else {
Moved from 503

    
   
426
                qualifiedName = databaseName + "." + tableName;
Moved from 504

    
   
427
            }

    
   
428
            qualifiedName = qualifiedName.toLowerCase();

    
   
429
        }

    
   
430
        return qualifiedName;

    
   
431
    }

    
   
432

   
428
    @Override
433
    @Override
429
    public Class<? extends InputFormat> getInputFormatClass() {
434
    public Class<? extends InputFormat> getInputFormatClass() {
430
        return HBaseInputFormat.class;
435
        return HBaseInputFormat.class;
431
    }
436
    }
432

    
   
437

   
[+20] [20] 14 lines
[+20] private String getHBaseTableName(Table tbl) { static String getFullyQualifiedHBaseTableName(HCatTableInfo tableInfo){
447
    public Class<? extends SerDe> getSerDeClass()
452
    public Class<? extends SerDe> getSerDeClass()
448
            throws UnsupportedOperationException {
453
            throws UnsupportedOperationException {
449
        return HBaseSerDe.class;
454
        return HBaseSerDe.class;
450
    }
455
    }
451

    
   
456

   

    
   
457
    public Configuration getJobConf() {

    
   
458
        return jobConf;

    
   
459
    }

    
   
460

   
452
    @Override
461
    @Override
453
    public Configuration getConf() {
462
    public Configuration getConf() {
454

    
   
463

   
455
        if (hbaseConf == null) {
464
        if (hbaseConf == null) {
456
            hbaseConf = HBaseConfiguration.create();
465
            hbaseConf = HBaseConfiguration.create();
457
        }
466
        }
458
        return hbaseConf;
467
        return hbaseConf;
459
    }
468
    }
460

    
   
469

   
461
    @Override
470
    @Override
462
    public void setConf(Configuration conf) {
471
    public void setConf(Configuration conf) {
463
        //Not cloning as we want to set tmpjars on it. Putting in jobProperties does not
472
        //setConf is called both during DDL operations and  mapred read/write jobs.
464
        //get propagated to JobConf in case of InputFormat as they are maintained per partition.
473
        //Creating a copy of conf for DDL and adding hbase-default and hbase-site.xml to it.
465
        //Also we need to add hbase delegation token to the Credentials.
474
        //For jobs, maintaining a reference instead of cloning as we need to
466
        hbaseConf = conf;
475
        //  1) add hbase delegation token to the Credentials.

    
   
476
        //  2) set tmpjars on it. Putting in jobProperties does not get propagated to JobConf

    
   
477
        //     in case of InputFormat as they are maintained per partition.

    
   
478
        //Not adding hbase-default.xml and hbase-site.xml to jobConf as it will override any

    
   
479
        //hbase properties set in the JobConf by the user. In configureInputJobProperties and

    
   
480
        //configureOutputJobProperties, we take care of adding the default properties

    
   
481
        //that are not already present. TODO: Change to a copy for jobs after HCAT-308 is fixed.

    
   
482
        jobConf = conf;

    
   
483
        hbaseConf = HBaseConfiguration.create(conf);
467
    }
484
    }
468

    
   
485

   
469
    private void checkDeleteTable(Table table) throws MetaException {
486
    private void checkDeleteTable(Table table) throws MetaException {
470
        boolean isExternal = MetaStoreUtils.isExternalTable(table);
487
        boolean isExternal = MetaStoreUtils.isExternalTable(table);
471
        String tableName = getHBaseTableName(table);
488
        String tableName = getFullyQualifiedHBaseTableName(table);
472
        RevisionManager rm = null;
489
        RevisionManager rm = null;
473
        try {
490
        try {
474
            if (!isExternal && getHBaseAdmin().tableExists(tableName)) {
491
            if (!isExternal && getHBaseAdmin().tableExists(tableName)) {
475
                // we have created an HBase table, so we delete it to roll back;
492
                // we have created an HBase table, so we delete it to roll back;
476
                if (getHBaseAdmin().isTableEnabled(tableName)) {
493
                if (getHBaseAdmin().isTableEnabled(tableName)) {
477
                    getHBaseAdmin().disableTable(tableName);
494
                    getHBaseAdmin().disableTable(tableName);
478
                }
495
                }
479
                getHBaseAdmin().deleteTable(tableName);
496
                getHBaseAdmin().deleteTable(tableName);
480

    
   
497

   
481
              //Set up znodes in revision manager.
498
                //Drop table in revision manager.
482
                rm = HBaseRevisionManagerUtil.getOpenedRevisionManager(hbaseConf);
499
                rm = HBaseRevisionManagerUtil.getOpenedRevisionManager(hbaseConf);
483
                if (rm instanceof ZKBasedRevisionManager) {
500
                rm.dropTable(tableName);
484
                    ZKBasedRevisionManager zkRM = (ZKBasedRevisionManager) rm;

   
485
                    zkRM.deleteZNodes(tableName);

   
486
                }

   
487
            }
501
            }
488
        } catch (IOException ie) {
502
        } catch (IOException ie) {
489
            throw new MetaException(StringUtils.stringifyException(ie));
503
            throw new MetaException(StringUtils.stringifyException(ie));
490
        } finally {
504
        } finally {
491
            HBaseRevisionManagerUtil.closeRevisionManagerQuietly(rm);
505
            HBaseRevisionManagerUtil.closeRevisionManagerQuietly(rm);
492
        }
506
        }
493
    }
507
    }
494

    
   
508

   
495
    static String getFullyQualifiedName(HCatTableInfo tableInfo){

   
496
        String qualifiedName;

   
497
        String databaseName = tableInfo.getDatabaseName();
Moved to 420

   
498
        String tableName = tableInfo.getTableName();
Moved to 421

   
499

    
   

   
500
        if ((databaseName == null) || (databaseName.equals(MetaStoreUtils.DEFAULT_DATABASE_NAME))) {

   
501
            qualifiedName = tableName;
Moved to 424

   
502
        } else {
Moved to 425

   
503
            qualifiedName = databaseName + "." + tableName;
Moved to 426

   
504
        }
Moved to 427

   
505

    
   

   
506
        return qualifiedName;

   
507
    }

   
508

    
   

   
509
    /**
509
    /**
510
     * Helper method for users to add the required depedency jars to distributed cache.
510
     * Helper method for users to add the required depedency jars to distributed cache.
511
     * @param conf
511
     * @param conf
512
     * @throws IOException
512
     * @throws IOException
513
     */
513
     */
[+20] [20] 94 lines
http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/snapshot/RevisionManager.java
Revision 1304584 New Change
 
http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/snapshot/RevisionManagerEndpoint.java
Revision 1304584 New Change
 
http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/snapshot/RevisionManagerEndpointClient.java
Revision 1304584 New Change
 
http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/snapshot/ZKBasedRevisionManager.java
Revision 1304584 New Change
 
http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/TestHBaseBulkOutputFormat.java
Revision 1304584 New Change
 
http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/TestHBaseDirectOutputFormat.java
Revision 1304584 New Change
 
http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/TestHBaseHCatStorageHandler.java
Revision 1304584 New Change
 
http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/TestHBaseInputFormat.java
Revision 1304584 New Change
 
http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/snapshot/TestRevisionManagerEndpoint.java
Revision 1304584 New Change
 
  1. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/HBaseHCatStorageHandler.java: Loading...
  2. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/snapshot/RevisionManager.java: Loading...
  3. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/snapshot/RevisionManagerEndpoint.java: Loading...
  4. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/snapshot/RevisionManagerEndpointClient.java: Loading...
  5. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/java/org/apache/hcatalog/hbase/snapshot/ZKBasedRevisionManager.java: Loading...
  6. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/TestHBaseBulkOutputFormat.java: Loading...
  7. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/TestHBaseDirectOutputFormat.java: Loading...
  8. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/TestHBaseHCatStorageHandler.java: Loading...
  9. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/TestHBaseInputFormat.java: Loading...
  10. http://svn.apache.org/repos/asf/incubator/hcatalog/branches/branch-0.4/storage-handlers/hbase/src/test/org/apache/hcatalog/hbase/snapshot/TestRevisionManagerEndpoint.java: Loading...