Как подключить Hive в iReport? - PullRequest
       14

Как подключить Hive в iReport?

1 голос
/ 13 февраля 2012

Я использую Hadoop-0.20.0 и Hive-0.8.0.Теперь у меня есть данные в таблице Hive, и я хочу генерировать отчеты из этого.Для этого я использую iReport-4.5.0.Для этого я также загружаю HivePlugin-0.5.nbm в iReport.

Теперь я собираюсь подключить соединение Hive в iReport.

Создать новый источник данных -> Новый --> Hive Connection

Jdbc Drive : org.apache.hadoop.hive.jdbc.HiveDriver

Jdbc URl : jdbc: hive // ​​localhost: 10000 / default

Адрес сервера : localhost

База данных : по умолчанию

пользовательимя : root

пароль : somepassword

Затем нажмитена кнопку Проверить соединение.

Я получаю сообщение об ошибке:

Exception

Message:
java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: java.lang.RuntimeException: Illegal Hadoop Version: Unknown (expected A.B.* format)

Level:

SEVERE

Stack Trace:

org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: 
java.lang.RuntimeException: Illegal Hadoop Version: Unknown (expected A.B.* format)
org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:226)
org.apache.hadoop.hive.jdbc.HiveConnection.<init>(HiveConnection.java:72)
org.apache.hadoop.hive.jdbc.HiveDriver.connect(HiveDriver.java:110)
com.jaspersoft.ireport.designer.connection.JDBCConnection.getConnection(JDBCConnection.java:140)
com.jaspersoft.ireport.hadoop.hive.connection.HiveConnection.getConnection(HiveConnection.java:48)
com.jaspersoft.ireport.designer.connection.JDBCConnection.test(JDBCConnection.java:447)
com.jaspersoft.ireport.designer.connection.gui.ConnectionDialog.jButtonTestActionPerformed(ConnectionDialog.java:335)
com.jaspersoft.ireport.designer.connection.gui.ConnectionDialog.access$300(ConnectionDialog.java:43)

Может ли кто-нибудь помочь мне в этом?Где я не прав или что-то упустил?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

"Я также загружаю HivePlugin-0.5.nbm в iReport."
Это не ясно В iReport 4.5 предварительно установлен разъем Hadoop Hive. Почему вы скачали разъем отдельно? Вы установили этот плагин?

Создать новый источник данных -> Создать -> Hive Connection
Диск JDBC: org.apache.hadoop.hive.jdbc.HiveDriver

...

Это невозможно с текущим разъемом Hadoop Hive. Когда вы создаете новое «Hadoop Hive Connection», вам дается только один параметр для заполнения: URL. enter image description here

Я предполагаю, что вы создали соединение JDBC, когда хотели создать соединение Hadoop Hive. Это логично. Доступ к Hive осуществляется через JDBC. Но драйвер Hive JDBC все еще довольно новый. У него есть ряд недостатков. Вот почему коннектор Hive был добавлен в iReport. Он основан на драйвере Hive JDBC, но включает в себя обертку вокруг него, чтобы избежать некоторых проблем.

Или, может быть, вы установили старый разъем Hive поверх того, который уже включен в iReport 4.5. Когда-то в прошлом разъем Hive позволял вам вводить дополнительную информацию, например драйвер JDBC.

Начните с новой установки iReport и убедитесь, что вы используете соединение Hadoop Hive. Это должно прояснить это.

1 голос
/ 15 августа 2015

Ошибка «java.lang.RuntimeException: Illegal Hadoop Version: Unknown (ожидаемый формат AB *)» возникает из-за того, что класс VersionInfo в hadoop-common.jar пытается найти информацию о версии с помощью загрузчика классов текущего потока.

https://github.com/apache/hadoop/blob/release-2.6.0/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/VersionInfo.java#L41-L58

Код выглядит следующим образом ...

package org.apache.hadoop.util;
...
public class VersionInfo {
...
  protected VersionInfo(String component) {
    info = new Properties();
    String versionInfoFile = component + "-version-info.properties";
    InputStream is = null;
    try {
      is = Thread.currentThread().getContextClassLoader()
        .getResourceAsStream(versionInfoFile);
      if (is == null) {
        throw new IOException("Resource not found");
      }
      info.load(is);
    } catch (IOException ex) {
      LogFactory.getLog(getClass()).warn("Could not read '" +
          versionInfoFile + "', " + ex.toString(), ex);
    } finally {
      IOUtils.closeStream(is);
    }
  }

Если ваш инструмент попытается подключиться к источнику данных в отдельном потоке, он выдаст эту ошибку.

Самый простой способ обойти эту проблему - поместить библиотеку hadoop-common.jar в $ JAVA_HOME / lib / ext или использовать параметр командной строки -Djava.endorsed.dirs, чтобы указать на библиотеку hadoop-common.jar , Тогда загрузчик классов потока всегда сможет найти эту информацию.

...