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。
希望我的文章能够帮助到您,如有问题,请您及时指出,感谢!