Не удалось установить соединение JDBC с Hive из Eclipse

Я пытаюсь установить соединение JDBC с Hive, чтобы я мог просматривать и создавать таблицы и запрашивать таблицы Hive из Eclipse. Я использовал пример кода HiveClient:https://cwiki.apache.org/confluence/display/Hive/HiveClient Затем я добавил все необходимые банки в путь сборки java внутри eclipse и запустил Hive Thrift Server. Порт 10000 слушает. Я использую Cloudera QuickstartVM 4.6.1 и затмение, которое приходит с ним. Вот ошибка, которую я получаю в 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)

когда я пытаюсь подключиться к Hive с помощью beeline, я получаю ту же ошибку. Однако, когда я исключаю имя хоста и порт из !команда 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.

Я что-то упускаю!?

1 ответов


у вас есть 2 варианта подключения hiveserver с помощью jdbc

1 : Hiveserver2

вы пытаетесь подключить hiveserver2, версия hiveserver в Cloudera manager - hivesever2, которая более безопасна, чем hiveserver. Код 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 + "'";

Если вы посмотрите на строку подключения, можно увидеть версию hiveserver 2(jdbc:hive2:/ / localhost: 10000 / по умолчанию", "", ""), второй и третий аргументы-имя пользователя и пароль, по умолчанию держите его пустой строкой"".

для выполнения этой программы добавьте определенные библиотеки hiveserver2.

вместо написания собственных программ для проверки соединения JDBC hiveserver2, клиент 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)

вариантов 2: Hiveserver1

Если вы хотите используйте свой существующий код (код для hiveserver1), который у вас естьhttps://cwiki.apache.org/confluence/display/Hive/HiveClient. Вы должны запустить новый сервер hiveserver в своем пользовательском пространстве в другом порту. Используйте следующую команду для запуска hiveserver в данном порту

nohup hive --service hiveserver-p 10001&

теперь измените номер порта на 10001 в соединении jdbc и запустите его.