单元2 Hive部署与应用
三种部署模式一次打通:内嵌 Derby、本地 MySQL 元数据、远程 HiveServer2 加 Tez 引擎
本单元学习目标 摘自课件“学习目标/Target”页
- 熟悉Beeline,能够运用Beeline提供的命令选项和交互式命令实现对Hive的连接与操作。
- 掌握Hive的部署,能够根据实际应用需求选择并部署不同模式的Hive环境。
- 掌握Hive On Tez,能够独立完成Tez的安装并将其配置为Hive的执行引擎。
- 了解使用DataGrip操作Hive的方法,能够使用DataGrip连接HiveServer2实现对Hive的访问与操作。
单元概述
“工欲善其事,必先利其器。”这句话强调,完成一项工作之前,应先准备好相应的工具。同样,要真正使用Hive完成数据仓库建设与数据分析任务,仅理解相关概念还远远不够,还需要搭建可运行的Hive环境,并掌握常用访问工具的使用方法。本单元将带领读者部署不同模式的Hive环境,并通过Beeline和DataGrip访问和操作Hive,为后续开展HiveQL编写、数据管理与数据分析奠定实践基础。
知识地图
本单元知识地图
学完本单元,你应该能回答
- 内嵌、本地、远程三种模式,差别到底在元数据存哪里?
- hive-site.xml 里的关键参数分别控制什么?
- 为什么生产环境要用 HiveServer2 + Beeline / DataGrip?
- Hive on Tez 相比 MapReduce 快在哪里?
知识链位置
核心知识 点击标题右侧勾选框可标记“已掌握”,进度会保存在本机浏览器
认识Beeline
熟悉Beeline,能够运用Beeline提供的命令选项和交互式命令实现对Hive的连接与操作。
在部署Hive之前,为便于后续验证部署效果,将通过Hive自带的客户端工具Beeline进行连接测试。因此,在介绍Hive部署过程前,先对Beeline的基本概念与使用方式进行讲解。
在Hive的体系架构中,客户端是用户提交查询语句并获取执行结果的直接交互入口。自Hive 2.0起,Beeline逐渐取代旧版Hive CLI,成为官方推荐的标准命令行客户端工具。在Hive 4.1.0中,Beeline已完全取代Hive CLI。
Beeline基于JDBC协议构建,专为连接HiveServer2设计,支持远程访问、身份认证和会话管理等特性,是使用Hive进行交互式查询的主要通道。与Hive CLI不同,Beeline并不会在本地进程中直接启动Hive引擎,而是作为一个轻量级的远程客户端运行。用户在Beeline中编写并提交HiveQL语句后,相关请求会被发送至HiveServer2。
用户可以通过Hive安装目录下的bin目录中的脚本文件beeline启动Beeline。Beeline提供了丰富的命令选项和交互式命令,用于灵活配置连接行为及执行管理操作,具体介绍如下。
交互式命令
命令
选项
1. 命令选项
命令选项在执行脚本文件beeline启动Beeline时使用,用于指定连接地址、认证方式、初始化参数等信息,常用命令选项如表。
| 命令选项 | 语法格式 | 描述 |
|---|---|---|
| -u | -u url | 用于指定连接HiveServer2的JDBC连接地址 |
| -n | -n user | 用于指定连接HiveServer2时的认证用户。在未启用安全认证机制时,可填写任意用户名,但建议填写具备HDFS访问权限的有效用户,以保障查询任务在执行过程中拥有对底层数据的读写能力。若未指定认证用户,则默认使用用户anonymous。 |
| 命令选项 | 语法格式 | 描述 |
|---|---|---|
| -p | -p pwd | 用于指定认证用户对应的密码。在未启用安全认证机制时,认证用户的密码为空 |
| -c | -c name | 用于通过名称为beeline-site.xml的配置文件加载预定义的JDBC连接地址 |
| --hiveconf | --hiveconf property=value | 用于在当前会话中动态设置Hive配置参数,以覆盖配置文件hive-site.xml中同名的配置参数,适用于临时调整配置,无需修改配置文件本身。动态设置的作用范围仅限于当前客户端会话,在会话断开后自动失效 |
| 命令选项 | 语法格式 | 描述 |
|---|---|---|
| -e | -e query | 用于在启动Beeline时执行指定的单条HiveQL语句。执行完成后,Beeline自动退出,不进入交互界面 |
| -f | -f file_path | 用于在启动Beeline时执行指定Hive脚本文件中的所有HiveQL语句。执行完成后,Beeline自动退出,不进入交互界面。Hive脚本文件的扩展名通常为hql |
| -w | -w file_path | 用于从指定文件中读取认证用户的密码,避免使用-p输入密码时暴露明文密码 |
| 命令选项 | 语法格式 | 描述 |
|---|---|---|
| --outputformat | --outputformat=format | 用于控制查询结果的输出格式,支持的格式如下。 table:表格形式显示(默认) vertical:垂直列出每条记录的每个字段,适用于字段较多或内容较长的结果 csv2:CSV格式显示 tsv2:TSV格式显示 json:JSON格式显示 |
| --showHeader | --showHeader=boolean | 用于控制查询结果中是否显示表头。true(默认)表示显示;false表示隐藏 |
| 命令选项 | 语法格式 | 描述 |
|---|---|---|
| --truncateTable | --truncateTable=boolean | 用于控制查询结果中字段内容过宽时,是否截断显示。true表示截断;false(默认)表示不截断 |
| --incremental | --incremental=boolean | 用于控制查询结果是否以流式方式边查询边显示结果,以降低客户端内存使用。true表示查询结果逐行显示,不会一次性加载所有数据到内存,适用于大结果集;false(默认)表示等待所有结果查询完成并缓存在内存后一次性展示,适用于小结果集 |
| 命令选项 | 语法格式 | 描述 |
|---|---|---|
| --silent | --silent=boolean | 用于控制是否启用静默模式。true表示启用静默模式,仅输出查询结果,不包含额外日志信息或提示内容;false(默认)表示关闭静默模式,在输出查询结果的同时输出额外日志信息或提示内容 |
| --verbose | --verbose=boolean | 用于控制查询结果是否显示详细的调试信息。true表示显示;false(默认)表示不显示 |
| --help | --help | 用于显示帮助信息。执行完成后,Beeline自动退出,不进入交互界面 |
<property>
<name>beeline.hs2.jdbc.url.name</name>
<value>url</value>
</property>配置文件beeline-site.xml需用户手动创建,并存放于Hive安装目录的conf目录中,该文件的基本内容如下。
基本内容
用于指定HiveServer2对应的JDBC连接地址
用于定义连接的唯一标识名称
2. 交互式命令
互式命令在Beeline成功启动后于交互界面中使用,用于连接管理、元数据查询、执行脚本等操作,常用交互式命令如表。
| 交互式命令 | 语法格式 | 描述 |
|---|---|---|
| !connect | !connect url | 用于指定连接 HiveServer2的JDBC连接地址 |
| !close | !close | 用于关闭当前连接 |
| !closeall | !closeall | 用于关闭所有连接 |
| 交互式命令 | 语法格式 | 描述 |
|---|---|---|
| !list | !list | 用于查看所有连接,并显示每个连接的编号 |
| !go | !go id | 用于通过编号切换至已建立的某个连接 |
| !quit | !quit | 用于退出Beeline |
| !run | !run file_path | 与命令选项-f的作用相同 |
| !script | !script file_path | 用于开启录制,将当前会话后续输入的所有命令都保存到指定文件中。若要停止录制,则直接执行!script即可 |
| 交互式命令 | 语法格式 | 描述 |
|---|---|---|
| !set | !set property=value | 与命令选项--hiveconf的作用相同 |
| !sh | !sh cmd | 用于在Beeline中直接执行Shell命令 |
| !history | !history | 用于查看历史命令 |
| !outputformat | !outputformat format | 与命令选项--outputformat的作用相同 |
| !tables | !tables | 用于查看当前数据库中的所有表 |
| !describe | !describe table | 用于查看指定表的结构 |
| !help | !help | 用于显示帮助信息 |
在启动Beeline时,通过命令选项-u直接指定HiveServer2的JDBC连接地址。
先启动Beeline,进入交互界面后,再通过交互式命令!connect指定HiveServer2的JDBC连接地址。
通过学习Beeline的命令选项与交互式命令,可以总结出使用Beeline连接HiveServer2的两种方式。
jdbc:hive2://host:port[/database]关于HiveServer2连接地址的格式如下。
具体格式
用于指定HiveServer2所在服务器的IP地址或主机名
用于指定HiveServer2的端口号
用于指定当前会话默认使用的数据库
任务:基于内嵌模式部署Hive
2.2
用 Beeline 连 HiveServer2,并执行一条 SQL。
beeline -u "jdbc:hive2://hadoop1:10000" -n hadoop -p 123456
-- 进去以后可以执行交互命令
!connect jdbc:hive2://hadoop1:10000 -- 会话内切换连接
!tables -- 列出表
SELECT current_database(); -- 当前库💡 ! 开头是 Beeline 自己的命令,不是 SQL。
📄 展开课件原文(第 7–24 页,共 18 页)
基于内嵌模式部署Hive
掌握Hive的部署,能够完成基于内嵌模式部署Hive的操作。
内嵌模式是最简单的Hive部署方式,其核心特征是元数据存储与服务组件高度集成。在内嵌模式下,无须启动HiveServer2。同时,Metastore以嵌入方式运行,并使用嵌入式Derby数据库存储元数据。
内嵌模式主要适用于本地单用户开发与功能验证等轻量级场景,不适用于多用户协作环境。其根本原因在于,嵌入式Derby数据库仅支持单会话访问,无法满足多个Hive客户端并发连接的需求,也不具备元数据服务的共享能力。
接下来,以虚拟机Node03为例,演示如何基于内嵌模式部署Hive,具体操作步骤如下。
▸ 课件步骤 01
启动Hadoop集群
在虚拟机Node01执行下列命令启动Hadoop集群。
start-dfs.sh
start-yarn.sh启动HDFS集群
启动YARN集群
▸ 课件步骤 02
上传Hive安装包
将Hive安装包apache-hive-4.1.0-bin.tar.gz上传到虚拟机Node03的/export/software目录中。
▸ 课件步骤 03
安装Hive
将Hive安装至虚拟机Node03的/export/servers目录,具体命令如下。
tar -zxvf /export/software/apache-hive-4.1.0-bin.tar.gz -C /export/servers/▸ 课件步骤 04
重命名目录
将Hive的安装目录重命名为hive-4.1.0,具体命令如下。
mv /export/servers/apache-hive-4.1.0-bin/ /export/servers/hive-4.1.0▸ 课件步骤 05
配置Hive
在Hive安装目录的conf目录下编辑Hive配置文件hive-site.xml,具体命令如下。
vi /export/servers/hive-4.1.0/conf/hive-site.xml▸ 课件步骤 05
在配置文件hive-site.xml中添加如下内容。
点击查看
▸ 课件步骤 06
配置Hive系统环境变量
为了便于Hive的管理和使用,需要在虚拟机Node03中配置Hive系统环境变量。在虚拟机Node03中编辑系统环境变量文件profile,具体命令如下。
vi /etc/profile上述命令执行完成后,在系统环境变量文件profile的末尾添加如下内容。
export HIVE_HOME=/export/servers/hive-4.1.0
export PATH=$HIVE_HOME/bin:$PATH▸ 课件步骤 07
初始化系统环境变量
初始化虚拟机的系统环境变量,使系统环境变量文件profile中添加的内容生效,在虚拟机Node03执行如下命令。
source /etc/profile▸ 课件步骤 08
初始化Hive元数据
在嵌入式Derby数据库中完成Hive元数据的初始化操作,构建Hive运行所需的元数据表结构,具体命令如下。
schematool -dbType derby -initSchema上述命令执行完成后,若输出“Initialization script completed”,则说明已在嵌入式Derby数据库中成功完成Hive元数据的初始化。
▸ 课件步骤 09
操作Hive
在内嵌模式下,当用户通过Beeline连接HiveServer2操作Hive时,由于HiveServer2并非作为独立JVM进程运行,而是以嵌入方式与Beeline共处同一JVM进程,所以无须在连接地址中指定主机名和端口号,相应地也无法指定默认访问的数据库。
通过Beeline连接HiveServer2,在虚拟机Node03执行如下命令。
beeline -u jdbc:hive2:// -n root上述命令执行完成后,会在当前目录下生成一个名为derby.log的文件,主要用于记录嵌入式Derby数据库的运行过程、错误信息和调试日志。
▸ 课件步骤 09
当Beeline成功连接HiveServer2后,将自动进入交互界面,如图。
任务:基于本地模式部署Hive
2.3

📄 展开课件原文(第 25–38 页,共 14 页)
基于本地模式部署Hive
掌握Hive的部署,能够完成基于本地模式部署Hive的操作。
本地模式与内嵌模式在部署方式上具有一定相似性,适用于开发与测试环境。但相较于内嵌模式,本地模式的核心优势在于实现了元数据管理的独立化。在本地模式下,元数据不再保存在嵌入式Derby数据库中,而是迁移至外部关系型数据库(如MySQL、PostgreSQL等),从而摆脱了单会话访问的限制,支持多用户并发访问元数据服务。
在本地模式下,由于Hive涉及多会话访问,为实现统一的会话管理,通常将HiveServer2作为独立的JVM进程启动,而Metastore仍然以嵌入方式运行。
HiveServer2支持前台启动和后台启动两种方式,具体介绍如下。
后台
启动
前台
1.前台启动
前台启动是指HiveServer2在当前终端前台运行,会占用对应的终端窗口,且运行日志会实时输出到对应的终端中。若需终止HiveServer2,则用户可通过“Ctrl + C ”组合键或关闭终端窗口实现。
前台启动HiveServer2的命令如下。
hive --service hiveserver22.后台启动
后台启动是指HiveServer2作为后台进程运行(进程名为RunJar),不占用终端窗口,且在关闭终端后依然保持运行。在后台启动下,运行日志不会实时输出到终端。当HiveServer2启动完成后会返回其对应的进程ID,用户可根据该ID使用kill命令手动终止HiveServer2 的进程。
后台启动HiveServer2的命令如下。
hive --service hiveserver2 &在实际使用中,后台启动HiveServer2时通常需配合日志重定向,将日志输出至指定文件,以便持久化存储和后续问题排查,示例命令如下。
nohup hive --service hiveserver2 > /export/data/hiveserver2.log 2>&1 &需要注意的是,日志重定向时,若指定的文件不存在,系统会自动创建,但文件所在的目录必须事先创建,否则命令将执行失败。
本任务演示基于本地模式部署Hive时,将采用MySQL存储Hive元数据,并沿用前文内嵌模式下已安装的Hive。接下来,将以虚拟机Node03为例,演示MySQL 8.4的安装及Hive本地模式的部署,具体操作如下。
▸ 课件步骤 01
安装MySQL
在虚拟机Node03中在线安装MySQL,具体操作如下。
(1)为确保系统依赖库为最新版本,避免后续安装MySQL时出现兼容性问题,需将系统中已安装的所有软件包更新至最新版本,具体命令如下。
dnf update -y▸ 课件步骤 01
(2)安装适用于CentOS Stream 9的MySQL 8.4社区版仓库配置,具体命令如下。
dnf install -y https://dev.mysql.com/get/mysql84-community-release-el9-2.noarch.rpm▸ 课件步骤 01
(3)安装MySQL社区版服务器,具体命令如下。
dnf install -y mysql-community-server▸ 课件步骤 01
(4)启动MySQL服务并设置开机自动启动,具体命令如下。
systemctl enable --now mysqld▸ 课件步骤 01
(5)获取MySQL为自带的root用户生成的初始密码,具体命令如下。
grep 'temporary password' /var/log/mysqld.log▸ 课件步骤 01
上述命令执行完成后的效果如图。
▸ 课件步骤 01
(6)运行MySQL的安全向导,完成安全配置的初始化,具体命令如下。
mysql_secure_installation
▸ 课件步骤 01
上述命令执行完成后,会依次引导用户完成以下安全配置。
Enter password for user root:
New password:Re-enter new password:
再次输入新密码以确认。
输入root用户的初始密码。
输入root用户的新密码。
Change the password for root:输入y或Y表示重新修改刚设置的新密码,输入其他任意内容则表示保留设置的新密码。
▸ 课件步骤 01
Remove anonymous users:
Disallow root login remotely:
Remove test database and access to it:输入y或Y表示删除默认创建的test数据库,输入其他任意内容则表示保留。
输入y或Y表示删除匿名用户,输入其他任意内容则表示保留匿名用户。
输入y或Y表示禁止root用户远程登录,输入其他任意内容则表示允许。
Reload privilege tables now:输入y或Y表示重新加载权限表以使上述更改生效,输入其他任意内容则表示暂不生效。
▸ 课件步骤 01
上述操作完成后,读者可通过root用户登录MySQL,验证密码是否修改成功,具体命令如下。
mysql -u root -p上述命令执行完成后,在出现提示信息“Enter password:”时,输入之前设置的新密码。若成功进入MySQL命令行界面,则说明密码已修改成功。
▸ 课件步骤 01
(7)为了支持通过远程方式登录MySQL,这里在MySQL中创建一个名为itcast的远程用户并为其分配权限。在MySQL命令行界面执行下列命令。
CREATE USER 'itcast'@'%' IDENTIFIED BY 'Itcast@2025';
GRANT ALL PRIVILEGES ON *.* TO 'itcast'@'%' WITH GRANT OPTION;FLUSH PRIVILEGES;创建用户itcast,密码为Itcast@2025,允许在任意主机访问
授予用户itcast对所有数据库和表的全部权限,并允许其授权给其他用户
刷新权限,使配置立即生效
▸ 课件步骤 02
启动Hadoop集群
在虚拟机Node01执行下列命令启动Hadoop集群。
start-dfs.sh
start-yarn.sh启动YARN集群
启动HDFS集群
▸ 课件步骤 03
配置Hive
将已创建的Hive配置文件hive-site.xml重命名为hive-site-derby.xml,使内嵌模式下的Hive配置不再生效,具体命令如下。
mv /export/servers/hive-4.1.0/conf/hive-site.xml \/export/servers/hive-4.1.0/conf/hive-site-derby.xml
▸ 课件步骤 03
上述命令执行完成后,在Hive安装目录的conf目录下再次编辑Hive配置文件hive-site.xml,并添加如下内容。
点击查看
▸ 课件步骤 04
添加MySQL JDBC驱动
将mysql-connector-j-8.4.0.jar添加到Hive安装目录的lib目录中,使Hive能够通过JDBC协议连接MySQL。
▸ 课件步骤 05
初始化Hive元数据
在MySQL的hive数据库中完成Hive元数据的初始化操作,构建Hive运行所需的元数据表结构,具体命令如下。
schematool -dbType mysql -initSchema上述命令执行完成后,若输出“Initialization script completed”,则说明已在MySQL的hive数据库中成功完成Hive元数据的初始化。
▸ 课件步骤 06
启动HiveServer2
以后台启动的运行方式启动HiveServer2,并配置日志重定向,将HiveServer2的日志输出到/export/data目录下的hiveserver2_local.log文件中,具体命令如下。
nohup hive --service hiveserver2 > /export/data/hiveserver2_local.log 2>&1 &▸ 课件步骤 06
▸ 课件步骤 07
操作Hive
通过Beeline连接HiveServer2,在虚拟机Node03执行如下命令。
beeline -u jdbc:hive2://localhost:10000 -n root▸ 课件步骤 07
上述命令执行完成后,成功连接HiveServer2并进入交互界面的效果如图。
任务:基于远程模式部署Hive
2.4



📄 展开课件原文(第 39–67 页,共 29 页)
基于远程模式部署Hive
掌握Hive的部署,能够完成基于远程模式部署Hive的操作。
远程模式是生产环境中常见的Hive部署方式,其核心特征在于实现了服务组件的分离部署。在远程模式下,Hive的元数据仍然存储在外部关系型数据库中,但HiveServer2和Metastore均作为独立的JVM进程启动,并且部署在不同计算机上,从而实现组件解耦和资源隔离。
接下来介绍Metastore的启动方式。与HiveServer2类似,Metastore同样支持前台启动和后台启动两种方式,具体介绍如下。
(1)前台启动Metastore的命令如下。
hive --service metastore(2)后台启动Metastore的命令如下。
hive --service metastore &示例命令
在实际使用中,后台启动Metastore时同样通常需配合日志重定向,将日志输出至指定文件,以便持久化存储和后续问题排查。
nohup hive --service metastore > /export/data/metastore.log 2>&1 &本任务演示基于远程模式部署Hive时,将通过虚拟机Node02和Node03实现,其中虚拟机Node02将重新安装Hive并启动HiveServer2,用于对外提供查询服务;虚拟机Node03将沿用前文已安装的Hive并启动Metastore,用于对外提供元数据管理服务。
接下来,将演示如何基于远程模式部署Hive,具体操作如下。
▸ 课件步骤 01
启动Hadoop集群
在虚拟机Node01执行下列命令启动Hadoop集群。
start-dfs.sh
start-yarn.sh启动YARN集群
启动HDFS集群
▸ 课件步骤 02
在虚拟机Node03配置Hive
将已创建的Hive配置文件hive-site.xml重命名为hive-site-local.xml,使原有的Hive配置不再生效,在虚拟机Node03执行如下命令。
mv /export/servers/hive-4.1.0/conf/hive-site.xml \/export/servers/hive-4.1.0/conf/hive-site-local.xml
▸ 课件步骤 02
在Hive安装目录的conf目录下再次编辑Hive配置文件hive-site.xml,并添加如下内容。
点击查看
▸ 课件步骤 03
在虚拟机Node02安装Hive
将Hive安装包apache-hive-4.1.0-bin.tar.gz上传到虚拟机Node02的/export/software目录中。然后,将Hive安装至/export/servers目录,具体命令如下。
tar -zxvf /export/software/apache-hive-4.1.0-bin.tar.gz -C /export/servers/上述命令执行完成后,将Hive安装目录重命名为hive-4.1.0,具体命令如下。
mv /export/servers/apache-hive-4.1.0-bin/ /export/servers/hive-4.1.0▸ 课件步骤 04
在虚拟机Node02配置Hive系统环境变量
为了便于Hive的管理和使用,需要在虚拟机Node02中配置Hive系统环境变量。在虚拟机Node02中编辑系统环境变量文件profile,具体命令如下。
vi /etc/profile上述命令执行完成后,在系统环境变量文件profile的末尾添加如下内容。。
export HIVE_HOME=/export/servers/hive-4.1.0
export PATH=$HIVE_HOME/bin:$PATH初始化虚拟机Node02的系统环境变量,需要执行source /etc/profile
▸ 课件步骤 05
在虚拟机Node02配置Hive
在虚拟机Node02的Hive安装目录的conf目录下,编辑Hive配置文件hive-site.xml,具体命令如下。
vi /export/servers/hive-4.1.0/conf/hive-site.xml▸ 课件步骤 05
在配置文件hive-site.xml中添加如下内容。
▸ 课件步骤 06
初始化Hive元数据
在MySQL的remote数据库中完成Hive元数据的初始化操作,构建Hive运行所需的元数据表结构,在虚拟机Node03执行如下命令。
schematool -dbType mysql -initSchema上述命令执行完成后,若输出“Initialization script completed”,则说明已在MySQL的remote数据库中成功完成Hive元数据的初始化。
▸ 课件步骤 07
启动Metastore
在虚拟机Node03中,以后台启动的运行方式启动Metastore,并配置日志重定向,将Metastore的日志输出到/export/data目录下的metastore.log文件中,具体命令如下。
▸ 课件步骤 07
上述命令执行完成后的效果如图。
▸ 课件步骤 08
启动HiveServer2
在虚拟机Node02中,以后台启动的运行方式启动HiveServer2,并配置日志重定向,将Metastore的日志输出到/export/data目录下的hiveserver2.log文件中,具体命令如下。
nohup hive --service hiveserver2 > /export/data/hiveserver2.log 2>&1 &▸ 课件步骤 08
▸ 课件步骤 09
操作Hive
Hive客户端可在任意计算机中,通过远程连接HiveServer2操作Hive。这里为简化操作步骤并减少网络通信开销,将在虚拟机Node02中通过Beeline连接HiveServer2操作Hive。在虚拟机Node02执行如下命令。
beeline -u jdbc:hive2://node02:10001 -n root▸ 课件步骤 09
上述命令执行完成后,成功连接HiveServer2并进入交互界面的效果如图。
任务:配置Hive On Tez
2.5



📄 展开课件原文(第 68–88 页,共 21 页)
配置Hive On Tez
掌握Hive On Tez,能够独立完成Tez的安装并将其配置为Hive的执行引擎。
Hive On Tez指的是将Tez作为Hive的执行引擎。Tez是Hadoop生态系统中的高性能分布式计算框架,其核心设计理念是提供一个通用的有向无环图(Directed Acyclic Graph,DAG)执行引擎,支持将复杂的数据处理任务表示为多个相互依赖的任务节点,实现整体协同执行。相比MapReduce,Tez在任务执行层面具有显著优势。它通过有向无环图模型以更细粒度和更高灵活性组织计算逻辑,在内存中进行任务间数据传输,显著降低磁盘和网络I/O的开销。Tez不仅大幅提升了任务执行效率,还提高了资源利用率,特别适用于复杂、多阶段的大数据分析任务。
在Hive 4.1.0之前,虽然官方推荐将执行引擎替换为Tez以显著提升查询性能,但默认执行引擎仍为MapReduce。自Hive 4.1.0起,默认执行引擎已更改为Tez。
当Hive使用Tez作为执行引擎时,需要在HiveServer2所在服务器安装Tez,以便将Hive客户端提交的HiveQL语句转换为有向无环图并提交至YARN集群运行。同时,为确保各NodeManager在执行Tez任务时能够访问所需依赖库,还必须将Tez的相关库上传到HDFS。
本书使用的Tez版本为0.10.5,以确保与Hive 4.1.0的兼容性。接下来,将以远程模式部署的Hive为例,演示Tez的安装,具体操作步骤如下。
▸ 课件步骤 01
启动Hadoop集群
在虚拟机Node01执行下列命令启动Hadoop集群。
start-dfs.sh
start-yarn.sh启动YARN集群
启动HDFS集群
▸ 课件步骤 02
上传Tez安装包
将Tez安装包apache-tez-0.10.5-bin.tar.gz上传到虚拟机Node02的/export/software目录中。
▸ 课件步骤 03
安装Tez
将Tez安装至虚拟机Node02的/export/servers目录,具体命令如下。
tar -zxvf /export/software/apache-tez-0.10.5-bin.tar.gz -C /export/servers/▸ 课件步骤 04
重命名目录
将Tez的安装目录重命名为tez-0.10.5,具体命令如下。
mv /export/servers/apache-tez-0.10.5-bin/ /export/servers/tez-0.10.5▸ 课件步骤 05
配置Tez系统环境变量
为了便于Tez的管理和使用,需要在虚拟机Node02中配置Tez系统环境变量。在虚拟机Node02中编辑系统环境变量文件profile,具体命令如下。
vi /etc/profile上述命令执行完成后,在系统环境变量文件profile的末尾添加如下内容。
export TEZ_HOME=/export/servers/tez-0.10.5
export HADOOP_CLASSPATH=$TEZ_HOME/*:$TEZ_HOME/lib/*:$HADOOP_CLASSPATH▸ 课件步骤 06
初始化系统环境变量
初始化虚拟机的系统环境变量,使系统环境变量文件profile中添加的内容生效,在虚拟机Node02执行如下命令。
▸ 课件步骤 07
在HDFS创建目录
在HDFS创建用于存放Tez相关库的目录/apps/tez,在虚拟机Node02执行如下命令。
hdfs dfs -mkdir -p /apps/tez
source /etc/profile▸ 课件步骤 08
上传Tez
在Tez安装目录的share目录中,包含一个名为tez.tar.gz的压缩归档文件,该文件整合了Tez所需的全部依赖库。当YARN集群在执行Tez任务时,会在启动ApplicationMaster和各个Container的NodeManager节点上,将压缩归档文件tez.tar.gz进行本地化并解压,以确保任务运行时能够访问所需的Tez库。
将压缩归档文件tez.tar.gz上传到HDFS的目录/apps/tez中,在虚拟机Node02执行如下命令。
hdfs dfs -put /export/servers/tez-0.10.5/share/tez.tar.gz /apps/tez▸ 课件步骤 09
修改Hive配置文件
在虚拟机Node02的/export/servers/hive-4.1.0/conf目录中,编辑Hive配置文件hive-site.xml,在该文件的<configuration>标签中添加如下配置。
<property>
<name>tez.lib.uris</name>
<value>hdfs://node01:8020/apps/tez/tez.tar.gz</value>
</property>配置压缩归档文件tez.tar.gz的路径
▸ 课件步骤 10
启动MetaStore
在虚拟机Node03中,以后台启动的运行方式启动Metastore,并配置日志重定向,将Metastore的日志输出到/export/data目录下的metastore.log文件中,具体命令如下。
nohup hive --service metastore > /export/data/metastore.log 2>&1 &若执行此步操作之前Metastore已启动,则需要关闭Metastore后重新启动。
▸ 课件步骤 11
启动HiveServer2
在虚拟机Node02中,以后台启动的运行方式启动HiveServer2,并配置日志重定向,将HiveServer2的日志输出到/export/data目录下的hiveserver2.log文件中,具体命令如下。
nohup hive --service hiveserver2 > /export/data/hiveserver2.log 2>&1 &若执行此步操作之前HiveServer2已启动,则需要关闭HiveServer2后重新启动。
▸ 课件步骤 12
测试执行引擎
在Hive的default数据库中新建表users并插入数据,具体步骤如下。
(1)在虚拟机Node02中通过Beeline连接HiveServer2操作Hive,具体命令如下。
beeline -u jdbc:hive2://node02:10001 -n root▸ 课件步骤 12
(2)在Hive的default数据库中新建表users,具体HiveQL语句如下。
CREATE TABLE IF NOT EXISTS users (user_id INT,
username STRING,
email STRING,
gender STRING,
age INT,
registration_date STRING
);▸ 课件步骤 12
(3)向表users插入数据,具体HiveQL语句如下。
INSERT INTO TABLE users VALUES(1,'zhangsan','zhangsan@example.com','male',25,'2025-01-15'),
(2,'lisi','lisi@example.com','female',30,'2025-02-20'),
(3,'wangwu','wangwu@example.com','male',28,'2025-03-05'),
(4,'zhaoliu','zhaoliu@example.com','female',22,'2025-04-18'),
(5,'qianqi','qianqi@example.com','male',35,'2025-05-22'),
(6,'sunba','sunba@example.com','female',27,'2025-06-30');▸ 课件步骤 12
上述命令执行完成后的效果如图。
任务:使用DataGrip操作Hive
2.6

📄 展开课件原文(第 89–108 页,共 20 页)
使用DataGrip操作Hive
了解使用DataGrip操作Hive的方法,能够使用DataGrip连接HiveServer2实现对Hive的访问与操作。
DataGrip是由JetBrains公司开发的一款专业的跨平台数据库管理工具,广泛用于SQL查询、数据库管理和数据分析等场景。它支持多种主流数据库系统,包括MySQL、Oracle、SQL Server等,同时也原生支持包括Hive、Clickhouse在内的大数据分析平台。
DataGrip拥有现代化的用户界面和丰富的功能集,为数据分析人员、数据库管理员以及开发者提供统一的操作环境,便于高效管理数据库对象、执行查询、可视化数据以及进行数据库建模与设计。
针对Hive,DataGrip提供了原生的JDBC连接支持,用户可直接通过DataGrip连接HiveServer2,便捷地访问和操作Hive中的数据。在可视化界面与强大功能的辅助下,显著提升了Hive的使用效率与体验。
本书使用DataGrip的版本为2025.1.3,演示如何使用DataGrip连接虚拟机Node02中启动的HiveServer2,从而实现对Hive中数据的访问与操作,操作步骤如下。
▸ 课件步骤 01
在DataGrip的主界面依次单击“文件”→“新建”→“数据源”→“Apache Hive”选项,打开“数据源和驱动程序”窗口新建连接,如图。
▸ 课件步骤 02
单击“下载”选项,下载Hive的驱动程序文件。
▸ 课件步骤 03
在“数据源和驱动程序”窗口配置HiveServer2的连接信息。首先,在“名称”输入框中设置连接名称为MyHive。接着,在“主机”输入框中设置HiveServer2绑定的IP地址为192.168.121.133。然后,在“端口”输入框中设置HiveServer2监听的端口为10001。最后,在“用户”输入框中设置用户为root。“数据源和驱动程序”窗口配置完成后的效果如图。
▸ 课件步骤 04
单击“架构”选项卡,并勾选其中的“所有架构”复选框,即可使当前创建的连接获取Hive中的所有数据库。否则,将默认仅连接到default数据库,如图。
▸ 课件步骤 05
单击“测试连接”选项,验证当前创建的连接是否能够成功连接至指定的HiveServer2,如图。
▸ 课件步骤 06
单击“确定”按钮以保存连接设置并返回DataGrip主界面。此时,将基于名为MyHive的连接配置,自动连接至虚拟机Node02中启动的HiveServer2,如图。
▸ 课件步骤 07
在名为console的SQL文件中输入查询表users所有数据的HiveQL语句并运行,如图。
AI助学
学完本单元后,读者已经初步了解Hive的部署方式、访问工具和执行引擎配置方法。然而,在实际部署和使用Hive时,仍可能遇到服务启动、客户端连接或任务执行等问题。此时,可借助AI分析报错信息和环境配置,帮助判断可能原因,并梳理排查思路。
AI
助
学
单元总结
本单元主要讲解了Hive部署与应用。首先,介绍了Hive客户端工具Beeline的基本概念与使用方法。接着,详细说明了基于不同模式部署Hive的方法,包括内嵌模式、本地模式和远程模式。然后,重点介绍了Hive On Tez的原理与配置方法。最后,介绍了使用DataGrip操作Hive的方法。通过本单元的学习,读者能够根据实际需求灵活选择并部署不同模式的Hive环境,掌握多种客户端工具的使用方法,为后续Hive数据仓库的构建与综合应用打下坚实基础。
单
元
总
结




📷 展开本知识点其余 2 张课件截图


📄 展开课件原文(第 109–121 页,共 13 页)
🧪 动手做一遍 部署完,用 6 步确认环境真的可用
预计用时约 15 分钟 · 每一步都给出可执行语句与预期结果,建议边看边在 Beeline / DataGrip 里敲一遍
本实例步骤
- 01 确认 Hadoop 起来了
- 02 确认元数据库能连上
- 03 确认 HDFS 仓库目录在
- 04 启动 HiveServer2 并连上
- 05 换成 Tez 引擎,跑一条 SQL 感受差别
- 06 用 DataGrip 图形化连一次
01确认 Hadoop 起来了
Hive 依赖 HDFS 存数据、依赖 YARN(或 Tez)跑作业,先看进程。
jps # 应看到 NameNode / DataNode / ResourceManager / NodeManager| 进程 |
|---|
| NameNode |
| DataNode |
| ResourceManager |
| NodeManager |
| Jps |
start-dfs.sh;少了 ResourceManager:start-yarn.sh。02确认元数据库能连上
Hive 的库表信息都在 MySQL 里,连不上元数据库,Hive 一定启动失败。
mysql -uhive -phive123456 -e "use hive; show tables;" | Tables_in_hive |
|---|
| BUCKETING_COLS |
| CDS |
| COLUMNS_V2 |
| DBS |
| TBLS |
| …(Hive 自动生成的元数据表) |
💡 登录报 Access denied 通常是 hive 账号密码或授权没做对;表很少则可能是 schematool -initSchema 没执行。
03确认 HDFS 仓库目录在
Hive 的表数据默认落在 /user/hive/warehouse 下。
hdfs dfs -ls /user/hive/warehouse| 权限 | 属主 | 路径 |
|---|---|---|
| drwxrwxrwt | hive | /user/hive/warehouse/demo.db |
| drwxrwxrwt | hive | /user/hive/warehouse/school.db |
hdfs dfs -mkdir -p /user/hive/warehouse && hdfs dfs -chmod g+w /user/hive/warehouse。04启动 HiveServer2 并连上
远程模式的核心服务,DataGrip、Beeline 都连它。
hiveserver2 & # 后台启动,默认端口 10000
beeline -u "jdbc:hive2://hadoop1:10000" -n hadoop| 提示 |
|---|
| Connected to: Apache Hive (version 4.1.0) |
| 0: jdbc:hive2://hadoop1:10000> |
💡 连不上先看 10000 端口:netstat -nltp | grep 10000;再翻日志 /export/servers/hive-4.1.0/logs/hive.log。
05换成 Tez 引擎,跑一条 SQL 感受差别
Hive on Tez 用 DAG 代替多轮 MapReduce,交互查询明显变快。
SET hive.execution.engine=tez;
SELECT count(*) FROM demo.t_stu;
-- 想永久生效:把下面这行写进 hive-site.xml
-- <property><name>hive.execution.engine</name><value>tez</value></property>| _c0 |
|---|
| 2 |
06用 DataGrip 图形化连一次
日常写 SQL 更顺手,也方便把结果导出。
Host: hadoop1
Port: 10000
User: hadoop
Database: default -- 或直接写要用的库名| 参数 | 值 |
|---|---|
| 驱动 | Apache Hive (JDBC) |
| URL | jdbc:hive2://hadoop1:10000 |
| 测试连接 | Succeeded |
💡 DataGrip 里执行 DDL 前把 Execute in transaction 关掉,避免 Hive 事务语义不匹配。