Не удалось подключиться к HIVE Java

Я хочу использовать org.apache.hadoop.hive для работы с хранилищем метаданных.

Улей (1.1) и hadoop (версия 2.6) были установлены на сервере Linux. На моем компьютере установлена ​​ОС Windows. Здесь я пытаюсь создать Hive conf.

import org.apache.hadoop.hive.conf.HiveConf;


    public class Main {
        public static void main(String[] args){

            HiveConf hiveConf = new HiveConf();
            hiveConf.setIntVar(HiveConf.ConfVars.METASTORETHRIFTCONNECTIONRETRIES, 3);
            hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, "thrift://server:port");

            HiveMetastore hiveMetaStoreConnector = new HiveMetastore(hiveConf);
            if(hiveMetaStoreConnector != null){
                System.out.print(hiveMetaStoreConnector.getAllPartitionInfo("tablename"));
            }
        }
    }

Но я столкнулся с проблемой в HiveConf hiveConf = new HiveConf();

СЕРЬЕЗНЫЙ: Не удалось найти двоичный файл winutils в двоичном пути Hadoop java.io.IOException: Не удалось найти исполняемый файл null\bin\winutils.exe в двоичных файлах Hadoop. в
org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:379) в
org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:394) в org.apache.hadoop .util.Shell.(Shell.java:387) в
org.apache.hadoop.hive.conf.HiveConf$ConfVars.findHadoopBinary(HiveConf.java:2065)
в org.apache.hadoop.hive. conf.HiveConf$ConfVars.(HiveConf.java:332)
в org.apache.hadoop.hive.conf.HiveConf.(HiveConf.java:95) в Main.main(Main.java:11) в солнце. Reflect.NativeMethodAccessorImpl.invoke0(Native Method)
в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
в java .lang.reflect.Method.invoke(Method.java:497) в com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Исключение в потоке "main" java. lang.ExceptionInInitializerError
в org.apache.hadoop.hive.conf.HiveConf.(HiveConf.java:95) в Main.main(Main.java:11) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) < br>at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method .java:497) в com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) Причина: java.lang.RuntimeException: не удалось загрузить прокладки в классе null
в org.apache. hadoop.hive.shims.ShimLoader.loadShims(ShimLoader.java:86)
на org.apache.hadoop.hive.shims.ShimLoader.getHadoopShims(ShimLoader.java:62) на org.apache.hadoop.hive.conf .HiveConf$ConfVars.(HiveConf.java:335) ... еще 7 Вызывается: java.lang.NullPointerE xception на java.lang.Class.forName0 (собственный метод) на java.lang.Class.forName (Class.java:264) на org.apache.hadoop.hive.shims.ShimLoader.loadShims(ShimLoader.java:83) . .. еще 9

Должен ли я установить клиент Hadoop на свои окна (winutils.exe)? Или я должен включить больше библиотек?

Кроме того, мне нужно установить conf только hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, "thrift://server:port")?

Или это как-то связано с настройкой чего-то?

Любые предложения будут оценены.


person Алексей Байдин    schedule 20.03.2018    source источник
comment
Ясно то, что эта ошибка возникает, когда ваша программа пытается найти двоичный файл hadoop (ConfVars.findHadoopBinary из stacktrace), и, поскольку вы получаете исключение IOException, конкретный файл (winutils.exe) может не может быть найден вашей программой. Скорее всего, вам нужно установить клиент Hadoop на вашем компьютере с Windows.   -  person dj_frunza    schedule 20.03.2018
comment
Спасибо. Я попробую.   -  person Алексей Байдин    schedule 20.03.2018
comment
Конечно, не помешает попробовать winutils.exe github.com/steveloughran/winutils. После того, как вы загрузите его, установите переменную среды для HADOOP_HOME и добавьте %HADOOP_HOME%/bin к вашему PATH.   -  person Ben Watson    schedule 21.03.2018


Ответы (1)


Я не уверен, чего вы пытаетесь достичь, но ваш код не будет работать на компьютере с Windows, потому что на компьютере с Windows отсутствует библиотека hadoop. Я думаю, что невозможно иметь настоящую настройку на голой машине. Вам понадобится какое-то программное обеспечение VMware, чтобы оконная машина работала как клиент улья.

Если вы пытаетесь подключиться к улью через программу, попробуйте использовать Hive API, который предоставляет доступ способ JDBC для подключения к кусту.

JDBC

HiveServer2 имеет драйвер JDBC. Он поддерживает как встроенный, так и удаленный доступ к HiveServer2. Удаленный режим HiveServer2 рекомендуется для производственного использования, так как он более безопасен и не требует предоставления пользователям прямого доступа к HDFS/хранилищу метаданных.

URL-адрес HiveServer2 представляет собой строку со следующим синтаксисом:

jdbc:hive2://<host1>:<port1>,<host2>:<port2>/dbName;initFile=<file>;sess_var_list?hive_conf_list#hive_var_list

куда

<host1>:<port1>,<host2>:<port2> — это экземпляр сервера или разделенный запятыми список экземпляров сервера для подключения (если включено динамическое обнаружение служб). Если пусто, будет использоваться встроенный сервер.

dbName — это имя исходной базы данных.

<file> — это путь к файлу сценария инициализации (Hive 2.2.0 и более поздние версии). Этот файл сценария написан с операторами SQL, которые будут выполняться автоматически после подключения. Этот параметр может быть пустым.

sess_var_list — это разделенный точкой с запятой список из key=value пар переменных сеанса (например, user=foo;password=bar).

hive_conf_list — это разделенный точкой с запятой список key=value пар переменных конфигурации Hive для этого сеанса.

hive_var_list — это разделенный точкой с запятой список key=value пар переменных Hive для этого сеанса.

person Gyanendra Dwivedi    schedule 20.03.2018
comment
Ой! Действительно? Я не могу использовать HiveMetaStoreClient в ОС Windows без использования виртуальной машины!? Проблема, которая у меня была наверху, была решена. Я подключаю больше библиотек, и вот - проблема в HiveMetastore hiveMetaStoreConnector = new HiveMetastore(hiveConf); - person Алексей Байдин; 21.03.2018
comment
Я знаю о подключении через jdbc:hive2. Но я думаю, что лучше всего использовать HiveMetaStoreClient. - person Алексей Байдин; 21.03.2018