繁体   English   中英

无法连接到HIVE Java

[英]Unable to connect to HIVE java

我想使用org.apache.hadoop.hive与metastore一起工作。

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();遇到了一个问题HiveConf hiveConf = new HiveConf();

严重:无法在hadoop二进制路径java.io.IOException中找到winutils二进制文件:无法在Hadoop二进制文件中找到可执行文件null \\ bin \\ winutils.exe。
org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:379)在
org.apache.hadoop.util.Shell。(Shell.java:387)上的org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:394)
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)​​在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)处的java.lang.reflect.Method.invoke(Method.java:497)
线程“主”中的异常java.lang.ExceptionInInitializerError
在org.apache.hadoop.hive.conf.HiveConf。(HiveConf.java:95)在Main.main(Main.java:11)​​在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)处的java.lang.reflect.Method.invoke(Method.java:497)处由: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.Class.forName0(本地方法)处的java.lang.NullPointerException org.apache.hadoop.hive.shims.ShimLoader.loadShims(ShimLoader.java.lang.Class.forName(Class.java:264)处的java.lang.Class.forName0(本机方法)。 java:83)...还有9个

我应该在Windows(winutils.exe)上安装hadoop客户端吗? 还是应该包括更多库?

另外,我只需要将conf设置为hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, "thrift://server:port")

还是与设置smth有关?

任何建议将不胜感激。

我不确定您要实现的目标,但是您的代码无法在Windows计算机上运行,​​因为Windows计算机缺少hadoop库。 我认为不可能在裸机上进行真正的设置。 您需要某种VMware软件才能使窗口计算机作为配置单元客户端工作。

如果您尝试通过程序连接到配置单元,则应尝试使用Hive API,该API公开了JDBC连接配置单元的方式。

JDBC

HiveServer2具有JDBC驱动程序。 它支持对HiveServer2的嵌入式和远程访问。 建议将远程HiveServer2模式用于生产,因为它更安全并且不需要为用户授予直接HDFS /元存储访问权限。

HiveServer2 URL是具有以下语法的字符串:

 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是此会话的Hive配置变量的key=value对的分号分隔列表

hive_var_list是此会话的Hive变量的key=value对的分号分隔列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM