您的位置:首页 > 编程语言 > Java开发

eclipse远程连接Hive(JDBC)

2016-08-03 11:38 477 查看
背景:hadoop分布式框架搭建服务器,现在要通过windows端远程连接Hive。

准备:

1. 安装好hadoop框架

2. 安装好hive并测试完成

3. 启动hadoop

一、 打开hiveserver2端口

二、新建java工程

三、测试链接

四、问题

五、一点心得

一、 打开hiveserver2端口

hive --service hiveserver2 --hiveconf hive.server2.thrift.port=10000
或者
hiveserver2
#注意,打开成功后界面会卡住不动,但是从另外一台机器上登录后可以看到其实端口已经打开。之所以光标闪烁是为了接下来显示对Hive的每一次操作日志。

二、新建java工程
需要导入的jar包:

commons-logging-1.1.3.jar
commons-collections-3.1.jar

hive-exec-0.13.1.jar
hive-jdbc-0.13.1.jar
hive-metastore-0.13.1.jar
hive-service-0.13.1.jar

libfb303-0.9.0.jar
log4j-1.2.16.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
hadoop-common-2.4.0.jar</span>


三、测试连接

测试程序代码(Hql语句根据需要改写):

import java.sql.Connection;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
// import org.apache.hive.jdbc.HiveDriver;

public class HiveJdbc {

private static String driverName = "org.apache.hive.jdbc.HiveDriver";

public boolean run() {

try {
Class.forName(driverName);
Connection con = null;
//端口号默认为10000,根据实际情况修改;
//用户名:hive,密码:hive
con = DriverManager.getConnection(
"jdbc:hive2://10.10.30.64:10000/default", "hive", "hive");
Statement stmt = con.createStatement();
ResultSet res = null;

String sql = "select count(*) from testhive";

System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
System.out.println("ok");
while (res.next()) {
System.out.println(res.getString(1));

}
return true;
} catch (Exception e) {
e.printStackTrace();
System.out.println("error");
return false;
}

}

public static void main(String[] args) throws SQLException {
HiveJdbc hiveJdbcClient = new HiveJdbc();
hiveJdbcClient.run();
}

}



将程序在Hadoop上运行。
运行结果:





四、问题与解决

问题:

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hadoop is not allowed to impersonate hive

解决:

修改hadoop配置文件core-site.xml,添加如下:

<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
<description>Allow the superuser oozie to impersonate any members of the group group1 and group2</description>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
<description>The superuser can connect only from host1 and host2 to impersonate a user</description>
</property>


注:如果是root is not allowed to impersonate root , 上面的修改内容对应改为
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
<description>Allow the superuser oozie to impersonate any members of the group group1 and group2</description>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
<description>The superuser can connect only from host1 and host2 to impersonate a user</description>
</property>


注意修改后需要重启hadoop,再尝试连接。

五、一点心得

其实在实现功能的时候会遇到各种各样的问题,因为每个人的情况都不同,遇到的问题也就各种各样。那么遇到问题后我们要怎么办?

这是我的一点见解:

首先,要准确的定位自己的问题

           根据console的反馈或者是日志文件分析问题的来源,确定是哪一个环节出了错,然后再去搜索对应的答案。因为有些问题不一定能直接找到答案,你需要对你的问题有一个初步的分析,抽象出你所遇到的问题,然后再去找对应的解决方案。

其次,要筛选出靠谱的答案

            网上的解答各种各样,答案的来源也不尽相同。要学会分析答案,结合自己的思考去判断这个答案的可信度。因为根据网上解决方法乱改的话往往会把坑越挖越大,要分析他的问题和自己的问题是否相同,要看他的解决办法是否合理。我通常是看了四五个答案之后才去动手修改自己的配置的,同时还要留意自己改了什么东西。

最后,要不断的去学习和理解

            遇到新的任务往往需要我们去学习很多东西,而不是简单地去完成任务。比如在搭建环境的过程中,就要对自己所做的配置和修改有一个大概的认识,要把整个过程理清楚。如果过程中有不太确定的地方,最好自己查资料去搞清楚。问题解决不是目的,下次再遇到要能定位到这里,最好能自己解决问题。如果什么也不懂就一直搞下去,只会是自己给自己挖坑,最后会死的很惨。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息