第 2 章 部署开发环境
开篇说明
本章是整个 Hive 大数据学习的地基环节,所有后续的广电数据存储、查询、清洗、程序开发操作,都必须基于一个稳定可用的 Hadoop+Hive 集群环境。本章将从零开始,手把手带你完成从虚拟机安装、Linux 系统部署,到 Hadoop 集群搭建、Hive 安装配置,再到 Hive CLI 基础使用的全流程操作。
学完本章,你将掌握 6 大核心能力:
- VMware 虚拟机的安装与 NAT 模式网络配置,搭建多节点集群的网络基础
- CentOS 操作系统的安装、克隆与基础环境配置,完成 4 节点集群的系统准备
- Hadoop 3.1.4 分布式集群的完整部署、配置与启动验证
- MySQL 数据库的安装与配置,为 Hive 提供元数据存储支持
- Hive 3.1.2 的安装、配置、元数据初始化与服务启动
- Hive CLI 的基础使用方法,包括交互式命令执行、Shell 命令调用、脚本化执行
前置必备准备
Windows 操作系统电脑,内存≥8G(推荐 16G 及以上),硬盘剩余空间≥100G
提前下载好所需安装包:
- VMware Workstation 15.5 Pro
- CentOS 6.8 64 位镜像文件
- JDK 1.8 Linux 版本安装包
- Hadoop 3.1.4 安装包
- Apache Hive 3.1.2 安装包
- MySQL JDBC 驱动包(5.1.30 版本)
提前安装好 Xshell 和 Xftp 工具,用于远程连接 Linux 虚拟机和文件传输
模块一:VMware 虚拟机安装与网络配置
虚拟机是我们搭建分布式集群的基础,通过 VMware 可以在单台 Windows 电脑上虚拟出多台 Linux 服务器,模拟真实的分布式集群环境。
一、VMware 虚拟机安装
- 从 VMware 官网下载 VMware Workstation 15.5 Pro 安装包(Windows 7 系统最高支持 15.x 版本,Windows 10/11 可安装更高版本)
- 双击安装包,按照安装向导默认步骤完成安装,过程中可自定义安装目录,其余选项保持默认即可
- 安装完成后,打开 VMware Workstation,进入主界面,完成基础安装
二、虚拟机 3 种网络模式详解
VMware 提供 3 种网络连接模式,不同模式适用场景不同,新手必须先理解其核心区别:
表格
| 网络模式 | 核心原理 | 能否访问外网 | 能否与宿主机通信 | 能否与局域网其他主机通信 | 集群适用场景 |
|---|---|---|---|---|---|
| 桥接模式 | 虚拟机直接连接宿主机所在的物理局域网,和宿主机平级,独立获取局域网 IP | 能 | 能 | 能 | 真实物理服务器集群,需要局域网内其他机器访问虚拟机 |
| NAT 模式 | 虚拟机通过宿主机的 IP 地址访问外网,宿主机为虚拟机提供网络地址转换,虚拟机位于独立的虚拟子网内 | 能 | 能 | 不能 | 单台电脑模拟多节点集群,无需局域网其他机器访问,本书采用此模式 |
| 仅主机模式 | 虚拟机仅能与宿主机通信,完全隔离外网 | 不能 | 能 | 不能 | 完全隔离的测试环境,不需要联网的场景 |
三、NAT 模式网络详细配置
本书采用 NAT 模式搭建集群,核心是配置 VMnet8 虚拟网卡,为集群规划固定的 IP 网段,具体步骤如下:
打开 VMware Workstation,点击顶部菜单栏「编辑」→「虚拟网络编辑器」
点击右下角「更改设置」,获取管理员权限
在列表中选中VMnet8,按以下要求配置:
- 勾选「NAT 模式 (与虚拟机共享主机的 IP 地址)」
- 勾选「将主机虚拟适配器连接到此网络」
- 勾选「使用本地 DHCP 服务将 IP 地址分配给虚拟机」
- 子网 IP 填写:
192.168.128.0 - 子网掩码填写:
255.255.255.0
点击「NAT 设置」,将网关 IP 设置为
192.168.128.2,点击确定点击「DHCP 设置」,将起始 IP 地址设为
192.168.128.0,结束 IP 地址设为192.168.128.254,点击确定点击「应用」→「确定」,完成虚拟网络配置
四、新手避坑指南
❌ 坑 1:配置虚拟网络时,子网 IP、网关 IP 不在同一个网段,导致虚拟机无法联网
✅ 解决:子网 IP 为
192.168.128.0,网关必须是
192.168.128.X,本书固定为
192.168.128.2,保持网段一致
❌ 坑 2:Windows 系统的 VMnet8 虚拟网卡被禁用,导致宿主机无法 ping 通虚拟机
✅ 解决:打开 Windows 的「网络和共享中心」→「更改适配器设置」,确保 VMware Network Adapter VMnet8 处于启用状态
❌ 坑 3:修改虚拟网络配置后,没有点击「应用」,配置不生效
✅ 解决:所有配置修改完成后,必须先点击「应用」,再点击「确定」,否则配置不会保存
模块二:CentOS 操作系统部署
我们将先部署 1 台 master 主节点虚拟机,完成所有基础配置后,再通过克隆的方式快速生成 3 台 slave 从节点,避免重复操作。
一、新建虚拟机
- 打开 VMware,点击「创建新的虚拟机」,选择「自定义 (高级)」,点击下一步
- 硬件兼容性选择「Workstation 15.x」,点击下一步
- 选择「稍后安装操作系统」,点击下一步
- 客户机操作系统选择「Linux」,版本选择「CentOS 6 64 位」,点击下一步
- 虚拟机名称填写
master,安装位置选择非系统盘的目录(如D:\Hive\VM\master),点击下一步 - 处理器配置:处理器数量 1,每个处理器内核数量 1(电脑性能好可设为 2),点击下一步
- 虚拟机内存:设置为 2048MB(2G),最低 1024MB,点击下一步
- 网络类型选择「使用网络地址转换 (NAT)」,点击下一步
- I/O 控制器类型选择「LSI Logic」,磁盘类型选择「SCSI」,均保持默认,点击下一步
- 选择「创建新虚拟磁盘」,磁盘容量设置为 20GB,选择「将虚拟磁盘存储为单个文件」,点击下一步
- 磁盘文件名保持默认
master.vmdk,点击下一步 - 核对所有配置无误后,点击「完成」,完成虚拟机创建
二、挂载 CentOS 镜像文件
- 点击虚拟机右侧「编辑虚拟机设置」,打开虚拟机硬件配置界面
- 选中「CD/DVD (IDE)」,右侧勾选「启动时连接」
- 选择「使用 ISO 映像文件」,点击「浏览」,选中提前下载好的 CentOS 6.8 64 位镜像文件
- 点击「确定」,完成镜像挂载
三、安装 CentOS 6.8 操作系统
- 点击「开启此虚拟机」,启动虚拟机
- 进入安装引导界面,选择「Install or upgrade an existing system」,按回车
- 进入介质检测界面,点击「Skip」,跳过介质检测
- 进入安装欢迎界面,点击「Next」
- 安装语言选择「Chinese (Simplified)」(简体中文),点击「Next」
- 键盘布局选择「美国英语式」,点击「下一步」
- 存储设备选择「基本存储设备」,点击「下一步」
- 弹出存储设备警告,勾选「在所有包含未探测分区或文件系统的设备中应用我的选择」,点击「是,忽略所有数据」
- 主机名设置为
master,点击「下一步」 - 时区选择「亚洲 / 上海」,取消勾选「系统时钟使用 UTC 时间」,点击「下一步」
- 根用户(root)密码设置为
123456,点击「下一步」,弹出脆弱密码提示,点击「无论如何都使用」 - 安装类型选择「使用所有空间」,点击「下一步」
- 弹出写入磁盘提示,点击「将修改写入磁盘」
- 安装方案选择「Minimal」(最小化安装),点击「下一步」
- 等待系统安装完成,安装完成后点击「重新引导」,重启虚拟机
- 重启后,输入用户名
root,密码123456,出现[root@master ~]#提示符,说明系统安装登录成功
四、CentOS 基础网络配置
系统安装完成后,必须配置静态 IP,确保虚拟机 IP 固定,不会重启后变化,具体步骤如下:
执行以下命令,编辑网卡配置文件
bashvi /etc/sysconfig/network-scripts/ifcfg-eth0按
i进入编辑模式,修改 / 添加以下配置内容(代码 2-1)bashDEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.128.130 NETMASK=255.255.255.0 GATEWAY=192.168.128.2 DNS1=192.168.128.2ONBOOT=yes:开机自动启用网卡BOOTPROTO=static:使用静态 IP,而非动态获取IPADDR:虚拟机静态 IP,master 节点固定为 192.168.128.130GATEWAY和DNS1:必须和之前 NAT 设置里的网关 IP 一致
按
Esc,输入:wq,按回车保存退出执行以下命令,重启网络服务,使配置生效
bashservice network restart验证网络配置
bash# 查看IP地址,确认配置生效 ifconfig # 测试能否ping通网关 ping 192.168.128.2 -c 3 # 测试能否ping通外网 ping www.baidu.com -c 3能正常 ping 通,说明网络配置成功。
五、Xshell 与 Xftp 安装与连接
- 从 NetSarang 官网下载家庭 / 学校免费版 Xshell 和 Xftp,填写邮箱获取下载链接,完成安装
- 打开 Xshell,点击「文件」→「新建」,打开新建会话界面
- 常规配置:名称填写
master,协议选择SSH,主机填写192.168.128.130,端口保持 22 - 用户身份验证:方法选择
Password,用户名填写root,密码填写123456 - 点击「确定」→「连接」,首次连接弹出 SSH 安全警告,点击「接受并保存」
- 成功进入 Linux 终端,说明 Xshell 远程连接成功,后续所有操作均在 Xshell 中执行
- Xftp 的连接配置和 Xshell 完全一致,连接成功后即可实现 Windows 和 Linux 之间的文件拖拽传输
模块三:Hadoop 集群部署前准备
一、集群节点规划
本书采用 1 主 3 从的 4 节点集群架构,节点规划如下,所有节点的配置必须严格对应:
表格
| 主机名 | IP 地址 | 网关 | 节点角色 | 核心进程 |
|---|---|---|---|---|
| master | 192.168.128.130 | 192.168.128.2 | 主节点 | NameNode、ResourceManager、SecondaryNameNode、JobHistoryServer |
| slave1 | 192.168.128.131 | 192.168.128.2 | 从节点 | DataNode、NodeManager |
| slave2 | 192.168.128.132 | 192.168.128.2 | 从节点 | DataNode、NodeManager |
| slave3 | 192.168.128.133 | 192.168.128.2 | 从节点 | DataNode、NodeManager |
二、配置本地 YUM 源
为了后续能快速安装软件,先配置 CentOS 本地 YUM 源,步骤如下:
确保虚拟机已挂载 CentOS 镜像文件,且 CD/DVD 已勾选「已连接」
执行以下命令,将镜像文件挂载到 /media 目录
bashmount /dev/dvd /media/进入 yum 源配置目录,备份原有 repo 文件(代码 2-2)
bashcd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.bak mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak mv CentOS-fasttrack.repo CentOS-fasttrack.repo.bak mv CentOS-Vault.repo CentOS-Vault.repo.bak编辑 CentOS-Media.repo 文件,修改配置(代码 2-3)
bashvi CentOS-Media.repo修改为以下内容:
ini[c6-media] name=CentOS-$releasever - Media baseurl=file:///media/ gpgcheck=0 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6保存退出,执行以下命令,测试 yum 源是否可用
bashyum clean all yum makecache # 安装常用软件 yum -y install ntp openssh-clients openssh-server vim
三、克隆虚拟机生成从节点
通过克隆 master 虚拟机,快速生成 3 台 slave 从节点,避免重复安装系统和基础配置,步骤如下:
- 关闭 master 虚拟机,执行
shutdown -h now命令关机 - 在 VMware 中,右键 master 虚拟机→「管理」→「克隆」,打开克隆向导
- 克隆源选择「虚拟机中的当前状态」,点击下一步
- 克隆类型选择「创建完整克隆」,点击下一步
- 虚拟机名称填写
slave1,安装位置设置为D:\Hive\VM\slave1,点击「完成」 - 等待克隆完成,按照相同步骤,克隆出 slave2、slave3 虚拟机
四、修改从节点网络配置
分别启动 slave1、slave2、slave3 虚拟机,修改每台的主机名和 IP 地址,以 slave1 为例:
启动 slave1 虚拟机,用 root 用户登录
修改网卡配置文件,更新 IP 地址
bashvi /etc/sysconfig/network-scripts/ifcfg-eth0修改
IPADDR为
192.168.128.131,其余配置保持不变,保存退出
修改主机名配置文件
bashvi /etc/sysconfig/network修改
HOSTNAME=slave1,保存退出
删除网卡规则文件,避免 MAC 地址冲突
bashrm -rf /etc/udev/rules.d/70-persistent-net.rules执行
reboot命令重启虚拟机,使配置生效重启后,执行
ifconfig和hostname命令,验证 IP 和主机名是否修改成功按照相同步骤,修改 slave2 的 IP 为 192.168.128.132,主机名 slave2;slave3 的 IP 为 192.168.128.133,主机名 slave3
五、配置所有节点的 IP 与主机名映射
在所有 4 台节点上,配置 hosts 文件,实现通过主机名访问对应节点,步骤如下:
在 master 节点执行以下命令,编辑 hosts 文件
bashvi /etc/hosts在文件末尾添加以下内容(代码 2-5)
bash192.168.128.130 master 192.168.128.131 slave1 192.168.128.132 slave2 192.168.128.133 slave3保存退出,将 hosts 文件分发到所有从节点
bashscp /etc/hosts slave1:/etc/ scp /etc/hosts slave2:/etc/ scp /etc/hosts slave3:/etc/在所有节点执行
ping master -c 3,能正常 ping 通,说明映射配置成功
六、配置 SSH 免密登录
Hadoop 集群需要主节点能免密登录所有从节点,实现脚本化启停集群,步骤如下:
在 master 节点执行以下命令,生成 SSH 密钥对,连续按 3 次回车,使用默认配置
bashssh-keygen -t rsa将公钥分发到所有节点(包括 master 自身)
bashssh-copy-id -i /root/.ssh/id_rsa.pub master ssh-copy-id -i /root/.ssh/id_rsa.pub slave1 ssh-copy-id -i /root/.ssh/id_rsa.pub slave2 ssh-copy-id -i /root/.ssh/id_rsa.pub slave3执行过程中输入 yes 和对应节点的 root 密码 123456
验证免密登录
bashssh slave1 # 无需输入密码,直接进入slave1终端,说明配置成功 exit # 退出回到master依次验证 slave2、slave3,均能免密登录即可。
七、配置集群时间同步
Hadoop 集群对节点间的时间一致性要求极高,时间差过大会导致集群运行异常,通过 NTP 服务实现时间同步,步骤如下:
所有节点执行以下命令,安装 NTP 服务
bashyum install -y ntp配置 master 节点为 NTP 时间服务器
bashvi /etc/ntp.conf注释掉所有以 server 开头的行,添加以下内容(代码 2-7)
inirestrict 192.168.128.0 mask 255.255.255.0 nomodify notrap server 127.127.1.0 fudge 127.127.1.0 stratum 10保存退出
配置所有 slave 从节点同步 master 节点时间
分别在 slave1、slave2、slave3 执行:
bashvi /etc/ntp.conf注释掉所有以 server 开头的行,添加以下内容(代码 2-8)
iniserver master保存退出
所有节点关闭防火墙,避免 NTP 服务被拦截
bash# 临时关闭防火墙 service iptables stop # 永久关闭防火墙 chkconfig iptables off启动 NTP 服务
bash# master节点启动NTP服务并设置开机自启 service ntpd start chkconfig ntpd on # 所有slave节点先同步一次时间,再启动服务 ntpdate master service ntpd start chkconfig ntpd on验证时间同步,在 slave 节点执行
date,查看和 master 节点时间是否一致
八、安装 JDK 并配置环境变量
Hadoop 和 Hive 都是基于 Java 开发的,所有节点都必须安装 JDK 1.8,步骤如下:
通过 Xftp 将 jdk-8u221-linux-x64.rpm 安装包上传到 master 节点的 /opt 目录
在 master 节点执行以下命令,安装 JDK
bashcd /opt rpm -ivh jdk-8u221-linux-x64.rpm配置 JDK 环境变量
bashvi /etc/profile在文件末尾添加以下内容(代码 2-4)
bashexport JAVA_HOME=/usr/java/jdk1.8.0_221-amd64 export PATH=$PATH:$JAVA_HOME/bin保存退出
使环境变量生效,并验证 JDK 安装
bashsource /etc/profile java -version输出 JDK 版本信息,说明安装成功
将 JDK 安装包和环境变量配置分发到所有 slave 节点,完成从节点的 JDK 安装
bash# 分发安装包 scp /opt/jdk-8u221-linux-x64.rpm slave1:/opt/ scp /opt/jdk-8u221-linux-x64.rpm slave2:/opt/ scp /opt/jdk-8u221-linux-x64.rpm slave3:/opt/ # 分发环境变量配置 scp /etc/profile slave1:/etc/ scp /etc/profile slave2:/etc/ scp /etc/profile slave3:/etc/分别在所有 slave 节点执行安装命令和环境变量生效命令,验证 JDK 安装成功
模块四:Hadoop 3.1.4 集群完整部署
一、Hadoop 安装包上传与解压
通过 Xftp 将 hadoop-3.1.4.tar.gz 安装包上传到 master 节点的 /opt 目录
执行以下命令,解压安装包到 /usr/local 目录
bashcd /opt tar -zxf hadoop-3.1.4.tar.gz -C /usr/local/进入 Hadoop 配置文件目录
bashcd /usr/local/hadoop-3.1.4/etc/hadoop/
二、修改 Hadoop 核心配置文件
需要修改 7 个核心配置文件,所有配置均在 master 节点完成,之后分发到从节点。
1. core-site.xml(Hadoop 核心配置)
vi core-site.xml在 configuration 标签内添加以下内容(代码 2-9):
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9820</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/log/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>fs.defaultFS:指定 HDFS 的访问地址,端口 9820 是 Hadoop 3.x 的默认端口,2.x 版本为 8020hadoop.tmp.dir:Hadoop 临时文件存储目录,会自动创建
2. hadoop-env.sh(Hadoop 环境变量配置)
vi hadoop-env.sh在文件中添加 JDK 路径配置(代码 2-10):
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64保存退出,指定 Hadoop 使用的 JDK 路径。
3. hdfs-site.xml(HDFS 分布式文件系统配置)
vi hdfs-site.xml在 configuration 标签内添加以下内容(代码 2-11):
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9868</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>dfs.namenode.name.dir:NameNode 元数据存储目录dfs.datanode.data.dir:DataNode 数据存储目录dfs.replication:HDFS 数据副本数,3 个从节点设置为 3
4. mapred-site.xml(MapReduce 计算框架配置)
vi mapred-site.xml在 configuration 标签内添加以下内容(代码 2-12):
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>mapreduce.framework.name:指定 MapReduce 运行在 YARN 资源调度框架上
5. yarn-site.xml(YARN 资源调度框架配置)
vi yarn-site.xml在 configuration 标签内添加代码 2-13 的完整配置,核心配置说明:
yarn.resourcemanager.hostname:指定 ResourceManager 运行在 master 节点yarn.nodemanager.aux-services:配置 MapReduce 的 shuffle 服务yarn.nodemanager.vmem-check-enabled:关闭虚拟内存检查,避免虚拟机内存不足导致任务失败
6. yarn-env.sh(YARN 环境变量配置)
vi yarn-env.sh添加 JDK 路径配置(代码 2-14):
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd647. workers(从节点列表配置,Hadoop 3.x 版本,2.x 为 slaves 文件)
vi workers删除原有内容,添加 3 台从节点的主机名(代码 2-15):
slave1
slave2
slave3保存退出,指定 Hadoop 的从节点为这 3 台主机。
三、创建数据目录并修改权限
在所有节点执行以下命令,创建 Hadoop 数据存储目录,并修改权限:
mkdir -p /data/hadoop/hdfs/name
mkdir -p /data/hadoop/hdfs/data
mkdir -p /var/log/hadoop/tmp
chmod -R 777 /data/hadoop/hdfs
chmod -R 777 /var/log/hadoop/tmp四、分发 Hadoop 安装包到所有从节点
在 master 节点执行以下命令,将配置好的 Hadoop 安装包分发到所有 slave 节点(代码 2-16):
scp -r /usr/local/hadoop-3.1.4 slave1:/usr/local
scp -r /usr/local/hadoop-3.1.4 slave2:/usr/local
scp -r /usr/local/hadoop-3.1.4 slave3:/usr/local五、配置 Hadoop 环境变量
在 master 节点编辑 /etc/profile 文件,添加 Hadoop 环境变量(代码 2-17)
bashvi /etc/profile在文件末尾添加以下内容:
bashexport HADOOP_HOME=/usr/local/hadoop-3.1.4 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_JOURNALNODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root保存退出
使环境变量生效
bashsource /etc/profile将环境变量配置分发到所有从节点,并在每个从节点执行
source /etc/profile生效
六、格式化 NameNode
注意:NameNode 格式化仅需执行一次,后续启动集群无需重复执行,重复格式化会导致集群 ID 不一致,DataNode 无法启动
hdfs namenode -format执行结果中出现Storage directory /data/hadoop/hdfs/name has been successfully formatted,说明格式化成功。
七、启动 Hadoop 集群
进入 Hadoop 的 sbin 目录
bashcd /usr/local/hadoop-3.1.4/sbin启动 HDFS 分布式文件系统
bash./start-dfs.sh启动 YARN 资源调度框架
bash./start-yarn.sh启动历史任务服务
bash./mr-jobhistory-daemon.sh start historyserver
八、集群启动验证
查看 master 节点进程,执行
jps命令,应出现以下进程:plaintextNameNode SecondaryNameNode ResourceManager JobHistoryServer Jps查看每个 slave 节点进程,执行
jps命令,应出现以下进程:plaintextDataNode NodeManager Jps测试 HDFS 是否可用
bash# 在HDFS根目录创建test目录 hdfs dfs -mkdir /test # 查看根目录文件 hdfs dfs -ls /能正常创建目录,说明 HDFS 正常运行
Web 界面验证
- HDFS Web 界面:在 Windows 浏览器访问
http://master:9870,能正常打开,看到 HDFS 集群信息 - YARN Web 界面:在 Windows 浏览器访问
http://master:8088,能正常打开,看到 YARN 资源信息 - 注意:需要在 Windows 的
C:\Windows\System32\drivers\etc\hosts文件中添加 IP 和主机名映射,否则无法通过主机名访问
- HDFS Web 界面:在 Windows 浏览器访问
九、新手高频踩坑指南
❌ 坑 1:NameNode 格式化后,DataNode 无法启动
✅ 解决:重复格式化导致 NameNode 和 DataNode 的 ClusterID 不一致,停止集群,删除所有节点的
/data/hadoop/hdfs/data/current/VERSION文件,重新格式化 NameNode,再启动集群
❌ 坑 2:启动集群时提示
root用户没有权限启动✅ 解决:已在 /etc/profile 中配置了 Hadoop 的用户环境变量,确保所有节点都已配置并生效
❌ 坑 3:DataNode 进程启动后,几秒后自动消失
✅ 解决:检查防火墙是否关闭,检查 hosts 文件配置是否正确,检查 DataNode 的日志文件
/usr/local/hadoop-3.1.4/logs/,查看具体报错信息
❌ 坑 4:无法访问 Hadoop 的 Web 界面
✅ 解决:检查防火墙是否关闭,检查 Windows 的 hosts 文件是否配置了 IP 映射,检查虚拟机和宿主机能否互相 ping 通
模块五:MySQL 安装与配置
Hive 的元数据(库名、表名、字段、分区、存储位置等信息)需要存储在关系型数据库中,默认的 Derby 数据库仅支持单客户端连接,生产环境均使用 MySQL 存储元数据,因此需要先安装 MySQL。
一、MySQL 安装
在 master 节点执行以下命令,查找 yum 源中的 MySQL 安装包
bashyum search mysql安装 MySQL 服务端
bashyum install mysql-server.x86_64 -y启动 MySQL 服务,并设置开机自启
bashservice mysqld start chkconfig mysqld on
二、配置 MySQL 管理员账号
进入 MySQL 终端
bashmysql执行以下 SQL 语句,配置 root 用户的远程访问权限和密码(代码 2-20)
sqlUSE mysql; -- 删除默认的匿名用户 DELETE FROM user WHERE 1=1; -- 创建root用户,允许从任意主机访问,密码为123456 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; -- 刷新权限配置 FLUSH PRIVILEGES; -- 退出MySQL quit;
三、创建 Hive 元数据库
# 使用root用户登录MySQL,输入密码123456
mysql -uroot -p123456
# 创建hive数据库,用于存储Hive元数据
CREATE DATABASE hive;
# 退出
quit;模块六:Hive 3.1.2 安装与部署
一、Hive 安装包上传与解压
通过 Xftp 将 apache-hive-3.1.2-bin.tar.gz 安装包上传到 master 节点的 /opt 目录
执行以下命令,解压安装包并重命名
bashcd /opt tar -zxf apache-hive-3.1.2-bin.tar.gz -C /usr/local mv /usr/local/apache-hive-3.1.2-bin /usr/local/hive-3.1.2
二、修改 Hive 核心配置文件 hive-site.xml
进入 Hive 配置目录
bashcd /usr/local/hive-3.1.2/conf创建并编辑 hive-site.xml 配置文件
bashvi hive-site.xml添加代码 2-22 的完整配置,核心配置说明:
表格
配置项 核心作用 javax.jdo.option.ConnectionURLMySQL 连接地址,指定 hive 数据库 javax.jdo.option.ConnectionDriverNameMySQL 驱动类名,5.x 版本为 com.mysql.jdbc.Driver,8.x 版本为 com.mysql.cj.jdbc.Driver javax.jdo.option.ConnectionUserNameMySQL 用户名 root javax.jdo.option.ConnectionPasswordMySQL 密码 123456 hive.metastore.warehouse.dirHive 数据在 HDFS 上的存储路径 hive.metastore.urisHive 元数据服务地址,端口 9083 hive.server2.thrift.portHiveServer2 服务端口,默认 10000
三、上传 MySQL 驱动包
将 mysql-connector-java-5.1.30.jar 驱动包通过 Xftp 上传到/usr/local/hive-3.1.2/lib目录下,Hive 需要通过该驱动连接 MySQL。
四、解决 JAR 包版本冲突问题
Hive 和 Hadoop 中都包含 guava.jar 包,版本不一致会导致启动报错,需要统一版本(代码 2-23):
# 删除Hive中低版本的guava包
rm -rf /usr/local/hive-3.1.2/lib/guava-19.0.jar
# 复制Hadoop中高版本的guava包到Hive的lib目录
cp /usr/local/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar /usr/local/hive-3.1.2/lib/五、配置 Hive 环境变量
编辑 /etc/profile 文件
bashvi /etc/profile在文件末尾添加 Hive 环境变量(代码 2-24)
bashexport HIVE_HOME=/usr/local/hive-3.1.2 export PATH=$HIVE_HOME/bin:$PATH保存退出,使环境变量生效
bashsource /etc/profile
六、初始化 Hive 元数据库
这是 Hive 安装最关键的一步,必须初始化元数据,否则无法启动 Hive:
schematool -dbType mysql -initSchema执行结果中出现schemaTool completed,说明元数据初始化成功。
七、启动 Hive 相关服务
启动 Hive Metastore 元数据服务
bashhive --service metastore &后台启动,执行后按回车回到命令行
启动 HiveServer2 远程服务(后续 Java 程序连接需要)
bashnohup hive --service hiveserver2 &执行
jps命令,能看到 2 个 RunJar 进程,说明服务启动成功
八、新手高频踩坑指南
❌ 坑 1:元数据初始化失败,提示
无法连接MySQL✅ 解决:检查 hive-site.xml 中的 MySQL 连接地址、用户名、密码是否正确,检查 MySQL 服务是否启动,检查 MySQL 驱动包是否上传到 lib 目录
❌ 坑 2:启动 Hive 时报错
ClassNotFoundException: com.mysql.jdbc.Driver✅ 解决:MySQL 驱动包版本和配置的驱动类名不匹配,5.x 版本驱动用
com.mysql.jdbc.Driver,8.x 版本用
com.mysql.cj.jdbc.Driver❌ 坑 3:启动 Hive 时报错
guava包版本冲突✅ 解决:已通过删除低版本、复制高版本的方式统一 guava 包版本,确保 Hadoop 和 Hive 的 guava 包版本一致
❌ 坑 4:元数据初始化成功,但启动 Hive 提示
元数据库版本不匹配✅ 解决:执行
schematool -dbType mysql -info查看元数据版本,确保和 Hive 版本一致,重新执行初始化命令
模块七:Hive CLI 的使用
Hive CLI 是 Hive 自带的命令行交互工具,是我们操作 Hive 最基础的方式,本模块讲解 Hive CLI 的核心使用方法。
一、启动 Hive CLI
确保 Hadoop 集群已启动、Hive Metastore 服务已启动
在 Linux 终端执行以下命令,进入 Hive CLI
bashhive出现
hive>提示符,说明成功进入 Hive CLI 交互界面
二、Hive CLI 基础配置
为了方便使用,进入 Hive CLI 后,先执行以下配置,让查询结果更友好:
-- 显示查询结果的列名
SET hive.cli.print.header = true;
-- 列名仅显示字段名,不显示表名前缀
SET hive.resultset.use.unique.column.names=false;
-- 提示符显示当前所在数据库
SET hive.cli.print.current.db=true;三、在 Hive CLI 中执行 Linux Shell 命令
在 Hive CLI 中,无需退出即可执行 Linux Shell 命令,语法:!命令;,必须以半角分号结尾。
-- 查看当前Linux工作目录
!pwd;
-- 查看Linux根目录文件
!ls /;
-- 查看Linux系统时间
!date;四、在 Hive CLI 中执行 HDFS 命令
在 Hive CLI 中,可直接执行 HDFS 文件系统命令,语法:dfs 命令;,去掉 Hadoop 命令中的hadoop关键字,以分号结尾。
-- 查看HDFS根目录文件
dfs -ls /;
-- 查看Hive仓库目录
dfs -ls /user/hive/warehouse;
-- 在HDFS中创建目录
dfs -mkdir /hive_test;五、在 Linux Shell 中直接执行 Hive 命令
无需进入 Hive CLI 交互界面,可在 Linux 终端直接执行 HQL 语句,适合脚本化、自动化执行。
1. hive -e 命令:执行单条 / 多条 HQL 语句
# 查看Hive中的所有数据库
hive -e "SHOW DATABASES;";
# 切换到zjsm数据库,查询media_index表的前3条数据
hive -e "USE zjsm; SELECT * FROM media_index LIMIT 3;";
# 静默模式执行,去掉OK、Time taken等提示,将结果保存到文件
hive -S -e "USE zjsm; SELECT * FROM media_index LIMIT 3;" > /tmp/testquery;
# 查看结果文件
cat /tmp/testquery;2. hive -f 命令:执行 HQL 脚本文件
适合执行复杂的、多条 HQL 语句的场景,将 HQL 语句写在脚本文件中,通过 hive -f 执行。
创建 HQL 脚本文件
bashvi /opt/testQuery.hql写入以下内容:
hiveUSE zjsm; -- 统计用户基本表的总用户数 SELECT COUNT(DISTINCT phone_no) AS total_user FROM mediamatch_usermsg; -- 统计每个品牌的用户数 SELECT sm_name, COUNT(DISTINCT phone_no) AS user_num FROM mediamatch_usermsg GROUP BY sm_name;保存退出
执行脚本文件
bashhive -f /opt/testQuery.hql;终端会直接输出脚本中 HQL 的执行结果,适合批量执行数据处理任务。
模块八:全流程环境部署避坑终极汇总
表格
| 问题现象 | 核心原因 | 终极解决方法 |
|---|---|---|
| 虚拟机无法 ping 通外网 | 网关、DNS 配置错误,或虚拟网络配置不匹配 | 1. 确保 ifcfg-eth0 中的 GATEWAY 和 DNS1 与 VMware 的 NAT 网关一致;2. 检查 VMnet8 虚拟网卡是否启用;3. 重启网络服务service network restart |
| SSH 免密登录仍需要输入密码 | 目录权限配置错误,.ssh 目录权限必须是 700,authorized_keys 必须是 600 | 执行chmod 700 /root/.ssh和chmod 600 /root/.ssh/authorized_keys |
| Hadoop 启动后 DataNode 进程消失 | NameNode 多次格式化,ClusterID 不一致 | 停止集群,删除所有节点的 /data/hadoop/hdfs/name 和 data 目录,重新格式化 NameNode,再启动集群 |
Hive 启动报错元数据库不存在 | 未执行元数据初始化命令 | 执行schematool -dbType mysql -initSchema完成元数据初始化 |
Hive 查询报错Permission denied: user=anonymous, access=WRITE | HDFS 目录权限不足 | 执行hdfs dfs -chmod -R 777 /user/hive/warehouse给 Hive 仓库目录开放权限 |
| Java 程序无法连接 HiveServer2 | HiveServer2 服务未启动,或 Hadoop 代理用户未配置 | 1. 确保 hiveserver2 服务已启动;2. 配置 core-site.xml 中的 hadoop.proxyuser.root.hosts 和 groups 为 *,重启 Hadoop 集群 |
模块九:入门自测题(学完检验成果)
题目 1
请写出 Hadoop 3.x 集群中,NameNode 和 DataNode 的核心进程分别是什么?启动 Hadoop 集群的完整命令是什么?
参考答案
核心进程:
- NameNode 节点核心进程:NameNode、SecondaryNameNode、ResourceManager、JobHistoryServer
- DataNode 节点核心进程:DataNode、NodeManager
启动完整命令:
bash# 进入Hadoop sbin目录 cd /usr/local/hadoop-3.1.4/sbin # 启动HDFS ./start-dfs.sh # 启动YARN ./start-yarn.sh # 启动历史服务 ./mr-jobhistory-daemon.sh start historyserver
题目 2
请写出 Hive 元数据初始化的完整命令,以及启动 Hive Metastore 和 HiveServer2 服务的命令。
参考答案
# 1. Hive元数据初始化命令
schematool -dbType mysql -initSchema
# 2. 启动Hive Metastore元数据服务(后台运行)
hive --service metastore &
# 3. 启动HiveServer2远程服务(后台运行,输出日志到nohup.out)
nohup hive --service hiveserver2 &题目 3
请写出在 Linux 终端中,执行 HQL 脚本文件/opt/hive_clean.hql的命令,以及将查询结果静默输出到/tmp/result.txt的命令。
参考答案
# 1. 执行HQL脚本文件
hive -f /opt/hive_clean.hql;
# 2. 静默执行查询,将结果输出到/tmp/result.txt
hive -S -e "USE zjsm; SELECT * FROM mediamatch_usermsg_clean LIMIT 10;" > /tmp/result.txt;