BELUGA BEHR created HIVE-20844:
----------------------------------
Summary: Cache Instances of CacheManager in DummyTxnManager
Key: HIVE-20844
URL: https://issues.apache.org/jira/browse/HIVE-20844
Project: Hive
Issue Type: Improvement
Components: HiveServer2, Locking
Affects Versions: 3.1.0, 2.3.2, 4.0.0
Reporter: BELUGA BEHR
I noticed that the {{DummyTxnManager}} class instantiates quite a few instances
of {{ZooKeeperHiveLockManager}}. The ZooKeeper LM creates a connection to ZK
for each instance created. It also does some initialization steps that are
almost always just noise and pressure on ZooKeeper because it has already been
initialized and the steps are therefore NOOPs. {{ZooKeeperHiveLockManager}}
should be a singleton class with one long-lived connection to the ZooKeeper
service. Perhaps the {{HiveLockManager}} interface could have a
{{isSingleton()}} method which indicates that the LM should only be
instantiated once and cached for subsequent sessions.
{code:java}
2018-05-14 22:45:30,574 INFO
org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager:
[HiveServer2-Background-Pool: Thread-1252389]: Creating lock manager of type
org.apache.hadoop.hive.ql.lockmgr.zookeeper.ZooKeeperHiveLockManager
2018-05-14 22:51:27,865 INFO
org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager:
[HiveServer2-Background-Pool: Thread-1252671]: Creating lock manager of type
org.apache.hadoop.hive.ql.lockmgr.zookeeper.ZooKeeperHiveLockManager
2018-05-14 22:51:37,552 INFO
org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager:
[HiveServer2-Background-Pool: Thread-1252686]: Creating lock manager of type
org.apache.hadoop.hive.ql.lockmgr.zookeeper.ZooKeeperHiveLockManager
2018-05-14 22:51:49,046 INFO
org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager:
[HiveServer2-Background-Pool: Thread-1252736]: Creating lock manager of type
org.apache.hadoop.hive.ql.lockmgr.zookeeper.ZooKeeperHiveLockManager
2018-05-14 22:51:50,664 INFO
org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager:
[HiveServer2-Background-Pool: Thread-1252742]: Creating lock manager of type
org.apache.hadoop.hive.ql.lockmgr.zookeeper.ZooKeeperHiveLockManager
2018-05-14 23:00:54,314 INFO
org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager:
[HiveServer2-Background-Pool: Thread-1253479]: Creating lock manager of type
org.apache.hadoop.hive.ql.lockmgr.zookeeper.ZooKeeperHiveLockManager
2018-05-14 23:17:26,867 INFO
org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager:
[HiveServer2-Background-Pool: Thread-1254180]: Creating lock manager of type
org.apache.hadoop.hive.ql.lockmgr.zookeeper.ZooKeeperHiveLockManager
2018-05-14 23:24:25,426 INFO
org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager:
[HiveServer2-Background-Pool: Thread-1255493]: Creating lock manager of type
org.apache.hadoop.hive.ql.lockmgr.zookeeper.ZooKeeperHiveLockManager
{code}
{code:java|title=DummyTxnManager.java}
@Override
public HiveLockManager getLockManager() throws LockException {
if (lockMgr == null) {
boolean supportConcurrency =
conf.getBoolVar(HiveConf.ConfVars.HIVE_SUPPORT_CONCURRENCY);
if (supportConcurrency) {
String lockMgrName =
conf.getVar(HiveConf.ConfVars.HIVE_LOCK_MANAGER);
if ((lockMgrName == null) || (lockMgrName.isEmpty())) {
throw new LockException(ErrorMsg.LOCKMGR_NOT_SPECIFIED.getMsg());
}
try {
// CACHE LM HERE
LOG.info("Creating lock manager of type " + lockMgrName);
lockMgr = (HiveLockManager)ReflectionUtils.newInstance(
conf.getClassByName(lockMgrName), conf);
lockManagerCtx = new HiveLockManagerCtx(conf);
lockMgr.setContext(lockManagerCtx);
} catch (Exception e) {
...
{code}
[https://github.com/apache/hive/blob/f37c5de6c32b9395d1b34fa3c02ed06d1bfbf6eb/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockManager.java]
{code:java|title=ZooKeeperHiveLockManager Initialization}
try {
curatorFramework = CuratorFrameworkSingleton.getInstance(conf);
parent = conf.getVar(HiveConf.ConfVars.HIVE_ZOOKEEPER_NAMESPACE);
try{
curatorFramework.create().withMode(CreateMode.PERSISTENT).forPath("/" +
parent, new byte[0]);
} catch (Exception e) {
// ignore if the parent already exists
if (!(e instanceof KeeperException) || ((KeeperException)e).code() !=
KeeperException.Code.NODEEXISTS) {
LOG.warn("Unexpected ZK exception when creating parent node /" +
parent, e);
}
}
{code}
https://github.com/apache/hive/blob/f37c5de6c32b9395d1b34fa3c02ed06d1bfbf6eb/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/zookeeper/ZooKeeperHiveLockManager.java#L96-L106
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)