diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java index 601ad08..5b4b8b5 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java @@ -22,11 +22,11 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.hadoop.conf.Configurable; @@ -205,7 +205,7 @@ public void setWork(FetchWork work) { /** * A cache of InputFormat instances. */ - private static final Map inputFormats = new HashMap(); + private static final Map inputFormats = new ConcurrentHashMap(); @SuppressWarnings("unchecked") static InputFormat getInputFormatFromCache( @@ -215,11 +215,11 @@ static InputFormat getInputFormatFromCache( return ReflectionUtil.newInstance(inputFormatClass, conf); } // TODO: why is this copy-pasted from HiveInputFormat? - InputFormat format = inputFormats.get(inputFormatClass.getName()); + InputFormat format = inputFormats.get(inputFormatClass); if (format == null) { try { format = ReflectionUtil.newInstance(inputFormatClass, conf); - inputFormats.put(inputFormatClass.getName(), format); + inputFormats.put(inputFormatClass, format); } catch (Exception e) { throw new IOException("Cannot create an instance of InputFormat class " + inputFormatClass.getName() + " as specified in mapredWork!", e);