Не удалось установить соединение 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 и запустите его.