Java客户端远程连接hiveserver2

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)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值