李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
06.使用JDBC方式访问Hive
Leefs
2021-12-02 AM
2006℃
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://lilinchao.com/archives/1702.html
上一篇
05.Hive元数据配置到MySQL
下一篇
07.Hive常用交互命令和属性配置
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
JavaWEB项目搭建
链表
LeetCode刷题
哈希表
高并发
FastDFS
SpringCloudAlibaba
Elasticsearch
JavaWeb
Spark Streaming
Hbase
随笔
Java阻塞队列
Beego
设计模式
RSA加解密
排序
nginx
Elastisearch
Ubuntu
MyBatis
Livy
字符串
Spark
gorm
Tomcat
Netty
MyBatis-Plus
Spark Core
查找
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭