无法连接到HIVE java

时间:2018-03-20 08:14:31

标签: java hadoop hive hive-metastore

我想使用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();

中遇到了问题
  

严重:无法在hadoop二进制路径中找到winutils二进制文件           java.io.IOException:找不到Hadoop二进制文件中的可执行文件null \ bin \ winutils.exe。              at
org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:379)              at
org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:394)              在org.apache.hadoop.util.Shell。(Shell.java:387)              at
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)              at sun.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)              at sun.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)           引起: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.NullPointerException              at java.lang.Class.forName0(Native Method)              at java.lang.Class.forName(Class.java:264)              在org.apache.hadoop.hive.shims.ShimLoader.loadShims(ShimLoader.java:83)              ... 9更多

我应该在我的Windows上安装hadoop客户端(winutils.exe)吗?或者我应该包含更多的库?

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

或者它与设置smth有什么关系?

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

我不确定你想要实现什么,但你的代码不能在windows机器上运行,因为windows机器缺少hadoop库。我认为在裸机上进行真正的设置是不可能的。您需要某种VMware软件才能使窗口机器成为蜂巢客户端。

如果您尝试通过程序连接到配置单元,则应尝试使用Hive API,它会公开JDBC way以连接到配置单元。

  

<强> JDBC

     

HiveServer2有一个JDBC驱动程序。它支持嵌入式和远程   访问HiveServer2。建议使用远程HiveServer2模式   生产使用,因为它更安全,不需要直接   为用户授予HDFS / Metastore访问权限。

     

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>是init脚本文件的路径(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变量。