我想使用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有什么关系?
任何建议将不胜感激。
答案 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变量。