[英]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.