use of org.apache.hadoop.hive.metastore.HiveMetaException in project hive by apache.
the class HiveSchemaHelper method getConnectionToMetastore.
/***
* Get JDBC connection to metastore db
*
* @param userName metastore connection username
* @param password metastore connection password
* @param printInfo print connection parameters
* @param hiveConf hive config object
* @return metastore connection object
* @throws org.apache.hadoop.hive.metastore.api.MetaException
*/
public static Connection getConnectionToMetastore(String userName, String password, boolean printInfo, HiveConf hiveConf) throws HiveMetaException {
try {
String connectionURL = getValidConfVar(HiveConf.ConfVars.METASTORECONNECTURLKEY, hiveConf);
String driver = getValidConfVar(HiveConf.ConfVars.METASTORE_CONNECTION_DRIVER, hiveConf);
if (printInfo) {
System.out.println("Metastore connection URL:\t " + connectionURL);
System.out.println("Metastore Connection Driver :\t " + driver);
System.out.println("Metastore connection User:\t " + userName);
}
if ((userName == null) || userName.isEmpty()) {
throw new HiveMetaException("UserName empty ");
}
// load required JDBC driver
Class.forName(driver);
// Connect using the JDBC URL and user/pass from conf
return DriverManager.getConnection(connectionURL, userName, password);
} catch (IOException e) {
throw new HiveMetaException("Failed to get schema version.", e);
} catch (SQLException e) {
throw new HiveMetaException("Failed to get schema version.", e);
} catch (ClassNotFoundException e) {
throw new HiveMetaException("Failed to load driver", e);
}
}
use of org.apache.hadoop.hive.metastore.HiveMetaException in project hive by apache.
the class TestSchemaTool method testSchemaUpgrade.
/**
* Test schema upgrade
* @throws Exception
*/
public void testSchemaUpgrade() throws Exception {
boolean foundException = false;
// Initialize 0.7.0 schema
schemaTool.doInit("0.7.0");
// verify that driver fails due to older version schema
try {
schemaTool.verifySchemaVersion();
} catch (HiveMetaException e) {
// Expected to fail due to old schema
foundException = true;
}
if (!foundException) {
throw new Exception("Hive operations shouldn't pass with older version schema");
}
// Generate dummy pre-upgrade script with errors
String invalidPreUpgradeScript = writeDummyPreUpgradeScript(0, "upgrade-0.11.0-to-0.12.0.derby.sql", "foo bar;");
// Generate dummy pre-upgrade scripts with valid SQL
String validPreUpgradeScript0 = writeDummyPreUpgradeScript(0, "upgrade-0.12.0-to-0.13.0.derby.sql", "CREATE TABLE schema_test0 (id integer);");
String validPreUpgradeScript1 = writeDummyPreUpgradeScript(1, "upgrade-0.12.0-to-0.13.0.derby.sql", "CREATE TABLE schema_test1 (id integer);");
// Capture system out and err
schemaTool.setVerbose(true);
OutputStream stderr = new ByteArrayOutputStream();
PrintStream errPrintStream = new PrintStream(stderr);
System.setErr(errPrintStream);
OutputStream stdout = new ByteArrayOutputStream();
PrintStream outPrintStream = new PrintStream(stdout);
System.setOut(outPrintStream);
// Upgrade schema from 0.7.0 to latest
schemaTool.doUpgrade("0.7.0");
// Verify that the schemaTool ran pre-upgrade scripts and ignored errors
assertTrue(stderr.toString().contains(invalidPreUpgradeScript));
assertTrue(stderr.toString().contains("foo"));
assertFalse(stderr.toString().contains(validPreUpgradeScript0));
assertFalse(stderr.toString().contains(validPreUpgradeScript1));
assertTrue(stdout.toString().contains(validPreUpgradeScript0));
assertTrue(stdout.toString().contains(validPreUpgradeScript1));
// Verify that driver works fine with latest schema
schemaTool.verifySchemaVersion();
}
use of org.apache.hadoop.hive.metastore.HiveMetaException in project hive by apache.
the class HiveSchemaTool method doValidate.
public void doValidate() throws HiveMetaException {
System.out.println("Starting metastore validation\n");
Connection conn = getConnectionToMetastore(false);
boolean success = true;
try {
if (validateSchemaVersions()) {
System.out.println("[SUCCESS]\n");
} else {
success = false;
System.out.println("[FAIL]\n");
}
if (validateSequences(conn)) {
System.out.println("[SUCCESS]\n");
} else {
success = false;
System.out.println("[FAIL]\n");
}
if (validateSchemaTables(conn)) {
System.out.println("[SUCCESS]\n");
} else {
success = false;
System.out.println("[FAIL]\n");
}
if (validateLocations(conn, this.validationServers)) {
System.out.println("[SUCCESS]\n");
} else {
System.out.println("[WARN]\n");
}
if (validateColumnNullValues(conn)) {
System.out.println("[SUCCESS]\n");
} else {
System.out.println("[WARN]\n");
}
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
throw new HiveMetaException("Failed to close metastore connection", e);
}
}
}
System.out.print("Done with metastore validation: ");
if (!success) {
System.out.println("[FAIL]");
System.exit(1);
} else {
System.out.println("[SUCCESS]");
}
}
use of org.apache.hadoop.hive.metastore.HiveMetaException in project hive by apache.
the class HiveSchemaTool method doInit.
/**
* Initialize the metastore schema
*
* @param toVersion
* If null then current hive version is used
* @throws MetaException
*/
public void doInit(String toVersion) throws HiveMetaException {
testConnectionToMetastore();
System.out.println("Starting metastore schema initialization to " + toVersion);
String initScriptDir = metaStoreSchemaInfo.getMetaStoreScriptDir();
String initScriptFile = metaStoreSchemaInfo.generateInitFileName(toVersion);
try {
System.out.println("Initialization script " + initScriptFile);
if (!dryRun) {
runBeeLine(initScriptDir, initScriptFile);
System.out.println("Initialization script completed");
}
} catch (IOException e) {
throw new HiveMetaException("Schema initialization FAILED!" + " Metastore state would be inconsistent !!", e);
}
}
use of org.apache.hadoop.hive.metastore.HiveMetaException in project hive by apache.
the class HiveSchemaTool method validateSchemaTables.
boolean validateSchemaTables(Connection conn) throws HiveMetaException {
String version = null;
ResultSet rs = null;
DatabaseMetaData metadata = null;
List<String> dbTables = new ArrayList<String>();
List<String> schemaTables = new ArrayList<String>();
List<String> subScripts = new ArrayList<String>();
Connection hmsConn = getConnectionToMetastore(false);
System.out.println("Validating metastore schema tables");
try {
version = metaStoreSchemaInfo.getMetaStoreSchemaVersion(getConnectionInfo(false));
} catch (HiveMetaException he) {
System.err.println("Failed to determine schema version from Hive Metastore DB. " + he.getMessage());
System.out.println("Failed in schema table validation.");
LOG.debug("Failed to determine schema version from Hive Metastore DB," + he.getMessage());
return false;
}
// re-open the hms connection
hmsConn = getConnectionToMetastore(false);
LOG.debug("Validating tables in the schema for version " + version);
try {
metadata = conn.getMetaData();
String[] types = { "TABLE" };
rs = metadata.getTables(null, hmsConn.getSchema(), "%", types);
String table = null;
while (rs.next()) {
table = rs.getString("TABLE_NAME");
dbTables.add(table.toLowerCase());
LOG.debug("Found table " + table + " in HMS dbstore");
}
} catch (SQLException e) {
throw new HiveMetaException("Failed to retrieve schema tables from Hive Metastore DB," + e.getMessage());
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
throw new HiveMetaException("Failed to close resultset", e);
}
}
}
// parse the schema file to determine the tables that are expected to exist
// we are using oracle schema because it is simpler to parse, no quotes or backticks etc
String baseDir = new File(metaStoreSchemaInfo.getMetaStoreScriptDir()).getParent();
String schemaFile = new File(metaStoreSchemaInfo.getMetaStoreScriptDir(), metaStoreSchemaInfo.generateInitFileName(version)).getPath();
try {
LOG.debug("Parsing schema script " + schemaFile);
subScripts.addAll(findCreateTable(schemaFile, schemaTables));
while (subScripts.size() > 0) {
schemaFile = baseDir + "/" + dbType + "/" + subScripts.remove(0);
LOG.debug("Parsing subscript " + schemaFile);
subScripts.addAll(findCreateTable(schemaFile, schemaTables));
}
} catch (Exception e) {
System.err.println("Exception in parsing schema file. Cause:" + e.getMessage());
System.out.println("Failed in schema table validation.");
return false;
}
LOG.debug("Schema tables:[ " + Arrays.toString(schemaTables.toArray()) + " ]");
LOG.debug("DB tables:[ " + Arrays.toString(dbTables.toArray()) + " ]");
// now diff the lists
schemaTables.removeAll(dbTables);
if (schemaTables.size() > 0) {
Collections.sort(schemaTables);
System.err.println("Table(s) [ " + Arrays.toString(schemaTables.toArray()) + " ] are missing from the metastore database schema.");
System.out.println("Failed in schema table validation.");
return false;
} else {
System.out.println("Succeeded in schema table validation.");
return true;
}
}
Aggregations