Hi users:

Found the configuration "hive.server2.thrift.bind.host" does not work 
regardless of setting environment variable or hive-site.xml.
It's always bind "0.0.0.0" after issue the command "hive --service hiveserver2"


Take a look source code of 2.3.3 version.
src/java/org/apache/hive/service/cli/thrift/ThriftCLIService.java


The member variable hiveHost of ThriftCLIService can't be set value correctly, 
since the local variable hiveHost defined in init function.


......
  protected int portNum;
  protected InetAddress serverIPAddress;
  protected String hiveHost;
..........
public synchronized void init(HiveConf hiveConf) {
    this.hiveConf = hiveConf;


    String hiveHost = System.getenv("HIVE_SERVER2_THRIFT_BIND_HOST");     
<------- local variable hiveHost to be set, but not be set for member variable 
hiveHost in init function. 
    if (hiveHost == null) {
      hiveHost = hiveConf.getVar(ConfVars.HIVE_SERVER2_THRIFT_BIND_HOST);
    }
    try {
      serverIPAddress = ServerUtils.getHostAddress(hiveHost);
    } catch (UnknownHostException e) {
      throw new ServiceException(e);
    }


    // Initialize common server configs needed in both binary & http modes
    String portString;
    // HTTP mode
    if (HiveServer2.isHTTPTransportMode(hiveConf)) {
      workerKeepAliveTime =
          
hiveConf.getTimeVar(ConfVars.HIVE_SERVER2_THRIFT_HTTP_WORKER_KEEPALIVE_TIME,
              TimeUnit.SECONDS);
      portString = System.getenv("HIVE_SERVER2_THRIFT_HTTP_PORT");
      if (portString != null) {
        portNum = Integer.parseInt(portString);
      } else {
        portNum = hiveConf.getIntVar(ConfVars.HIVE_SERVER2_THRIFT_HTTP_PORT);
      }
    }
    // Binary mode
    else {
      workerKeepAliveTime =
          
hiveConf.getTimeVar(ConfVars.HIVE_SERVER2_THRIFT_WORKER_KEEPALIVE_TIME, 
TimeUnit.SECONDS);
      portString = System.getenv("HIVE_SERVER2_THRIFT_PORT");
      if (portString != null) {
        portNum = Integer.parseInt(portString);        <------- The member 
variable  portNum assigned value correctly
      } else {
        portNum = hiveConf.getIntVar(ConfVars.HIVE_SERVER2_THRIFT_PORT);   
<------- The member variable  portNum assigned value correctly
      }
    }
    minWorkerThreads = 
hiveConf.getIntVar(ConfVars.HIVE_SERVER2_THRIFT_MIN_WORKER_THREADS);
    maxWorkerThreads = 
hiveConf.getIntVar(ConfVars.HIVE_SERVER2_THRIFT_MAX_WORKER_THREADS);
    super.init(hiveConf);
  }


So, the subclass ThriftBinaryCLIService can't get value correctly.


 serverSocket = HiveAuthUtils.getServerSocket(hiveHost, portNum);   
<---hiveHost is member variable of parent class, but it's value is null .




Thanks.

Reply via email to