Java客户端远程连接hiveserver2 实验报告
一、hiveserver2简介
Hive在生产上是不需要部署集群的,操作Hive只需要通过它提供的客户端即可,Hive提供了大致三类客户端:
hive shell:通过hive shell来操作hive,但是至多只能存在一个hive shell,启动第二个会被阻塞,也就是说hive shell不支持并发操作。
WebUI: 通过HUE/Zeppelin来对Hive表进行操作。
基于JDBC等协议:启动hiveserver2,通过jdbc协议可以访问hive,hiveserver2支持高并发。
简而言之,hiveserver2是Hive启动了一个server,客户端可以使用JDBC协议,通过IP+ Port的方式对其进行访问,达到并发访问的目的。
二、在虚拟机里beeline连接 hiveserver2,测试
HiveJDBC 访问
1 启动 hiveserver2 服务
[root@master hive]# bin/hiveserver2

2 启动 beeline
[root@master hive]# bin/beeline


3 连接 hiveserver2
beeline> !connect jdbc:hive2://master:10000(回车)
Connecting to jdbc:hive2://master:10000
Enter username for jdbc:hive2://master:10000: atguigu(回车)
Enter password for jdbc:hive2://master:10000: (直接回车)
Connected to: Apache Hive (version 1.2.1)
Driver: Hive JDBC (version 1.2.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://master:10000> show databases;


三、基本步骤
1.创建maven项目
2.pom.xml加载依赖包
3.创建hivecon.java
4.加载驱动
5.创建数据库连接
6.创建sql语句
7.进行查询返回结果集
8.遍历结果集
9.启动hiveserver2
四、步骤截图及代码
1.创建maven项目

2.pom.xml加载依赖包
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.1</version>
</dependency>

3.创建hivecon.java
代码
package pyp.hive;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class hivecon {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection con =DriverManager.getConnection("jdbc:hive2://master:10000/default", "", "");
Statement stmt = con.createStatement();
String querySQL="SELECT * FROM student";
ResultSet res = stmt.executeQuery(querySQL);
while (res.next()) {
System.out.println(res.getInt(1)+"----"+res.getString(2));
}
}
}

4.加载驱动
Class.forName("org.apache.hive.jdbc.HiveDriver");
5.创建数据库连接
Connection con =DriverManager.getConnection("jdbc:hive2://master:10000/default", "", "");
6.创建sql语句
Statement stmt = con.createStatement();
String querySQL="SELECT * FROM student";
7.进行查询返回结果集
ResultSet res = stmt.executeQuery(querySQL);
8.遍历结果集
while (res.next()) {
System.out.println(res.getInt(1)+"----"+res.getString(2));
}
9.启动hiveserver2
root@master hive]# bin/hiveserver2

五.结果,运行成功,hiserver2显示OK

六、附录(即代码)
hivecon.java
package pyp.hive;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class hivecon {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection con =DriverManager.getConnection("jdbc:hive2://master:10000/default", "", "");
Statement stmt = con.createStatement();
String querySQL="SELECT * FROM student";
ResultSet res = stmt.executeQuery(querySQL);
while (res.next()) {
System.out.println(res.getInt(1)+"----"+res.getString(2));
}
}
}
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>pyp</groupId>
<artifactId>hive</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hive</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.1</version>
</dependency>
</dependencies>
</project>
七、实验中的坑
1、org.apache.hadoop.hive.jdbc.HiveDriver
原因:版本问题
解决:Class.forName(“org.apache.hadoop.hive.jdbc.HiveDriver”); 改为Class.forName(“org.apache.hive.jdbc.HiveDriver”);即删除hadoop
2、No suitable driver found for jdbc:hive://master:10000/default
原因:找不到驱动
解决:jdbc:hive://master:10000/default改为jdbc:hive2://master:10000/default
3、org.apache.hadoop.conf.Configuration

原因:缺少hadoop-common
pom.xml 添加:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.1</version>
</dependency>
4.Connection refused:connect
原因:hiveserver2忘记启动
解决:在虚拟机启动hiveserver2
[root@master hive]# bin/hiveserver2
5.Permission denied: user=anonymous, access=EXECUTE, inode="/tmp":root:supergroup:drwxrwx—
原因:报错内容提示hive没有/tmp目录的权限,
解决:赋予权限即可:(注意:该tmp目录为hdfs的目录,不是Linux系统的目录)
[root@master ~]# hdfs dfs -chmod 777 /tmp
6.org.apache.hive.jdbc.HiveConnection cannot be cast to org.apache.hadoop.hive.common.jsonexplain.tez.Connection
原因:原因:Connection导入包导错 import org.apache.hadoop.hive.common.jsonexplain.tez.Connection;
解决:import java.sql.Connection;
7.6,color_FFFFFF,t_70)Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
原因:超出索引
解决:res.getInt(0)改为res.getInt(1)

1611

被折叠的 条评论
为什么被折叠?



