Package org.apache.hcatalog.hbase

Source Code of org.apache.hcatalog.hbase.TestHBaseHCatStorageHandler

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.hcatalog.hbase;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.net.URI;
import java.util.Map;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hive.cli.CliSessionState;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
import org.apache.hadoop.hive.metastore.Warehouse;
import org.apache.hadoop.hive.ql.processors.CommandProcessorResponse;
import org.apache.hadoop.hive.ql.session.SessionState;
import org.apache.hcatalog.cli.HCatDriver;
import org.apache.hcatalog.cli.SemanticAnalysis.HCatSemanticAnalyzer;
import org.apache.hcatalog.hbase.snapshot.RevisionManager;
import org.apache.hcatalog.hbase.snapshot.RevisionManagerConfiguration;
import org.apache.zookeeper.KeeperException.NoNodeException;
import org.junit.Test;

public class TestHBaseHCatStorageHandler extends SkeletonHBaseTest {

    private static HiveConf   hcatConf;
    private static HCatDriver hcatDriver;
    private static Warehouse  wh;

    public void Initialize() throws Exception {

        hcatConf = getHiveConf();
        hcatConf.set(ConfVars.SEMANTIC_ANALYZER_HOOK.varname,
                HCatSemanticAnalyzer.class.getName());
        URI fsuri = getFileSystem().getUri();
        Path whPath = new Path(fsuri.getScheme(), fsuri.getAuthority(),
                getTestDir());
        hcatConf.set(HiveConf.ConfVars.HADOOPFS.varname, fsuri.toString());
        hcatConf.set(ConfVars.METASTOREWAREHOUSE.varname, whPath.toString());

        //Add hbase properties
        for (Map.Entry<String, String> el : getHbaseConf()) {
            if (el.getKey().startsWith("hbase.")) {
                hcatConf.set(el.getKey(), el.getValue());
            }
        }
        HBaseConfiguration.merge(
                hcatConf,
                RevisionManagerConfiguration.create());

        SessionState.start(new CliSessionState(hcatConf));
        hcatDriver = new HCatDriver();

    }

    @Test
    public void testTableCreateDrop() throws Exception {
        Initialize();

        hcatDriver.run("drop table test_table");
        CommandProcessorResponse response = hcatDriver
                .run("create table test_table(key int, value string) STORED BY " +
                         "'org.apache.hcatalog.hbase.HBaseHCatStorageHandler'"
                    + "TBLPROPERTIES ('hbase.columns.mapping'=':key,cf1:val')");

        assertEquals(0, response.getResponseCode());

        HBaseAdmin hAdmin = new HBaseAdmin(getHbaseConf());
        boolean doesTableExist = hAdmin.tableExists("test_table");

        assertTrue(doesTableExist);

        RevisionManager rm = HBaseRevisionManagerUtil.getOpenedRevisionManager(hcatConf);
        rm.open();
        //Should be able to successfully query revision manager
        rm.getAbortedWriteTransactions("test_table", "cf1");

        hcatDriver.run("drop table test_table");
        doesTableExist = hAdmin.tableExists("test_table");
        assertTrue(doesTableExist == false);

        try {
            rm.getAbortedWriteTransactions("test_table", "cf1");
        } catch (Exception e) {
            assertTrue(e.getCause() instanceof NoNodeException);
        }
        rm.close();

    }

    @Test
    public void testTableCreateDropDifferentCase() throws Exception {
        Initialize();

        hcatDriver.run("drop table test_Table");
        CommandProcessorResponse response = hcatDriver
                .run("create table test_Table(key int, value string) STORED BY " +
                             "'org.apache.hcatalog.hbase.HBaseHCatStorageHandler'"
                    + "TBLPROPERTIES ('hbase.columns.mapping'=':key,cf1:val')");

        assertEquals(0, response.getResponseCode());

        //HBase table gets created with lower case unless specified as a table property.
        HBaseAdmin hAdmin = new HBaseAdmin(getHbaseConf());
        boolean doesTableExist = hAdmin.tableExists("test_table");

        assertTrue(doesTableExist);

        RevisionManager rm = HBaseRevisionManagerUtil.getOpenedRevisionManager(hcatConf);
        rm.open();
        //Should be able to successfully query revision manager
        rm.getAbortedWriteTransactions("test_table", "cf1");

        hcatDriver.run("drop table test_table");
        doesTableExist = hAdmin.tableExists("test_table");
        assertTrue(doesTableExist == false);

        try {
            rm.getAbortedWriteTransactions("test_table", "cf1");
        } catch (Exception e) {
            assertTrue(e.getCause() instanceof NoNodeException);
        }
        rm.close();

    }

    @Test
    public void testTableCreateDropCaseSensitive() throws Exception {
        Initialize();

        hcatDriver.run("drop table test_Table");
        CommandProcessorResponse response = hcatDriver
                .run("create table test_Table(key int, value string) STORED BY " +
                             "'org.apache.hcatalog.hbase.HBaseHCatStorageHandler'"
                    + "TBLPROPERTIES ('hbase.columns.mapping'=':key,cf1:val'," +
                    " 'hbase.table.name'='CaseSensitiveTable')");

        assertEquals(0, response.getResponseCode());

        HBaseAdmin hAdmin = new HBaseAdmin(getHbaseConf());
        boolean doesTableExist = hAdmin.tableExists("CaseSensitiveTable");

        assertTrue(doesTableExist);

        RevisionManager rm = HBaseRevisionManagerUtil.getOpenedRevisionManager(hcatConf);
        rm.open();
        //Should be able to successfully query revision manager
        rm.getAbortedWriteTransactions("CaseSensitiveTable", "cf1");

        hcatDriver.run("drop table test_table");
        doesTableExist = hAdmin.tableExists("CaseSensitiveTable");
        assertTrue(doesTableExist == false);

        try {
            rm.getAbortedWriteTransactions("CaseSensitiveTable", "cf1");
        } catch (Exception e) {
            assertTrue(e.getCause() instanceof NoNodeException);
        }
        rm.close();

    }

    @Test
    public void testTableDropNonExistent() throws Exception {
        Initialize();

        hcatDriver.run("drop table mytable");
        CommandProcessorResponse response = hcatDriver
                .run("create table mytable(key int, value string) STORED BY " +
                     "'org.apache.hcatalog.hbase.HBaseHCatStorageHandler'"
                    + "TBLPROPERTIES ('hbase.columns.mapping'=':key,cf1:val')");

        assertEquals(0, response.getResponseCode());

        HBaseAdmin hAdmin = new HBaseAdmin(getHbaseConf());
        boolean doesTableExist = hAdmin.tableExists("mytable");
        assertTrue(doesTableExist);

        //Now delete the table from hbase
        if (hAdmin.isTableEnabled("mytable")) {
            hAdmin.disableTable("mytable");
        }
        hAdmin.deleteTable("mytable");
        doesTableExist = hAdmin.tableExists("mytable");
        assertTrue(doesTableExist == false);

        CommandProcessorResponse responseTwo = hcatDriver.run("drop table mytable");
        assertTrue(responseTwo.getResponseCode() == 0);

    }

    @Test
    public void testTableCreateExternal() throws Exception {

        String tableName = "testTable";
        HBaseAdmin hAdmin = new HBaseAdmin(getHbaseConf());

        HTableDescriptor tableDesc = new HTableDescriptor(tableName);
        tableDesc.addFamily(new HColumnDescriptor(Bytes.toBytes("key")));
        tableDesc.addFamily(new HColumnDescriptor(Bytes.toBytes("familyone")));
        tableDesc.addFamily(new HColumnDescriptor(Bytes.toBytes("familytwo")));

        hAdmin.createTable(tableDesc);
        boolean doesTableExist = hAdmin.tableExists(tableName);
        assertTrue(doesTableExist);

        hcatDriver.run("drop table mytabletwo");
        CommandProcessorResponse response = hcatDriver
                .run("create external table mytabletwo(key int, valueone string, valuetwo string) STORED BY " +
                     "'org.apache.hcatalog.hbase.HBaseHCatStorageHandler'"
                    + "TBLPROPERTIES ('hbase.columns.mapping'=':key,familyone:val,familytwo:val'," +
                    "'hbase.table.name'='testTable')");

        assertEquals(0, response.getResponseCode());

    }


}
TOP

Related Classes of org.apache.hcatalog.hbase.TestHBaseHCatStorageHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.