李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
06.使用JDBC方式访问Hive
Leefs
2021-12-02 AM
1530℃
0条
[TOC] ### 前言 目前通过执行`bin/hive`在服务端启动Hive所遇到的问题: + 因为使用该命令只启动了Hive服务,但是并没有对外暴露访问端口,也就是如果想操作Hive只能在该服务器上使用命令进行操作,不能被外部访问到。 那么该如何解决该问题呢? 本篇将通过相应配置,使得通过JDBC方式来访问Hive。 ### 一、通过HiveServer2访问Hive #### 1.1 HiveServer2介绍 + 其它语言访问`hive`主要是通过`hiveserver2`服务 + `HiveServer2`是一种能使客户端执行Hive查询的服务。 + `HiveServer2`可以支持对`HiveServer2`的嵌入式和远程访问,支持多客户端并发和身份认证。旨在为开放API客户端(如JDBC和ODBC)提供更好的支持。 #### 1.2 Hive连接过程 ![06.使用JDBC方式访问Hive01.jpg](https://lilinchao.com/usr/uploads/2021/12/791497971.jpg) **说明** + **metadata :**hive元数据,即hive定义的表名,字段名,类型,分区,用户这些数据。一般存储关系型数据库mysql中,在测试阶段也可以用hive内置Derby数据库。 + **metastore :**hivestore服务端。主要提供将DDL,DML等语句转换为MapReduce,提交到hdfs中。 + **hiveserver2:**hive服务端。提供hive服务。客户端可以通过beeline,jdbc(即用java代码链接)等多种方式链接到hive。 + **beeline:**hive客户端链接到hive的一个工具。可以理解成mysql的客户端。如:navite cat 等。 **连接过程** + 启动一个hive服务端默认端口为:10000,可以通过beeline,jdbc,odbc的方式链接到hive; + `hiveserver2`启动的时候会先检查有没有配置`hive.metastore.uris`,如果没有会先启动一个`metastore`服务,然后在启动`hiveserver2`; + 如果有配置`hive.metastore.uris`,会连接到远程的`metastore`服务; + 最后通过`metastore`再去获取`mysql`中hive元数据`metadata` 。 ### 二、配置 **2.1 修改配置文件`hive-site.xml`** ```bash [hadoop@hadoop001 conf]$ pwd /opt/software/hive/conf [hadoop@hadoop001 conf]$ vim hive-site.xml ``` + 增加如下内容 ```xml
hive.metastore.uris
thrift://hadoop001:9083
hive.server2.thrift.bind.host
hadoop001
hive.server2.thrift.port
10000
``` **2.2 启动元数据服务** ```bash #前台进程(不能关闭) [hadoop@hadoop001 hive]$ bin/hive --service metastore #后台启动 [hadoop@hadoop001 hive]$ nohup hive --service metastore 2>&1 & ``` + nohup: 放在命令开头,表示不挂起,也就是关闭终端进程也继续保持运行状态 + 2>&1 : 表示将错误重定向到标准输出上 + &: 放在命令结尾,表示后台运行 > 一般会组合使用: nohup [xxx 命令操作]> file 2>&1 &,表示将 xxx 命令运行的结 果输出到 file 中,并保持命令启动的进程在后台运行。 注意:当我们启动完成以后会出现如下异常信息 ![06.使用JDBC方式访问Hive02.jpg](https://lilinchao.com/usr/uploads/2021/12/1752241833.jpg) 因为使用的是MySQL版本是8.0,数据库驱动`com.mysql.jdbc.Driver`已经被弃用了、应当使用新的驱动`com.mysql.cj.jdbc.Driver` + 修改配置文件`hive-site.xml` ```xml
javax.jdo.option.ConnectionDriverName
com.mysql.cj.jdbc.Driver
``` 将之前的连接驱动换成`com.mysql.cj.jdbc.Driver`后重新启动metastore即可。 **如果不先启动元数据服务直接启动其他服务会报错:拒绝连接。** **2.3 开启hiveserver2** ```bash #前台进程(不能关闭) [hadoop@hadoop001 hive]$ bin/hive --service hiveserver2 #后台启动 [hadoop@hadoop001 hive]$ nohup hive --service hiveserver2 2>&1 & ``` 等到打印如下信息代表执行结束 ![06.使用JDBC方式访问Hive03.jpg](https://lilinchao.com/usr/uploads/2021/12/1172488141.jpg) **2.4 启动 beeline 客户端** ```bash [hadoop@hadoop001 hive]$ bin/beeline -u jdbc:hive2://hadoop001:10000 -n hadoop(主机名称) ``` 注意:连接命令执行后会出现如下异常 ![06.使用JDBC方式访问Hive04.jpg](https://lilinchao.com/usr/uploads/2021/12/3657051796.jpg) 原因:hiveserver2增加了权限控制,需要在hadoop的配置文件中进行修改。 + 修改`hadoop`配置文件`core-site.xml` ```bash [hadoop@hadoop001 hadoop]$ pwd /opt/software/hadoop-3.2.1/etc/hadoop [hadoop@hadoop001 hadoop]$ vim core-site.xml ``` 添加如下内容 ```xml
hadoop.proxyuser.hadoop.hosts
*
hadoop.proxyuser.hadoop.groups
*
``` `hadoop.proxyuser.xxx.hosts`和`hadoop.proxyuser.xxx.groups`命令中的第二个`xxx`是连接beeline的用户,如果你的连接用户不是`Hadoop`注意替换。 + 如果启动过程中报如下错误 ![06.使用JDBC方式访问Hive06.jpg](https://lilinchao.com/usr/uploads/2021/12/2090195961.jpg) + 修改方法:在`hive-site.xml`文件中增加如下内容 ```xml
hive.server2.active.passive.ha.enable
true
hive.server2.active.passive.ha.registry.namespace
hs2ActivePassiveHA
``` + 添加完成后重启Hadoop ```bash [hadoop@hadoop001 hive]$ stop-all.sh [hadoop@hadoop001 hive]$ start-all.sh ``` 重启完成后在执行beeline 客户端连接命令 ![06.使用JDBC方式访问Hive05.jpg](https://lilinchao.com/usr/uploads/2021/12/2711757379.jpg) *附参考文章链接地址:* *https://blog.csdn.net/zjh_746140129/article/details/82812664* *https://www.jianshu.com/p/b77849abc416*
标签:
Hadoop
,
Hive
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/1702.html
上一篇
05.Hive元数据配置到MySQL
下一篇
07.Hive常用交互命令和属性配置
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
排序
SpringCloud
Flink
Java
Http
高并发
Spark
CentOS
MySQL
正则表达式
SpringBoot
Spark Streaming
Sentinel
Yarn
FileBeat
Docker
nginx
Nacos
Filter
gorm
持有对象
Spring
MyBatis-Plus
Scala
Map
序列化和反序列化
Shiro
人工智能
Spark RDD
Java阻塞队列
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞