diff --git common/src/java/org/apache/hadoop/hive/conf/HiveConf.java common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index 8104e84..85ba9bb 100644 --- common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -1415,6 +1415,20 @@ private void initialize(Class cls) { setBoolVar(ConfVars.METASTORE_FIXED_DATASTORE, true); } + if (getBoolVar(HiveConf.ConfVars.HIVECONFVALIDATION)) { + for (Map.Entry entry : this) { + String key = entry.getKey(); + if (key == null || !key.startsWith("hive.")) { + continue; + } + ConfVars var = HiveConf.getConfVars(key); + if (var == null) { + l4j.warn("HiveConf of name " + key + " does not exist"); + } else if (!var.isType(entry.getValue())) { + l4j.warn("HiveConf " + var.varname + " expects " + var.typeString() + " type value"); + } + } + } // setup list of conf vars that are not allowed to change runtime setupRestrictList(); } diff --git ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java index 9b24bfd..8c7abf8 100644 --- ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java +++ ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java @@ -145,8 +145,8 @@ private static void setConf(String varname, String key, String varvalue, boolean if (!confVars.isType(value)) { StringBuilder message = new StringBuilder(); message.append("'SET ").append(varname).append('=').append(varvalue); - message.append("' FAILED because ").append(key).append(" expects an "); - message.append(confVars.typeString()).append(" value."); + message.append("' FAILED because ").append(key).append(" expects "); + message.append(confVars.typeString()).append(" type value."); throw new IllegalArgumentException(message.toString()); } String fail = confVars.validate(value); @@ -156,6 +156,8 @@ private static void setConf(String varname, String key, String varvalue, boolean message.append("' FAILED in validation : ").append(fail).append('.'); throw new IllegalArgumentException(message.toString()); } + } else if (key.startsWith("hive.")) { + throw new IllegalArgumentException("hive configuration " + key + " does not exists."); } } conf.verifyAndSet(key, value); diff --git ql/src/test/results/clientnegative/set_hiveconf_validation0.q.out ql/src/test/results/clientnegative/set_hiveconf_validation0.q.out index d309697..b792a67 100644 --- ql/src/test/results/clientnegative/set_hiveconf_validation0.q.out +++ ql/src/test/results/clientnegative/set_hiveconf_validation0.q.out @@ -8,4 +8,4 @@ POSTHOOK: type: DESCTABLE POSTHOOK: Input: default@src key string default value string default -Query returned non-zero code: 1, cause: 'SET hive.join.cache.size=test' FAILED because hive.join.cache.size expects an INT value. +Query returned non-zero code: 1, cause: 'SET hive.join.cache.size=test' FAILED because hive.join.cache.size expects INT type value. diff --git ql/src/test/results/clientnegative/set_hiveconf_validation1.q.out ql/src/test/results/clientnegative/set_hiveconf_validation1.q.out index 9f24b8e..b55ad50 100644 --- ql/src/test/results/clientnegative/set_hiveconf_validation1.q.out +++ ql/src/test/results/clientnegative/set_hiveconf_validation1.q.out @@ -8,4 +8,4 @@ POSTHOOK: type: DESCTABLE POSTHOOK: Input: default@src key string default value string default -Query returned non-zero code: 1, cause: 'SET hive.map.aggr.hash.min.reduction=false' FAILED because hive.map.aggr.hash.min.reduction expects an FLOAT value. +Query returned non-zero code: 1, cause: 'SET hive.map.aggr.hash.min.reduction=false' FAILED because hive.map.aggr.hash.min.reduction expects FLOAT type value.