Author: khorgath Date: Thu Mar 20 22:25:45 2014 New Revision: 1579806 URL: http://svn.apache.org/r1579806 Log: HIVE-6633 : pig -useHCatalog with embedded metastore fails to pass command line args to metastore (Eric Hanson via Sushanth Sowmyan)
Modified: hive/trunk/hcatalog/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/HCatLoader.java hive/trunk/hcatalog/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/PigHCatUtil.java Modified: hive/trunk/hcatalog/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/HCatLoader.java URL: http://svn.apache.org/viewvc/hive/trunk/hcatalog/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/HCatLoader.java?rev=1579806&r1=1579805&r2=1579806&view=diff ============================================================================== --- hive/trunk/hcatalog/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/HCatLoader.java (original) +++ hive/trunk/hcatalog/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/HCatLoader.java Thu Mar 20 22:25:45 2014 @@ -177,7 +177,8 @@ public class HCatLoader extends HCatBase throws IOException { Table table = phutil.getTable(location, hcatServerUri != null ? hcatServerUri : PigHCatUtil.getHCatServerUri(job), - PigHCatUtil.getHCatServerPrincipal(job)); + PigHCatUtil.getHCatServerPrincipal(job), + job); // Pass job to initialize metastore conf overrides List<FieldSchema> tablePartitionKeys = table.getPartitionKeys(); String[] partitionKeys = new String[tablePartitionKeys.size()]; for (int i = 0; i < tablePartitionKeys.size(); i++) { @@ -193,7 +194,9 @@ public class HCatLoader extends HCatBase Table table = phutil.getTable(location, hcatServerUri != null ? hcatServerUri : PigHCatUtil.getHCatServerUri(job), - PigHCatUtil.getHCatServerPrincipal(job)); + // Pass job to initialize metastore conf overrides for embedded metastore case + // (hive.metastore.uris = ""). + PigHCatUtil.getHCatServerPrincipal(job), job); HCatSchema hcatTableSchema = HCatUtil.getTableSchemaWithPtnCols(table); try { PigHCatUtil.validateHCatTableSchemaFollowsPigRules(hcatTableSchema); Modified: hive/trunk/hcatalog/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/PigHCatUtil.java URL: http://svn.apache.org/viewvc/hive/trunk/hcatalog/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/PigHCatUtil.java?rev=1579806&r1=1579805&r2=1579806&view=diff ============================================================================== --- hive/trunk/hcatalog/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/PigHCatUtil.java (original) +++ hive/trunk/hcatalog/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/PigHCatUtil.java Thu Mar 20 22:25:45 2014 @@ -133,8 +133,16 @@ class PigHCatUtil { } private static HiveMetaStoreClient getHiveMetaClient(String serverUri, - String serverKerberosPrincipal, Class<?> clazz) throws Exception { - HiveConf hiveConf = new HiveConf(clazz); + String serverKerberosPrincipal, + Class<?> clazz, + Job job) throws Exception { + + // The job configuration is passed in so the configuration will be cloned + // from the pig job configuration. This is necessary for overriding + // metastore configuration arguments like the metastore jdbc connection string + // and password, in the case of an embedded metastore, which you get when + // hive.metastore.uris = "". + HiveConf hiveConf = new HiveConf(job.getConfiguration(), clazz); if (serverUri != null) { hiveConf.set("hive.metastore.local", "false"); @@ -170,7 +178,13 @@ class PigHCatUtil { return new HCatSchema(fcols); } - public Table getTable(String location, String hcatServerUri, String hcatServerPrincipal) throws IOException { + /* + * The job argument is passed so that configuration overrides can be used to initialize + * the metastore configuration in the special case of an embedded metastore + * (hive.metastore.uris = ""). + */ + public Table getTable(String location, String hcatServerUri, String hcatServerPrincipal, + Job job) throws IOException { Pair<String, String> loc_server = new Pair<String, String>(location, hcatServerUri); Table hcatTable = hcatTableCache.get(loc_server); if (hcatTable != null) { @@ -183,7 +197,7 @@ class PigHCatUtil { Table table = null; HiveMetaStoreClient client = null; try { - client = getHiveMetaClient(hcatServerUri, hcatServerPrincipal, PigHCatUtil.class); + client = getHiveMetaClient(hcatServerUri, hcatServerPrincipal, PigHCatUtil.class, job); table = HCatUtil.getTable(client, dbName, tableName); } catch (NoSuchObjectException nsoe) { throw new PigException("Table not found : " + nsoe.getMessage(), PIG_EXCEPTION_CODE); // prettier error messages to frontend