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.
Have you tried --service option?
$HIVE_HOME/bin/hive --service hiveserver2 &
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With