如何通过JDBC实现远程访问Hive:全面解析与实战指南
[TOC]
前言
目前通过执行 在服务端启动Hive所遇到的问题:
- 因为使用该命令只启动了Hive服务,但是并没有对外暴露访问端口,也就是如果想操作Hive只能在该服务器上使用命令进行操作,不能被外部访问到。
那么该如何解决该问题呢?
本篇将通过相应配置,使得通过JDBC方式来访问Hive。
一、通过HiveServer2访问Hive
1.1 HiveServer2介绍
- 其它语言访问主要是通过服务
- 是一种能使客户端执行Hive查询的服务。
- 可以支持对的嵌入式和远程访问,支持多客户端并发和身份认证。旨在为开放API客户端(如JDBC和ODBC)提供更好的支持。
1.2 Hive连接过程
说明
- 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;
- 启动的时候会先检查有没有配置,如果没有会先启动一个服务,然后在启动;
- 如果有配置,会连接到远程的服务;
- 最后通过再去获取中hive元数据。
二、配置
2.1 修改配置文件
-
- [hadoop@hadoop001 conf]$ pwd
- /opt/software/hive/conf
- [hadoop@hadoop001 conf]$ vim hive-site.xml
复制代码
+ 增加如下内容
-
- <!-- 指定存储元数据要连接的地址 -->
- <property>
- <name>hive.metastore.uris</name>
- <value>thrift://hadoop001:9083</value>
- </property>
- <!-- 指定 hiveserver2 连接的 host -->
- <property>
- <name>hive.server2.thrift.bind.host</name>
- <value>hadoop001</value>
- </property>
- <!-- 指定 hiveserver2 连接的端口号 -->
- <property>
- <name>hive.server2.thrift.port</name>
- <value>10000</value>
- </property>
复制代码
2.2 启动元数据服务
-
- #前台进程(不能关闭)
- [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 中,并保持命令启动的进程在后台运行。
注意:当我们启动完成以后会出现如下异常信息
因为使用的是MySQL版本是8.0,数据库驱动 已经被弃用了、应当使用新的驱动
+ 修改配置文件
-
- <!-- jdbc 连接的 Driver-->
- <property>
- <name>javax.jdo.option.ConnectionDriverName</name>
- <value>com.mysql.cj.jdbc.Driver</value>
- </property>
复制代码
将之前的连接驱动换成 后重新启动metastore即可。
如果不先启动元数据服务直接启动其他服务会报错:拒绝连接。
2.3 开启hiveserver2
-
- #前台进程(不能关闭)
- [hadoop@hadoop001 hive]$ bin/hive --service hiveserver2
- #后台启动
- [hadoop@hadoop001 hive]$ nohup hive --service hiveserver2 2>;&1 &
复制代码
等到打印如下信息代表执行结束
2.4 启动 beeline 客户端
-
- [hadoop@hadoop001 hive]$ bin/beeline -u jdbc:hive2://hadoop001:10000 -n hadoop(主机名称)
复制代码
注意:连接命令执行后会出现如下异常
原因: 增加了权限控制,需要在的配置文件中进行修改。
+ 修改 配置文件
-
- [hadoop@hadoop001 hadoop]$ pwd
- /opt/software/hadoop-3.2.1/etc/hadoop
- [hadoop@hadoop001 hadoop]$ vim core-site.xml
复制代码
添加如下内容
-
- <property>
- <name>hadoop.proxyuser.hadoop.hosts</name>
- <value>*</value>
- </property>
- <property>
- <name>hadoop.proxyuser.hadoop.groups</name>
- <value>*</value>
- </property>
复制代码
- hadoop.proxyuser.xxx.hosts
复制代码 和- hadoop.proxyuser.xxx.groups
复制代码 命令中的第二个是连接beeline的用户,如果你的连接用户不是注意替换。
+ 如果启动过程中报如下错误
+ 修改方法:在 文件中增加如下内容
-
- <property>
- <name>hive.server2.active.passive.ha.enable</name>
- <value>true</value>
- </property>
- <property>
- <name>hive.server2.active.passive.ha.registry.namespace</name>
- <value>hs2ActivePassiveHA</value>
- </property>
复制代码
+ 添加完成后重启Hadoop
-
- [hadoop@hadoop001 hive]$ stop-all.sh
- [hadoop@hadoop001 hive]$ start-all.sh
复制代码
重启完成后在执行beeline 客户端连接命令
|