java - 通过 JDBC 连接到远程 Mapr Hive

标签 java jdbc hadoop hive mapr

这个问题与Hive JDBC getConnection does not return类似,但不一样。 .然而,这是关于远程连接的。 Metastore 也存在于启动 hiveserver2 的目录中。

我们在远程机器上有一个正在运行的 mapr 集群。我想使用 Java JDBC 连接到这个集群上的 Hive。

因此我们启动了配置单元服务器:

/opt/mapr/hive/hive-0.11/bin/hiveserver2

服务器进程的输出不包含任何错误消息。它在 netstat 报告的端口 10000 上监听。

我尝试按照 https://cwiki.apache.org/confluence/display/Hive/HiveClient 中的描述连接到服务器,从而将 localhost 替换为运行 hiveserver2 的服务器名称:

Connection con = 
  DriverManager.getConnection("jdbc:hive://myserver.example.com:10000/default", "", "");

但是程序正好在这个语句处挂起。它似乎没有连接。

可能我需要提供用户名和密码?

最初我使用驱动程序 org.apache.hadoop.hive.jdbc.HiveDriver。

然而,如果 hive2 服务器正在运行,我似乎应该使用驱动程序 org.apache.hive.jdbc.HiveDriver。现在我得到以下异常:

Exception in thread "main" java.sql.SQLException: Could not establish connection to jdbc:hive2://myserver.example.com:10000/default: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null)
at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:246)
at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:132)
at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at HiveJdbcClient.main(HiveJdbcClient.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null)
at org.apache.thrift.TApplicationException.read(TApplicationException.java:108)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:71)
at org.apache.hive.service.cli.thrift.TCLIService$Client.recv_OpenSession(TCLIService.java:144)
at org.apache.hive.service.cli.thrift.TCLIService$Client.OpenSession(TCLIService.java:131)
at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:237)
... 10 more

最佳答案

我遇到了同样的问题,并且能够通过将正确的依赖项添加到我的 pom.xml 文件来解决这个问题。我正在从 Maven Central 获取最新的 apache 版本的配置单元,并切换到使用 cloudera repo 中的 cdh4 版本。因此,您所看到的可能是 hive-jdbc 依赖性错误的症状。这是我添加到我的 pom 文件中的 Maven 片段:

<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
...
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>0.10.0-cdh4.3.2</version>
</dependency>

这是关于 cloudera repo 的链接.

此外,将“;auth=noSasl”添加到 URL 会使我的应用程序挂起,因此我将其删除。

关于java - 通过 JDBC 连接到远程 Mapr Hive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20395922/

相关文章:

Mysql InnoDB 锁定原子读

node.js - 如何在MongoDB中为共同的 friend 建模

java - pig : Group by ranges/binning data

java - eclipse 中的字符串

mysql - Spring Mysql com.mysql.jdbc.MysqlDataTruncation : Data truncation: Data too long for column

java - 使用模式/匹配器提取子字符串

java - 我可以使用 Java EE Web 应用程序中的 Windows 身份验证连接到 SQL Server 吗?

hadoop - pig 壳设置: automatically executing pig scripts

java - String、StringBuffer 和 StringBuilder

java - 在 android 中使用 group by 和 content provider 进行计数