How to start hiveserver2 as service
Asked Answered
U

4

6

Hi all I have setup multi node cluster (i.e 5 node) in my network which working fine. now I wanted to insert and retrieve data from cluster using hive thus I have setup hive latest release apache-hive-0.14.0-bin.tar.gz (i.e. 0.14.0 from here ) on my master node as given in this article.

also I have written a java client class which will make jdbc connection to hive and insert the data into HDFS using hive.

HiveJdbcClient.Java

public class HiveJdbcClient {

private static final String DRIVER_NAME = "org.apache.hive.jdbc.HiveDriver";
    private static final String HIVE_URL = "jdbc:hive2://x.x.x.x:10000/default";
    private static final String HIVE_UNAME = "";
    private static final String HIVE_PWD = "";
    private static Connection con;

    private HiveJdbcClient() {}

    public static Connection getConnection() {
        try {
            if (con == null) {
                synchronized (HiveJdbcClient.class) {
                    if (con == null) {
                        Class.forName(DRIVER_NAME);
                        con = DriverManager.getConnection(HIVE_URL,
                                HIVE_UNAME, HIVE_PWD);
                        System.out.println("Successfuly Connected to database...!");
                    }
                }// End of synchronized block.
            }// End of if block.
        } catch (SQLException e) {
            System.out.println("Can Not able to connect to database pls check your settings \n" + e);
        } catch (ClassNotFoundException e) {
            System.out.println("Can Not able to connect to database pls check your settings \n" + e);
        }// End of try-catch block. 
        return con;
    }// End of getConnection() Method.

    public static ResultSet executeQuery(String sql) {
        ResultSet set = null;
        try {
            if (sql != null) {
                set = getConnection().createStatement().executeQuery(sql);
            }
        } catch (SQLException e) {
            System.out.println("Error while executing query " + e);
        }// End of try-catch block.
        return set;
    }// End of executeQuery() Method.

    public static void main(String[] args) throws ParseException, SQLException {
        ResultSet res = executeQuery("SELECT * FROM mytable");
        while (res.next()) {
            System.out.println(String.valueOf(res.getString(1)) + '\t'
                    + String.valueOf(res.getFloat(2)) + '\t'
                    + String.valueOf(res.getString(3)));
        }
    }
}//End of HiveJdbcClient Class.

my application able to connect to server when I run following command in terminal

$HIVE_HOME/bin/hiveserver2
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hadoop-2.6.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/apache-hive-0.14.0-bin/lib/hive-jdbc-0.14.0-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
OK 

but when I close this terminal then my application gives following error

ERROR

java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://X.X.X.X:10000/default: java.net.ConnectException: Connection refused

that means I have to run hiveserver2 as a service on my master node.

can any one help me to run this hiveserver2 as service. or any link which will help me to run hiveserver2 as service.

Ut answered 22/12, 2014 at 14:5 Comment(0)
C
11

Have you tried --service option?

$HIVE_HOME/bin/hive --service hiveserver2 &
Chiapas answered 22/12, 2014 at 14:17 Comment(0)
P
9

For versions 1.2 and above, hive is deprecated and the hiveserver2 command should be used directly.

So the correct way to start hiveserver2 in background is now :

nohup hiveserver2 &

Or with output to a log file :

nohup hiveserver2 > hive.log &

Sources : https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-BuildingHivefromSource - It says that "invoking hive" is deprecated.

Pledge answered 28/11, 2015 at 2:41 Comment(0)
F
2

Try this

nohup hive --service hiveserver2 &
Frances answered 24/12, 2014 at 11:35 Comment(0)
A
0

As systemd became the dominant daemon management tool, you can use the following systemd service file to make hiveserver2 as a systemd service.

[Unit]
Description=hiveserver2 service
After=syslog.target
After=network.target

[Service]
Type=simple

User=hadoop
Group=hadoop

ExecStart=/home/hadoop/apache-hive-1.2.2-bin/bin/hive --service hiveserver2 --hiveconf hive.server2.thrift.port=10000 --hiveconf hive.root.logger=INFO,console
WorkingDirectory=/home/hadoop/

[Install]
WantedBy=multi-user.target 

Additionally, configure ${HIVE_HOME}/conf/hive-conf.sh to make hive recognize hadoop installation (other configuartions can be found in ${HIVE_HOME}/conf/hive-conf.sh.template)

export PATH=${bin}/../../hadoop-2.10.1/bin:$PATH
Ann answered 17/9, 2021 at 5:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.