1 /** 2 * Copyright 2010 The Apache Software Foundation 3 * 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, software 15 * distributed under the License is distributed on an "AS IS" BASIS, 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 * See the License for the specific language governing permissions and 18 * limitations under the License. 19 */ 20 21 package org.apache.hadoop.hbase.zookeeper; 22 23 import java.util.Properties; 24 import java.util.Map.Entry; 25 26 import org.apache.hadoop.conf.Configuration; 27 import org.apache.hadoop.hbase.HBaseConfiguration; 28 29 /** 30 * Tool for reading a ZooKeeper server from HBase XML configuration producing 31 * the '-server host:port' argument to pass ZooKeeperMain. This program 32 * emits either '-server HOST:PORT" where HOST is one of the zk ensemble 33 * members plus zk client port OR it emits '' if no zk servers found (Yes, 34 * it emits '-server' too). 35 */ 36 public class ZooKeeperMainServerArg { 37 public String parse(final Configuration c) { 38 // Note that we do not simply grab the property 39 // HConstants.ZOOKEEPER_QUORUM from the HBaseConfiguration because the 40 // user may be using a zoo.cfg file. 41 Properties zkProps = ZKConfig.makeZKProps(c); 42 String host = null; 43 String clientPort = null; 44 for (Entry<Object, Object> entry: zkProps.entrySet()) { 45 String key = entry.getKey().toString().trim(); 46 String value = entry.getValue().toString().trim(); 47 if (key.startsWith("server.") && host == null) { 48 String[] parts = value.split(":"); 49 host = parts[0]; 50 } else if (key.endsWith("clientPort")) { 51 clientPort = value; 52 } 53 if (host != null && clientPort != null) break; 54 } 55 return host != null && clientPort != null? host + ":" + clientPort: null; 56 } 57 58 /** 59 * Run the tool. 60 * @param args Command line arguments. First arg is path to zookeepers file. 61 */ 62 public static void main(String args[]) { 63 Configuration conf = HBaseConfiguration.create(); 64 String hostport = new ZooKeeperMainServerArg().parse(conf); 65 System.out.println((hostport == null || hostport.length() == 0)? "": 66 "-server " + hostport); 67 } 68 }