I am trying to establish a JDBC connection to Hive so that I can view and create tables and query Hive tables from Eclipse. I used HiveClient sample code: https://cwiki.apache.org/confluence/display/Hive/HiveClient Then I added all the required jars to the java build path inside eclipse and started Hive Thrift Server. Port 10000 is listening. I am using Cloudera QuickstartVM 4.6.1 and the eclipse that comes with it. Here's the error that I get in the IDE when I try to run the code.
我正在尝试建立到Hive的JDBC连接,以便我可以从Eclipse中查看和创建表和查询Hive表。我使用了HiveClient示例代码:https://cwiki.apache.org/confluence/display/Hive/HiveClient,然后我将所有需要的jar添加到eclipse内的java构建路径中,并启动了Hive节约服务器。端口10000是倾听。我正在使用Cloudera QuickstartVM 4.6.1和随之而来的eclipse。这是我在尝试运行代码时在IDE中遇到的错误。
Exception in thread "main" java.sql.SQLException: org.apache.thrift.transport.TTransportException: java.net.SocketException: Connection reset
at org.apache.hadoop.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:191)
at org.apache.hadoop.hive.jdbc.HiveStatement.execute(HiveStatement.java:127)
at org.apache.hadoop.hive.jdbc.HiveConnection.configureConnection(HiveConnection.java:108)
at org.apache.hadoop.hive.jdbc.HiveConnection.<init>(HiveConnection.java:103)
at org.apache.hadoop.hive.jdbc.HiveDriver.connect(HiveDriver.java:104)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at jdbc.Hive.main(Hive.java:24)
When I try connecting to Hive using beeline, I get the same error. However, when I eliminate the host name and port from the !connect command it works with the following error:
当我尝试用直线连接到Hive时,我得到了相同的错误。但是,当我从!connect命令中删除主机名和端口时,它的工作方式有以下错误:
beeline> !connect jdbc:hive:// "" ""
scan complete in 4ms
Connecting to jdbc:hive://
14/03/21 18:42:03 WARN conf.HiveConf: DEPRECATED: Configuration property hive.metastore.local no longer has any effect. Make sure to provide a valid value for hive.metastore.uris if you are connecting to a remote metastore.
14/03/21 18:42:03 INFO metastore.HiveMetaStore: 0: Opening raw store with implemenation class:org.apache.hadoop.hive.metastore.ObjectStore
14/03/21 18:42:04 INFO metastore.ObjectStore: ObjectStore, initialize called
14/03/21 18:42:05 INFO DataNucleus.Persistence: Property datanucleus.cache.level2 unknown - will be ignored.
What am I missing here!?
我错过了什么?
1 个解决方案
#1
12
You have 2 options to connect hiveserver using jdbc
您有两个选项可以使用jdbc连接hiveserver
Option 1 : Hiveserver2
选项1:Hiveserver2
You are trying to connect hiveserver2, hiveserver version in cloudera manager is hivesever2, which is more secure than hiveserver. JDBC code you are using is hiveserver,Use the following code snippet for hiveserver2
您正在尝试连接hiveserver2,在cloudera manager中的hiveserver版本是hivesever2,它比hiveserver2更安全。您正在使用的JDBC代码是hiveserver,请为hiveserver2使用以下代码片段
Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "hive", "");
Statement stmt = con.createStatement();
String tableName = "testHiveDriverTable";
stmt.execute("drop table if exists " + tableName);
stmt.execute("create table " + tableName + " (key int, value string)");
String sql = "show tables '" + tableName + "'";
If you look at the connection string, can see the hiveserver version 2(jdbc:hive2://localhost:10000/default", "", ""), second and third arguments are username and password, by default keep it empty string "".
如果查看连接字符串,可以看到hiveserver版本2(jdbc:hive2://localhost:10000/default“,”,“”),第二个和第三个参数是用户名和密码,默认情况下保持为空字符串”。
For executing this program add hiveserver2 specific libraries.
要执行此程序,请添加hiveserver2特定库。
Instead of writing your own programs for checking hiveserver2 jdbc connection, beeline hive client can be used as follows
不用编写自己的程序来检查hiveserver2 jdbc连接,可以使用beeline hive客户端如下所示
> [testuser02@Abcd-Host1 ~]$ beeline
> beeline> !connect jdbc:hive2://Abcd-Host1:10000/default "" "" ""
>
> 0: jdbc:hive2://Abcd-Host1:10000/default> show tables;
+------------+
| tab_name |
+------------+
| sample_07 |
| sample_08 |
| test1 |
+------------+
3 rows selected (0.334 seconds)
Options 2: Hiveserver1
选项2:Hiveserver1
If you want to make use of your existing code(code for hiveserver1), which you are having https://cwiki.apache.org/confluence/display/Hive/HiveClient. You got to start a new hiveserver in your userspace in another port. Use the following command to start a hiveserver in a given port
如果您想要使用现有的代码(用于hiveserver1的代码),那么您将使用https://cwiki.apache.org/confluence/display/Hive/HiveClient。您需要在另一个端口的用户空间中启动一个新的hiveserver。使用以下命令在给定的端口中启动hiveserver
nohup hive --service hiveserver -p 10001 &
nohup hive——服务hiveserver - p10001 &
Now change the port number to 10001 in jdbc connection and run it.
现在在connection中将端口号更改为10001 jdbc并运行它。
#1
12
You have 2 options to connect hiveserver using jdbc
您有两个选项可以使用jdbc连接hiveserver
Option 1 : Hiveserver2
选项1:Hiveserver2
You are trying to connect hiveserver2, hiveserver version in cloudera manager is hivesever2, which is more secure than hiveserver. JDBC code you are using is hiveserver,Use the following code snippet for hiveserver2
您正在尝试连接hiveserver2,在cloudera manager中的hiveserver版本是hivesever2,它比hiveserver2更安全。您正在使用的JDBC代码是hiveserver,请为hiveserver2使用以下代码片段
Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "hive", "");
Statement stmt = con.createStatement();
String tableName = "testHiveDriverTable";
stmt.execute("drop table if exists " + tableName);
stmt.execute("create table " + tableName + " (key int, value string)");
String sql = "show tables '" + tableName + "'";
If you look at the connection string, can see the hiveserver version 2(jdbc:hive2://localhost:10000/default", "", ""), second and third arguments are username and password, by default keep it empty string "".
如果查看连接字符串,可以看到hiveserver版本2(jdbc:hive2://localhost:10000/default“,”,“”),第二个和第三个参数是用户名和密码,默认情况下保持为空字符串”。
For executing this program add hiveserver2 specific libraries.
要执行此程序,请添加hiveserver2特定库。
Instead of writing your own programs for checking hiveserver2 jdbc connection, beeline hive client can be used as follows
不用编写自己的程序来检查hiveserver2 jdbc连接,可以使用beeline hive客户端如下所示
> [testuser02@Abcd-Host1 ~]$ beeline
> beeline> !connect jdbc:hive2://Abcd-Host1:10000/default "" "" ""
>
> 0: jdbc:hive2://Abcd-Host1:10000/default> show tables;
+------------+
| tab_name |
+------------+
| sample_07 |
| sample_08 |
| test1 |
+------------+
3 rows selected (0.334 seconds)
Options 2: Hiveserver1
选项2:Hiveserver1
If you want to make use of your existing code(code for hiveserver1), which you are having https://cwiki.apache.org/confluence/display/Hive/HiveClient. You got to start a new hiveserver in your userspace in another port. Use the following command to start a hiveserver in a given port
如果您想要使用现有的代码(用于hiveserver1的代码),那么您将使用https://cwiki.apache.org/confluence/display/Hive/HiveClient。您需要在另一个端口的用户空间中启动一个新的hiveserver。使用以下命令在给定的端口中启动hiveserver
nohup hive --service hiveserver -p 10001 &
nohup hive——服务hiveserver - p10001 &
Now change the port number to 10001 in jdbc connection and run it.
现在在connection中将端口号更改为10001 jdbc并运行它。