eclipse远程连接Hive(JDBC)

背景: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

三、测试连接

测试程序代码(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上运行。 
  

运行结果:

eclipse远程连接Hive(JDBC)_第1张图片

eclipse远程连接Hive(JDBC)_第2张图片

四、问题与解决

问题:

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

解决:

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

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

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

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


五、一点心得

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

这是我的一点见解:

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

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

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

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

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

            遇到新的任务往往需要我们去学习很多东西,而不是简单地去完成任务。比如在搭建环境的过程中,就要对自己所做的配置和修改有一个大概的认识,要把整个过程理清楚。如果过程中有不太确定的地方,最好自己查资料去搞清楚。问题解决不是目的,下次再遇到要能定位到这里,最好能自己解决问题。如果什么也不懂就一直搞下去,只会是自己给自己挖坑,最后会死的很惨。

你可能感兴趣的:(Hadoop)