[[IT知识]] 如何通过JDBC实现远程访问Hive:全面解析与实战指南

[复制链接]
查看: 250|回复: 0
发表于 2025-1-19 22:44:19 | 显示全部楼层 | 阅读模式
易博V9下载

如何通过JDBC实现远程访问Hive:全面解析与实战指南

[TOC]

前言

目前通过执行

  1. bin/hive
复制代码
在服务端启动Hive所遇到的问题:

  • 因为使用该命令只启动了Hive服务,但是并没有对外暴露访问端口,也就是如果想操作Hive只能在该服务器上使用命令进行操作,不能被外部访问到。

那么该如何解决该问题呢?

本篇将通过相应配置,使得通过JDBC方式来访问Hive。

一、通过HiveServer2访问Hive

1.1 HiveServer2介绍

  • 其它语言访问
    1. hive
    复制代码
    主要是通过
    1. hiveserver2
    复制代码
    服务
    1. HiveServer2
    复制代码
    是一种能使客户端执行Hive查询的服务。
    1. HiveServer2
    复制代码
    可以支持对
    1. HiveServer2
    复制代码
    的嵌入式和远程访问,支持多客户端并发和身份认证。旨在为开放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;
    1. hiveserver2
    复制代码
    启动的时候会先检查有没有配置
    1. hive.metastore.uris
    复制代码
    ,如果没有会先启动一个
    1. metastore
    复制代码
    服务,然后在启动
    1. hiveserver2
    复制代码
  • 如果有配置
    1. hive.metastore.uris
    复制代码
    ,会连接到远程的
    1. metastore
    复制代码
    服务;
  • 最后通过
    1. metastore
    复制代码
    再去获取
    1. mysql
    复制代码
    中hive元数据
    1. metadata
    复制代码

二、配置

2.1 修改配置文件
  1. hive-site.xml
复制代码

  1. [hadoop@hadoop001 conf]$ pwd
  2. /opt/software/hive/conf
  3. [hadoop@hadoop001 conf]$ vim hive-site.xml
复制代码

+ 增加如下内容

  1. <!-- 指定存储元数据要连接的地址 -->
  2. <property>
  3. <name>hive.metastore.uris</name>
  4. <value>thrift://hadoop001:9083</value>
  5. </property>
  6. <!-- 指定 hiveserver2 连接的 host -->
  7. <property>
  8. <name>hive.server2.thrift.bind.host</name>
  9. <value>hadoop001</value>
  10. </property>
  11. <!-- 指定 hiveserver2 连接的端口号 -->
  12. <property>
  13. <name>hive.server2.thrift.port</name>
  14. <value>10000</value>
  15. </property>
复制代码

2.2 启动元数据服务

  1. #前台进程(不能关闭)
  2. [hadoop@hadoop001 hive]$ bin/hive --service metastore
  3. #后台启动
  4. [hadoop@hadoop001 hive]$ nohup hive --service metastore 2>;&1 &
复制代码

+ nohup: 放在命令开头,表示不挂起,也就是关闭终端进程也继续保持运行状态

+ 2>;&1 : 表示将错误重定向到标准输出上

+ &: 放在命令结尾,表示后台运行

一般会组合使用: nohup [xxx 命令操作]>; file 2>;&1 &,表示将 xxx 命令运行的结果输出到 file 中,并保持命令启动的进程在后台运行。

注意:当我们启动完成以后会出现如下异常信息

因为使用的是MySQL版本是8.0,数据库驱动

  1. com.mysql.jdbc.Driver
复制代码
已经被弃用了、应当使用新的驱动
  1. com.mysql.cj.jdbc.Driver
复制代码

+ 修改配置文件

  1. hive-site.xml
复制代码

  1. <!-- jdbc 连接的 Driver-->
  2. <property>
  3. <name>javax.jdo.option.ConnectionDriverName</name>
  4. <value>com.mysql.cj.jdbc.Driver</value>
  5. </property>
复制代码

将之前的连接驱动换成

  1. com.mysql.cj.jdbc.Driver
复制代码
后重新启动metastore即可。

如果不先启动元数据服务直接启动其他服务会报错:拒绝连接。

2.3 开启hiveserver2

  1. #前台进程(不能关闭)
  2. [hadoop@hadoop001 hive]$ bin/hive --service hiveserver2
  3. #后台启动
  4. [hadoop@hadoop001 hive]$ nohup hive --service hiveserver2 2>;&1 &
复制代码

等到打印如下信息代表执行结束

2.4 启动 beeline 客户端

  1. [hadoop@hadoop001 hive]$ bin/beeline -u jdbc:hive2://hadoop001:10000 -n hadoop(主机名称)
复制代码

注意:连接命令执行后会出现如下异常

原因:

  1. hiveserver2
复制代码
增加了权限控制,需要在
  1. hadoop
复制代码
的配置文件中进行修改。

+ 修改

  1. hadoop
复制代码
配置文件
  1. core-site.xml
复制代码

  1. [hadoop@hadoop001 hadoop]$ pwd
  2. /opt/software/hadoop-3.2.1/etc/hadoop
  3. [hadoop@hadoop001 hadoop]$ vim core-site.xml
复制代码

添加如下内容

  1. <property>
  2. <name>hadoop.proxyuser.hadoop.hosts</name>
  3. <value>*</value>
  4. </property>
  5. <property>
  6. <name>hadoop.proxyuser.hadoop.groups</name>
  7. <value>*</value>
  8. </property>
复制代码

  1. hadoop.proxyuser.xxx.hosts
复制代码
  1. hadoop.proxyuser.xxx.groups
复制代码
命令中的第二个
  1. xxx
复制代码
是连接beeline的用户,如果你的连接用户不是
  1. Hadoop
复制代码
注意替换

+ 如果启动过程中报如下错误

+ 修改方法:在

  1. hive-site.xml
复制代码
文件中增加如下内容

  1. <property>
  2. <name>hive.server2.active.passive.ha.enable</name>
  3. <value>true</value>
  4. </property>
  5. <property>
  6. <name>hive.server2.active.passive.ha.registry.namespace</name>
  7. <value>hs2ActivePassiveHA</value>
  8. </property>
复制代码

+ 添加完成后重启Hadoop

  1. [hadoop@hadoop001 hive]$ stop-all.sh
  2. [hadoop@hadoop001 hive]$ start-all.sh
复制代码

重启完成后在执行beeline 客户端连接命令

易博软件介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

 
 
QQ在线客服
QQ技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫
weixin

QQ|小黑屋|Archiver|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表