Search in sources :

Example 1 with ThriftHttpCLIService

use of org.apache.hive.service.cli.thrift.ThriftHttpCLIService in project hive by apache.

the class HiveServer2 method init.

@Override
public synchronized void init(HiveConf hiveConf) {
    //Initialize metrics first, as some metrics are for initialization stuff.
    try {
        if (hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_METRICS_ENABLED)) {
            MetricsFactory.init(hiveConf);
        }
    } catch (Throwable t) {
        LOG.warn("Could not initiate the HiveServer2 Metrics system.  Metrics may not be reported.", t);
    }
    cliService = new CLIService(this);
    addService(cliService);
    final HiveServer2 hiveServer2 = this;
    Runnable oomHook = new Runnable() {

        @Override
        public void run() {
            hiveServer2.stop();
        }
    };
    if (isHTTPTransportMode(hiveConf)) {
        thriftCLIService = new ThriftHttpCLIService(cliService, oomHook);
    } else {
        thriftCLIService = new ThriftBinaryCLIService(cliService, oomHook);
    }
    addService(thriftCLIService);
    super.init(hiveConf);
    // Set host name in hiveConf
    try {
        hiveConf.set(HiveConf.ConfVars.HIVE_SERVER2_THRIFT_BIND_HOST.varname, getServerHost());
    } catch (Throwable t) {
        throw new Error("Unable to intitialize HiveServer2", t);
    }
    if (HiveConf.getBoolVar(hiveConf, ConfVars.LLAP_HS2_ENABLE_COORDINATOR)) {
        // See method comment.
        try {
            LlapCoordinator.initializeInstance(hiveConf);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    // Trigger the creation of LLAP registry client, if in use. Clients may be using a different
    // cluster than the default one, but at least for the default case we'd have it covered.
    String llapHosts = HiveConf.getVar(hiveConf, HiveConf.ConfVars.LLAP_DAEMON_SERVICE_HOSTS);
    if (llapHosts != null && !llapHosts.isEmpty()) {
        LlapRegistryService.getClient(hiveConf);
    }
    // Create views registry
    try {
        Hive sessionHive = Hive.get(hiveConf);
        HiveMaterializedViewsRegistry.get().init(sessionHive);
    } catch (HiveException e) {
        throw new RuntimeException("Failed to get metastore connection", e);
    }
    // Setup web UI
    try {
        int webUIPort = hiveConf.getIntVar(ConfVars.HIVE_SERVER2_WEBUI_PORT);
        // We disable web UI in tests unless the test is explicitly setting a
        // unique web ui port so that we don't mess up ptests.
        boolean uiDisabledInTest = hiveConf.getBoolVar(ConfVars.HIVE_IN_TEST) && (webUIPort == Integer.valueOf(ConfVars.HIVE_SERVER2_WEBUI_PORT.getDefaultValue()));
        if (uiDisabledInTest) {
            LOG.info("Web UI is disabled in test mode since webui port was not specified");
        } else {
            if (webUIPort <= 0) {
                LOG.info("Web UI is disabled since port is set to " + webUIPort);
            } else {
                LOG.info("Starting Web UI on port " + webUIPort);
                HttpServer.Builder builder = new HttpServer.Builder("hiveserver2");
                builder.setPort(webUIPort).setConf(hiveConf);
                builder.setHost(hiveConf.getVar(ConfVars.HIVE_SERVER2_WEBUI_BIND_HOST));
                builder.setMaxThreads(hiveConf.getIntVar(ConfVars.HIVE_SERVER2_WEBUI_MAX_THREADS));
                builder.setAdmins(hiveConf.getVar(ConfVars.USERS_IN_ADMIN_ROLE));
                // SessionManager is initialized
                builder.setContextAttribute("hive.sm", cliService.getSessionManager());
                hiveConf.set("startcode", String.valueOf(System.currentTimeMillis()));
                if (hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_WEBUI_USE_SSL)) {
                    String keyStorePath = hiveConf.getVar(ConfVars.HIVE_SERVER2_WEBUI_SSL_KEYSTORE_PATH);
                    if (Strings.isBlank(keyStorePath)) {
                        throw new IllegalArgumentException(ConfVars.HIVE_SERVER2_WEBUI_SSL_KEYSTORE_PATH.varname + " Not configured for SSL connection");
                    }
                    builder.setKeyStorePassword(ShimLoader.getHadoopShims().getPassword(hiveConf, ConfVars.HIVE_SERVER2_WEBUI_SSL_KEYSTORE_PASSWORD.varname));
                    builder.setKeyStorePath(keyStorePath);
                    builder.setUseSSL(true);
                }
                if (hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_WEBUI_USE_SPNEGO)) {
                    String spnegoPrincipal = hiveConf.getVar(ConfVars.HIVE_SERVER2_WEBUI_SPNEGO_PRINCIPAL);
                    String spnegoKeytab = hiveConf.getVar(ConfVars.HIVE_SERVER2_WEBUI_SPNEGO_KEYTAB);
                    if (Strings.isBlank(spnegoPrincipal) || Strings.isBlank(spnegoKeytab)) {
                        throw new IllegalArgumentException(ConfVars.HIVE_SERVER2_WEBUI_SPNEGO_PRINCIPAL.varname + "/" + ConfVars.HIVE_SERVER2_WEBUI_SPNEGO_KEYTAB.varname + " Not configured for SPNEGO authentication");
                    }
                    builder.setSPNEGOPrincipal(spnegoPrincipal);
                    builder.setSPNEGOKeytab(spnegoKeytab);
                    builder.setUseSPNEGO(true);
                }
                builder.addServlet("llap", LlapServlet.class);
                builder.setContextRootRewriteTarget("/hiveserver2.jsp");
                webServer = builder.build();
                webServer.addServlet("query_page", "/query_page", QueryProfileServlet.class);
            }
        }
    } catch (IOException ie) {
        throw new ServiceException(ie);
    }
    // Add a shutdown hook for catching SIGTERM & SIGINT
    ShutdownHookManager.addShutdownHook(new Runnable() {

        @Override
        public void run() {
            hiveServer2.stop();
        }
    });
}
Also used : ThriftBinaryCLIService(org.apache.hive.service.cli.thrift.ThriftBinaryCLIService) HiveException(org.apache.hadoop.hive.ql.metadata.HiveException) OptionBuilder(org.apache.commons.cli.OptionBuilder) IOException(java.io.IOException) ThriftHttpCLIService(org.apache.hive.service.cli.thrift.ThriftHttpCLIService) ThriftBinaryCLIService(org.apache.hive.service.cli.thrift.ThriftBinaryCLIService) ThriftCLIService(org.apache.hive.service.cli.thrift.ThriftCLIService) CLIService(org.apache.hive.service.cli.CLIService) ThriftHttpCLIService(org.apache.hive.service.cli.thrift.ThriftHttpCLIService) Hive(org.apache.hadoop.hive.ql.metadata.Hive) ServiceException(org.apache.hive.service.ServiceException) HttpServer(org.apache.hive.http.HttpServer)

Aggregations

IOException (java.io.IOException)1 OptionBuilder (org.apache.commons.cli.OptionBuilder)1 Hive (org.apache.hadoop.hive.ql.metadata.Hive)1 HiveException (org.apache.hadoop.hive.ql.metadata.HiveException)1 HttpServer (org.apache.hive.http.HttpServer)1 ServiceException (org.apache.hive.service.ServiceException)1 CLIService (org.apache.hive.service.cli.CLIService)1 ThriftBinaryCLIService (org.apache.hive.service.cli.thrift.ThriftBinaryCLIService)1 ThriftCLIService (org.apache.hive.service.cli.thrift.ThriftCLIService)1 ThriftHttpCLIService (org.apache.hive.service.cli.thrift.ThriftHttpCLIService)1