|
20 | 20 | import java.util.List; |
21 | 21 | import org.apache.hadoop.conf.Configuration; |
22 | 22 | import org.apache.hadoop.hbase.ServerName; |
23 | | -import org.apache.hadoop.hbase.util.CommonFSUtils; |
24 | 23 | import org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper; |
25 | 24 | import org.apache.hadoop.hbase.zookeeper.ZKUtil; |
26 | 25 | import org.apache.hadoop.hbase.zookeeper.ZKWatcher; |
27 | 26 | import org.apache.hadoop.hbase.zookeeper.ZNodePaths; |
28 | 27 | import org.apache.hadoop.hdfs.DFSUtil; |
| 28 | +import org.apache.hadoop.hdfs.DistributedFileSystem; |
29 | 29 | import org.apache.hadoop.hdfs.HAUtil; |
30 | 30 | import org.apache.hadoop.hdfs.server.namenode.ha.proto.HAZKInfoProtos.ActiveNodeInfo; |
31 | 31 | import org.slf4j.Logger; |
@@ -57,39 +57,47 @@ protected Logger getLogger() { |
57 | 57 | @Override |
58 | 58 | public void perform() throws Exception { |
59 | 59 | getLogger().info("Performing action: Restart active namenode"); |
60 | | - Configuration conf = CommonFSUtils.getRootDir(getConf()).getFileSystem(getConf()).getConf(); |
61 | | - String nameServiceID = DFSUtil.getNamenodeNameServiceId(conf); |
62 | | - if (!HAUtil.isHAEnabled(conf, nameServiceID)) { |
63 | | - throw new Exception("HA for namenode is not enabled"); |
64 | | - } |
65 | | - ZKWatcher zkw = null; |
66 | | - RecoverableZooKeeper rzk = null; |
| 60 | + |
| 61 | + final String hadoopHAZkNode; |
67 | 62 | String activeNamenode = null; |
68 | | - String hadoopHAZkNode = conf.get(ZK_PARENT_ZNODE_KEY, ZK_PARENT_ZNODE_DEFAULT); |
69 | | - try { |
70 | | - zkw = new ZKWatcher(conf, "get-active-namenode", null); |
71 | | - rzk = zkw.getRecoverableZooKeeper(); |
72 | | - String hadoopHAZkNodePath = ZNodePaths.joinZNode(hadoopHAZkNode, nameServiceID); |
73 | | - List<String> subChildern = ZKUtil.listChildrenNoWatch(zkw, hadoopHAZkNodePath); |
74 | | - for (String eachEntry : subChildern) { |
75 | | - if (eachEntry.contains(ACTIVE_NN_LOCK_NAME)) { |
76 | | - byte[] data = |
77 | | - rzk.getData(ZNodePaths.joinZNode(hadoopHAZkNodePath, ACTIVE_NN_LOCK_NAME), false, null); |
78 | | - ActiveNodeInfo proto = ActiveNodeInfo.parseFrom(data); |
79 | | - activeNamenode = proto.getHostname(); |
80 | | - } |
| 63 | + int activeNamenodePort = -1; |
| 64 | + try (final DistributedFileSystem dfs = HdfsActionUtils.createDfs(getConf())) { |
| 65 | + final Configuration conf = dfs.getConf(); |
| 66 | + hadoopHAZkNode = conf.get(ZK_PARENT_ZNODE_KEY, ZK_PARENT_ZNODE_DEFAULT); |
| 67 | + final String nameServiceID = DFSUtil.getNamenodeNameServiceId(conf); |
| 68 | + |
| 69 | + if (!HAUtil.isHAEnabled(conf, nameServiceID)) { |
| 70 | + getLogger().info("HA for HDFS is not enabled; skipping"); |
| 71 | + return; |
81 | 72 | } |
82 | | - } finally { |
83 | | - if (zkw != null) { |
84 | | - zkw.close(); |
| 73 | + try (final ZKWatcher zkw = new ZKWatcher(conf, "get-active-namenode", null)) { |
| 74 | + final RecoverableZooKeeper rzk = zkw.getRecoverableZooKeeper(); |
| 75 | + // If hadoopHAZkNode == '/', pass '' instead because then joinZNode will return '//' as a |
| 76 | + // prefix |
| 77 | + // which zk doesn't like as a prefix on the path. |
| 78 | + final String hadoopHAZkNodePath = ZNodePaths.joinZNode( |
| 79 | + (hadoopHAZkNode != null && hadoopHAZkNode.equals("/")) ? "" : hadoopHAZkNode, |
| 80 | + nameServiceID); |
| 81 | + final List<String> subChildren = ZKUtil.listChildrenNoWatch(zkw, hadoopHAZkNodePath); |
| 82 | + for (final String eachEntry : subChildren) { |
| 83 | + if (eachEntry.contains(ACTIVE_NN_LOCK_NAME)) { |
| 84 | + byte[] data = rzk.getData(ZNodePaths.joinZNode(hadoopHAZkNodePath, ACTIVE_NN_LOCK_NAME), |
| 85 | + false, null); |
| 86 | + ActiveNodeInfo proto = ActiveNodeInfo.parseFrom(data); |
| 87 | + activeNamenode = proto.getHostname(); |
| 88 | + activeNamenodePort = proto.getPort(); |
| 89 | + } |
| 90 | + } |
85 | 91 | } |
86 | 92 | } |
| 93 | + |
87 | 94 | if (activeNamenode == null) { |
88 | 95 | throw new Exception("No active Name node found in zookeeper under " + hadoopHAZkNode); |
| 96 | + } else { |
| 97 | + getLogger().info("Found Active NameNode host: {}", activeNamenode); |
| 98 | + final ServerName activeNNHost = ServerName.valueOf(activeNamenode, activeNamenodePort, -1L); |
| 99 | + getLogger().info("Restarting Active NameNode: {}", activeNamenode); |
| 100 | + restartNameNode(activeNNHost, this.sleepTime); |
89 | 101 | } |
90 | | - getLogger().info("Found active namenode host:" + activeNamenode); |
91 | | - ServerName activeNNHost = ServerName.valueOf(activeNamenode, -1, -1); |
92 | | - getLogger().info("Restarting Active NameNode :" + activeNamenode); |
93 | | - restartNameNode(activeNNHost, sleepTime); |
94 | 102 | } |
95 | 103 | } |
0 commit comments