def get_hbase_param(key, default): env=os.environ.copy() if os.name == 'posix': hbase_exec_name = 'hbase' elif os.name == 'nt': hbase_exec_name = 'hbase.cmd' else: print('Unknown platform "%s", defaulting to HBase executable of "hbase"' % os.name) hbase_exec_name = 'hbase' hbase_cmd = phoenix_utils.which(hbase_exec_name) if hbase_cmd is None: print('Failed to find hbase executable on PATH, defaulting %s to %s.' % (key, default)) return default env['HBASE_CONF_DIR'] = phoenix_utils.hbase_conf_dir proc = subprocess.Popen([hbase_cmd, 'org.apache.hadoop.hbase.util.HBaseConfTool', key], env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdout, stderr) = proc.communicate() if proc.returncode != 0: print('Failed to extract %s from hbase-site.xml, defaulting to %s.' % (key, default)) return default # Don't expect this to happen, but give a default value just in case if stdout is None: return default stdout = tryDecode(stdout.strip()) if stdout == 'null': return default return stdout
if os.name == 'posix': hbase_env_path = os.path.join(hbase_config_path, 'hbase-env.sh') hbase_env_cmd = ['bash', '-c', 'source %s && env' % hbase_env_path] elif os.name == 'nt': hbase_env_path = os.path.join(hbase_config_path, 'hbase-env.cmd') hbase_env_cmd = ['cmd.exe', '/c', 'call %s & set' % hbase_env_path] if not hbase_env_path or not hbase_env_cmd: sys.stderr.write("hbase-env file unknown on platform {}{}".format( os.name, os.linesep)) sys.exit(-1) hbase_env = {} if os.path.isfile(hbase_env_path): p = subprocess.Popen(hbase_env_cmd, stdout=subprocess.PIPE) for x in p.stdout: (k, _, v) = tryDecode(x).partition('=') hbase_env[k.strip()] = v.strip() if 'JAVA_HOME' in hbase_env: java_home = hbase_env['JAVA_HOME'] if java_home: java = os.path.join(java_home, 'bin', 'java') else: java = 'java' java_cmd = java +' -Xms512m -Xmx3072m -cp "' + phoenix_utils.pherf_conf_path + os.pathsep + phoenix_utils.hbase_conf_dir + os.pathsep + phoenix_utils.slf4j_backend_jar + os.pathsep + phoenix_utils.phoenix_client_embedded_jar + os.pathsep + phoenix_utils.phoenix_pherf_jar + \ '" -Dlog4j.configuration=file:' + \ os.path.join(phoenix_utils.current_dir, "log4j.properties") + \ " org.apache.phoenix.pherf.Pherf " + args
atexit.register(kill_child) phoenix_utils.setPath() parser = argparse.ArgumentParser(description='Launches the Apache Phoenix Client.') # Positional argument 'zookeepers' is optional. The PhoenixDriver will automatically populate # this if it's not provided by the user (so, we want to leave a default value of empty) parser.add_argument('zookeepers', nargs='?', help='The ZooKeeper quorum string', default='') # Positional argument 'sqlfile' is optional parser.add_argument('sqlfile', nargs='?', help='A file of SQL commands to execute', default='') # Common arguments across sqlline.py and sqlline-thin.py phoenix_utils.common_sqlline_args(parser) # Parse the args args=parser.parse_args() zookeeper = tryDecode(args.zookeepers) sqlfile = tryDecode(args.sqlfile) # HBase configuration folder path (where hbase-site.xml reside) for # HBase/Phoenix client side property override hbase_config_path = os.getenv('HBASE_CONF_DIR', phoenix_utils.current_dir) if sqlfile and not os.path.isfile(sqlfile): parser.print_help() sys.exit(-1) if sqlfile: sqlfile = "--run=" + phoenix_utils.shell_quote([sqlfile]) java_home = os.getenv('JAVA_HOME')
if os.name == 'posix': hbase_env_path = os.path.join(hbase_config_path, 'hbase-env.sh') hbase_env_cmd = ['bash', '-c', 'source %s && env' % hbase_env_path] elif os.name == 'nt': hbase_env_path = os.path.join(hbase_config_path, 'hbase-env.cmd') hbase_env_cmd = ['cmd.exe', '/c', 'call %s & set' % hbase_env_path] if not hbase_env_path or not hbase_env_cmd: sys.stderr.write("hbase-env file unknown on platform {}{}".format( os.name, os.linesep)) sys.exit(-1) hbase_env = {} if os.path.isfile(hbase_env_path): p = subprocess.Popen(hbase_env_cmd, stdout=subprocess.PIPE) for x in p.stdout: (k, _, v) = tryDecode(x).partition('=') hbase_env[k.strip()] = v.strip() if 'JAVA_HOME' in hbase_env: java_home = hbase_env['JAVA_HOME'] if java_home: java = os.path.join(java_home, 'bin', 'java') else: java = 'java' print("HBASE_DIR environment variable is currently set to: " + hbase_path) # Get the HBase classpath hbasecp, stderr = subprocess.Popen(hbase_path + "/bin/hbase classpath", shell=True,
parser.add_argument('-au', '--auth-user', help='Username for HTTP authentication.') parser.add_argument('-ap', '--auth-password', help='Password for HTTP authentication.') # Avatica principal and keytab parser.add_argument('-p', '--principal', help='Kerberos principal for SPNEGO authenction from keytab.') parser.add_argument('-kt', '--keytab', help='Kerberos keytab file for SPNEGO authenction from keytab.') # Avatica HTTPS truststore parser.add_argument('-t', '--truststore', help='Truststore file that contains the TLS certificate of the server.') parser.add_argument('-tp', '--truststore-password', help='Password for the server TLS certificate truststore') # Common arguments across sqlline.py and sqlline-thin.py phoenix_utils.common_sqlline_args(parser) # Parse the args args=parser.parse_args() phoenix_utils.setPath() url = tryDecode(args.url) sqlfile = tryDecode(args.sqlfile) serialization_key = 'phoenix.queryserver.serialization' default_serialization='PROTOBUF' hbase_authentication_key = 'hbase.security.authentication' default_hbase_authentication = '' spnego_auth_disabled_key = 'phoenix.queryserver.spnego.auth.disabled' default_spnego_auth_disabled = 'false' def cleanup_url(url): parsed = parse_url(url) if parsed.scheme == "": url = "http://" + url parsed = parse_url(url) if ":" not in parsed.netloc:
command = 'stop' elif args[1] == 'makeWinServiceDesc': command = 'makeWinServiceDesc' if command: # Pull off queryserver.py and the command args = args[2:] else: # Just pull off queryserver.py args = args[1:] if os.name == 'nt': args = subprocess.list2cmdline(args) else: import pipes # pipes module isn't available on Windows args = " ".join([pipes.quote(tryDecode(v)) for v in args]) # HBase configuration folder path (where hbase-site.xml reside) for # HBase/Phoenix client side property override hbase_conf_dir = phoenix_utils.hbase_conf_dir hadoop_conf_dir = phoenix_utils.hadoop_conf_dir # TODO: add windows support phoenix_file_basename = 'phoenix-%s-queryserver' % getpass.getuser() phoenix_log_file = '%s.log' % phoenix_file_basename phoenix_out_file = '%s.out' % phoenix_file_basename phoenix_pid_file = '%s.pid' % phoenix_file_basename # load hbase-env.??? to extract JAVA_HOME, HBASE_PID_DIR, HBASE_LOG_DIR hbase_env_path = None hbase_env_cmd = None
try: import daemon daemon_supported = True except ImportError: # daemon script not supported on some platforms (windows?) daemon_supported = False import phoenix_utils phoenix_utils.setPath() command = None args = sys.argv if len(args) > 1: if tryDecode(args[1]) == 'start': command = 'start' elif tryDecode(args[1]) == 'stop': command = 'stop' if command: args = args[2:] if os.name == 'nt': args = subprocess.list2cmdline(args[1:]) else: import pipes # pipes module isn't available on Windows args = " ".join([pipes.quote(tryDecode(v)) for v in args[1:]]) # HBase configuration folder path (where hbase-site.xml reside) for # HBase/Phoenix client side property override hbase_config_path = phoenix_utils.hbase_conf_dir