hive的那些事

User: root is not allowed to impersonate anonymous

这个报错信息是由于

<property>
                <name>hadoop.proxyuser.root.hosts</name>
                <value>*</value>
                <description>指定可以在任何IP访问</description>
        </property>
        <property>
                <name>hadoop.proxyuser.root.groups</name>
                <value>*</value>
                <description>指定所有账号可以访问</description>
        </property>
    配置之前配置错误了,这里的root为我主机的用户名。更改配置后重新启动hdfs与hive即可。

java使用jdbc链接hive

这里要注意我们的pom.xml,我们的hive-jdbc的版本一定要和在linux中配置的版本一直,不然会导致项目启动一直报错。至于版本使用的哪个我们可以在linux中使用命令find / -name 'hive-jdbc*.jar'去查找。找到我们对应的即可在这里插入图片描述
我的hive-jdbc.jar版本为2.3.4。
我们还有一个hadoop-common同样道理查找版本。
在这里插入图片描述
找到我们对应的版本之后,下面将我的pom.xml粘贴出来给您参考一下。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.hive</groupId>
	<artifactId>hive</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<dependencies>
	<dependency>
			<groupId>jdk.tools</groupId>
			<artifactId>jdk.tools</artifactId>
			<version>1.8</version>
			<scope>system</scope>
			<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
		</dependency>
		<dependency>
			<groupId>org.apache.hive</groupId>
			<artifactId>hive-jdbc</artifactId>
			<version>2.3.4</version>
		</dependency>

		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-common</artifactId>
			<version>2.7.4</version>
		</dependency>
	</dependencies>
</project>

下面是Java代码

package com.hive;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;

public class HiveJdbcUtils {
	private static Connection conn = null;
	public HiveJdbcUtils(){
		try {
			Class.forName("org.apache.hive.jdbc.HiveDriver");
			String[] urls = new String[]{"jdbc:hive2://master:10000/study","jdbc:hive2://slave1:10000/study"};
			for(String url : urls){   
				String connect = url;
				try {
					conn = DriverManager.getConnection(connect, "root", "root");
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				if(conn !=null){
					break;
				}
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
	}

	public Connection getConnection(){
		return conn;
	}
	
	public ResultSet executeQuery(String hql)throws SQLException{
		Statement stmt = null;
		ResultSet res = null;
		if(conn != null){
			stmt = conn.createStatement();
			res = stmt.executeQuery(hql);
		}
		return res;
	}
	
	public void execute(String hql)throws SQLException{
		if(conn != null){
			conn.createStatement().execute(hql);
		}else{
			System.out.println("Object [conn] is null");
		}
	}
	
	public void close(){
		try {
			if(!conn.isClosed()){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void testMain(){

		HiveJdbcUtils hive = new HiveJdbcUtils();
		String sql = "SHOW TABLES";
		try {
			ResultSet rs = hive.executeQuery(sql);
			System.out.println(new Date()+"~~~~~~~~~~~~~~~~~~~~~~开始运行");
			while(rs.next()){
				System.out.println("tables name ->"+rs.getString(1));
			}
			System.out.println(new Date()+"~~~~~~~~~~~~~~~~~~~~~~结束运行");
			if(rs != null){
				rs.close();
			}
			hive.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
	}
	public static void main(String[] args) throws Exception {
		testMain();
	}
}

我这里的study是我建立的一个hive数据仓库。如果您没有study您可以使用default。

希望我的文章能够帮助到您,如有问题,请您及时指出,感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值