Skip to content

第 2 章 部署开发环境 ​

开篇说明 ​

本章是整个 Hive 大数据学习的地基环节,所有后续的广电数据存储、查询、清洗、程序开发操作,都必须基于一个稳定可用的 Hadoop+Hive 集群环境。本章将从零开始,手把手带你完成从虚拟机安装、Linux 系统部署,到 Hadoop 集群搭建、Hive 安装配置,再到 Hive CLI 基础使用的全流程操作。

学完本章,你将掌握 6 大核心能力:

  1. VMware 虚拟机的安装与 NAT 模式网络配置,搭建多节点集群的网络基础
  2. CentOS 操作系统的安装、克隆与基础环境配置,完成 4 节点集群的系统准备
  3. Hadoop 3.1.4 分布式集群的完整部署、配置与启动验证
  4. MySQL 数据库的安装与配置,为 Hive 提供元数据存储支持
  5. Hive 3.1.2 的安装、配置、元数据初始化与服务启动
  6. Hive CLI 的基础使用方法,包括交互式命令执行、Shell 命令调用、脚本化执行

前置必备准备

  1. Windows 操作系统电脑,内存≥8G(推荐 16G 及以上),硬盘剩余空间≥100G

  2. 提前下载好所需安装包:

    • 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 版本)
  3. 提前安装好 Xshell 和 Xftp 工具,用于远程连接 Linux 虚拟机和文件传输


模块一:VMware 虚拟机安装与网络配置 ​

虚拟机是我们搭建分布式集群的基础,通过 VMware 可以在单台 Windows 电脑上虚拟出多台 Linux 服务器,模拟真实的分布式集群环境。

一、VMware 虚拟机安装 ​

  1. 从 VMware 官网下载 VMware Workstation 15.5 Pro 安装包(Windows 7 系统最高支持 15.x 版本,Windows 10/11 可安装更高版本)
  2. 双击安装包,按照安装向导默认步骤完成安装,过程中可自定义安装目录,其余选项保持默认即可
  3. 安装完成后,打开 VMware Workstation,进入主界面,完成基础安装

二、虚拟机 3 种网络模式详解 ​

VMware 提供 3 种网络连接模式,不同模式适用场景不同,新手必须先理解其核心区别:

表格

网络模式核心原理能否访问外网能否与宿主机通信能否与局域网其他主机通信集群适用场景
桥接模式虚拟机直接连接宿主机所在的物理局域网,和宿主机平级,独立获取局域网 IP能能能真实物理服务器集群,需要局域网内其他机器访问虚拟机
NAT 模式虚拟机通过宿主机的 IP 地址访问外网,宿主机为虚拟机提供网络地址转换,虚拟机位于独立的虚拟子网内能能不能单台电脑模拟多节点集群,无需局域网其他机器访问,本书采用此模式
仅主机模式虚拟机仅能与宿主机通信,完全隔离外网不能能不能完全隔离的测试环境,不需要联网的场景

三、NAT 模式网络详细配置 ​

本书采用 NAT 模式搭建集群,核心是配置 VMnet8 虚拟网卡,为集群规划固定的 IP 网段,具体步骤如下:

  1. 打开 VMware Workstation,点击顶部菜单栏「编辑」→「虚拟网络编辑器」

  2. 点击右下角「更改设置」,获取管理员权限

  3. 在列表中选中VMnet8,按以下要求配置:

    • 勾选「NAT 模式 (与虚拟机共享主机的 IP 地址)」
    • 勾选「将主机虚拟适配器连接到此网络」
    • 勾选「使用本地 DHCP 服务将 IP 地址分配给虚拟机」
    • 子网 IP 填写:192.168.128.0
    • 子网掩码填写:255.255.255.0
  4. 点击「NAT 设置」,将网关 IP 设置为192.168.128.2,点击确定

  5. 点击「DHCP 设置」,将起始 IP 地址设为192.168.128.0,结束 IP 地址设为192.168.128.254,点击确定

  6. 点击「应用」→「确定」,完成虚拟网络配置

四、新手避坑指南 ​

  1. ❌ 坑 1:配置虚拟网络时,子网 IP、网关 IP 不在同一个网段,导致虚拟机无法联网

    ✅ 解决:子网 IP 为

    192.168.128.0

    ,网关必须是

    192.168.128.X

    ,本书固定为

    192.168.128.2

    ,保持网段一致

  2. ❌ 坑 2:Windows 系统的 VMnet8 虚拟网卡被禁用,导致宿主机无法 ping 通虚拟机

    ✅ 解决:打开 Windows 的「网络和共享中心」→「更改适配器设置」,确保 VMware Network Adapter VMnet8 处于启用状态

  3. ❌ 坑 3:修改虚拟网络配置后,没有点击「应用」,配置不生效

    ✅ 解决:所有配置修改完成后,必须先点击「应用」,再点击「确定」,否则配置不会保存


模块二:CentOS 操作系统部署 ​

我们将先部署 1 台 master 主节点虚拟机,完成所有基础配置后,再通过克隆的方式快速生成 3 台 slave 从节点,避免重复操作。

一、新建虚拟机 ​

  1. 打开 VMware,点击「创建新的虚拟机」,选择「自定义 (高级)」,点击下一步
  2. 硬件兼容性选择「Workstation 15.x」,点击下一步
  3. 选择「稍后安装操作系统」,点击下一步
  4. 客户机操作系统选择「Linux」,版本选择「CentOS 6 64 位」,点击下一步
  5. 虚拟机名称填写master,安装位置选择非系统盘的目录(如D:\Hive\VM\master),点击下一步
  6. 处理器配置:处理器数量 1,每个处理器内核数量 1(电脑性能好可设为 2),点击下一步
  7. 虚拟机内存:设置为 2048MB(2G),最低 1024MB,点击下一步
  8. 网络类型选择「使用网络地址转换 (NAT)」,点击下一步
  9. I/O 控制器类型选择「LSI Logic」,磁盘类型选择「SCSI」,均保持默认,点击下一步
  10. 选择「创建新虚拟磁盘」,磁盘容量设置为 20GB,选择「将虚拟磁盘存储为单个文件」,点击下一步
  11. 磁盘文件名保持默认master.vmdk,点击下一步
  12. 核对所有配置无误后,点击「完成」,完成虚拟机创建

二、挂载 CentOS 镜像文件 ​

  1. 点击虚拟机右侧「编辑虚拟机设置」,打开虚拟机硬件配置界面
  2. 选中「CD/DVD (IDE)」,右侧勾选「启动时连接」
  3. 选择「使用 ISO 映像文件」,点击「浏览」,选中提前下载好的 CentOS 6.8 64 位镜像文件
  4. 点击「确定」,完成镜像挂载

三、安装 CentOS 6.8 操作系统 ​

  1. 点击「开启此虚拟机」,启动虚拟机
  2. 进入安装引导界面,选择「Install or upgrade an existing system」,按回车
  3. 进入介质检测界面,点击「Skip」,跳过介质检测
  4. 进入安装欢迎界面,点击「Next」
  5. 安装语言选择「Chinese (Simplified)」(简体中文),点击「Next」
  6. 键盘布局选择「美国英语式」,点击「下一步」
  7. 存储设备选择「基本存储设备」,点击「下一步」
  8. 弹出存储设备警告,勾选「在所有包含未探测分区或文件系统的设备中应用我的选择」,点击「是,忽略所有数据」
  9. 主机名设置为master,点击「下一步」
  10. 时区选择「亚洲 / 上海」,取消勾选「系统时钟使用 UTC 时间」,点击「下一步」
  11. 根用户(root)密码设置为123456,点击「下一步」,弹出脆弱密码提示,点击「无论如何都使用」
  12. 安装类型选择「使用所有空间」,点击「下一步」
  13. 弹出写入磁盘提示,点击「将修改写入磁盘」
  14. 安装方案选择「Minimal」(最小化安装),点击「下一步」
  15. 等待系统安装完成,安装完成后点击「重新引导」,重启虚拟机
  16. 重启后,输入用户名root,密码123456,出现[root@master ~]#提示符,说明系统安装登录成功

四、CentOS 基础网络配置 ​

系统安装完成后,必须配置静态 IP,确保虚拟机 IP 固定,不会重启后变化,具体步骤如下:

  1. 执行以下命令,编辑网卡配置文件

    bash
    vi /etc/sysconfig/network-scripts/ifcfg-eth0
  2. 按i进入编辑模式,修改 / 添加以下配置内容(代码 2-1)

    bash
    DEVICE=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.2
    • ONBOOT=yes:开机自动启用网卡
    • BOOTPROTO=static:使用静态 IP,而非动态获取
    • IPADDR:虚拟机静态 IP,master 节点固定为 192.168.128.130
    • GATEWAY和DNS1:必须和之前 NAT 设置里的网关 IP 一致
  3. 按Esc,输入:wq,按回车保存退出

  4. 执行以下命令,重启网络服务,使配置生效

    bash
    service network restart
  5. 验证网络配置

    bash
    # 查看IP地址,确认配置生效
    ifconfig
    # 测试能否ping通网关
    ping 192.168.128.2 -c 3
    # 测试能否ping通外网
    ping www.baidu.com -c 3

    能正常 ping 通,说明网络配置成功。

五、Xshell 与 Xftp 安装与连接 ​

  1. 从 NetSarang 官网下载家庭 / 学校免费版 Xshell 和 Xftp,填写邮箱获取下载链接,完成安装
  2. 打开 Xshell,点击「文件」→「新建」,打开新建会话界面
  3. 常规配置:名称填写master,协议选择SSH,主机填写192.168.128.130,端口保持 22
  4. 用户身份验证:方法选择Password,用户名填写root,密码填写123456
  5. 点击「确定」→「连接」,首次连接弹出 SSH 安全警告,点击「接受并保存」
  6. 成功进入 Linux 终端,说明 Xshell 远程连接成功,后续所有操作均在 Xshell 中执行
  7. Xftp 的连接配置和 Xshell 完全一致,连接成功后即可实现 Windows 和 Linux 之间的文件拖拽传输

模块三:Hadoop 集群部署前准备 ​

一、集群节点规划 ​

本书采用 1 主 3 从的 4 节点集群架构,节点规划如下,所有节点的配置必须严格对应:

表格

主机名IP 地址网关节点角色核心进程
master192.168.128.130192.168.128.2主节点NameNode、ResourceManager、SecondaryNameNode、JobHistoryServer
slave1192.168.128.131192.168.128.2从节点DataNode、NodeManager
slave2192.168.128.132192.168.128.2从节点DataNode、NodeManager
slave3192.168.128.133192.168.128.2从节点DataNode、NodeManager

二、配置本地 YUM 源 ​

为了后续能快速安装软件,先配置 CentOS 本地 YUM 源,步骤如下:

  1. 确保虚拟机已挂载 CentOS 镜像文件,且 CD/DVD 已勾选「已连接」

  2. 执行以下命令,将镜像文件挂载到 /media 目录

    bash
    mount /dev/dvd /media/
  3. 进入 yum 源配置目录,备份原有 repo 文件(代码 2-2)

    bash
    cd /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
  4. 编辑 CentOS-Media.repo 文件,修改配置(代码 2-3)

    bash
    vi 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
  5. 保存退出,执行以下命令,测试 yum 源是否可用

    bash
    yum clean all
    yum makecache
    # 安装常用软件
    yum -y install ntp openssh-clients openssh-server vim

三、克隆虚拟机生成从节点 ​

通过克隆 master 虚拟机,快速生成 3 台 slave 从节点,避免重复安装系统和基础配置,步骤如下:

  1. 关闭 master 虚拟机,执行shutdown -h now命令关机
  2. 在 VMware 中,右键 master 虚拟机→「管理」→「克隆」,打开克隆向导
  3. 克隆源选择「虚拟机中的当前状态」,点击下一步
  4. 克隆类型选择「创建完整克隆」,点击下一步
  5. 虚拟机名称填写slave1,安装位置设置为D:\Hive\VM\slave1,点击「完成」
  6. 等待克隆完成,按照相同步骤,克隆出 slave2、slave3 虚拟机

四、修改从节点网络配置 ​

分别启动 slave1、slave2、slave3 虚拟机,修改每台的主机名和 IP 地址,以 slave1 为例:

  1. 启动 slave1 虚拟机,用 root 用户登录

  2. 修改网卡配置文件,更新 IP 地址

    bash
    vi /etc/sysconfig/network-scripts/ifcfg-eth0

    修改

    IPADDR

    为

    192.168.128.131

    ,其余配置保持不变,保存退出

  3. 修改主机名配置文件

    bash
    vi /etc/sysconfig/network

    修改

    HOSTNAME=slave1

    ,保存退出

  4. 删除网卡规则文件,避免 MAC 地址冲突

    bash
    rm -rf /etc/udev/rules.d/70-persistent-net.rules
  5. 执行reboot命令重启虚拟机,使配置生效

  6. 重启后,执行ifconfig和hostname命令,验证 IP 和主机名是否修改成功

  7. 按照相同步骤,修改 slave2 的 IP 为 192.168.128.132,主机名 slave2;slave3 的 IP 为 192.168.128.133,主机名 slave3

五、配置所有节点的 IP 与主机名映射 ​

在所有 4 台节点上,配置 hosts 文件,实现通过主机名访问对应节点,步骤如下:

  1. 在 master 节点执行以下命令,编辑 hosts 文件

    bash
    vi /etc/hosts
  2. 在文件末尾添加以下内容(代码 2-5)

    bash
    192.168.128.130  master
    192.168.128.131  slave1
    192.168.128.132  slave2
    192.168.128.133  slave3
  3. 保存退出,将 hosts 文件分发到所有从节点

    bash
    scp /etc/hosts slave1:/etc/
    scp /etc/hosts slave2:/etc/
    scp /etc/hosts slave3:/etc/
  4. 在所有节点执行ping master -c 3,能正常 ping 通,说明映射配置成功

六、配置 SSH 免密登录 ​

Hadoop 集群需要主节点能免密登录所有从节点,实现脚本化启停集群,步骤如下:

  1. 在 master 节点执行以下命令,生成 SSH 密钥对,连续按 3 次回车,使用默认配置

    bash
    ssh-keygen -t rsa
  2. 将公钥分发到所有节点(包括 master 自身)

    bash
    ssh-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

  3. 验证免密登录

    bash
    ssh slave1
    # 无需输入密码,直接进入slave1终端,说明配置成功
    exit # 退出回到master

    依次验证 slave2、slave3,均能免密登录即可。

七、配置集群时间同步 ​

Hadoop 集群对节点间的时间一致性要求极高,时间差过大会导致集群运行异常,通过 NTP 服务实现时间同步,步骤如下:

  1. 所有节点执行以下命令,安装 NTP 服务

    bash
    yum install -y ntp
  2. 配置 master 节点为 NTP 时间服务器

    bash
    vi /etc/ntp.conf

    注释掉所有以 server 开头的行,添加以下内容(代码 2-7)

    ini
    restrict 192.168.128.0 mask 255.255.255.0 nomodify notrap
    server 127.127.1.0
    fudge 127.127.1.0 stratum 10

    保存退出

  3. 配置所有 slave 从节点同步 master 节点时间

    分别在 slave1、slave2、slave3 执行:

    bash
    vi /etc/ntp.conf

    注释掉所有以 server 开头的行,添加以下内容(代码 2-8)

    ini
    server master

    保存退出

  4. 所有节点关闭防火墙,避免 NTP 服务被拦截

    bash
    # 临时关闭防火墙
    service iptables stop
    # 永久关闭防火墙
    chkconfig iptables off
  5. 启动 NTP 服务

    bash
    # master节点启动NTP服务并设置开机自启
    service ntpd start
    chkconfig ntpd on
    
    # 所有slave节点先同步一次时间,再启动服务
    ntpdate master
    service ntpd start
    chkconfig ntpd on
  6. 验证时间同步,在 slave 节点执行date,查看和 master 节点时间是否一致

八、安装 JDK 并配置环境变量 ​

Hadoop 和 Hive 都是基于 Java 开发的,所有节点都必须安装 JDK 1.8,步骤如下:

  1. 通过 Xftp 将 jdk-8u221-linux-x64.rpm 安装包上传到 master 节点的 /opt 目录

  2. 在 master 节点执行以下命令,安装 JDK

    bash
    cd /opt
    rpm -ivh jdk-8u221-linux-x64.rpm
  3. 配置 JDK 环境变量

    bash
    vi /etc/profile

    在文件末尾添加以下内容(代码 2-4)

    bash
    export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
    export PATH=$PATH:$JAVA_HOME/bin

    保存退出

  4. 使环境变量生效,并验证 JDK 安装

    bash
    source /etc/profile
    java -version

    输出 JDK 版本信息,说明安装成功

  5. 将 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/
  6. 分别在所有 slave 节点执行安装命令和环境变量生效命令,验证 JDK 安装成功


模块四:Hadoop 3.1.4 集群完整部署 ​

一、Hadoop 安装包上传与解压 ​

  1. 通过 Xftp 将 hadoop-3.1.4.tar.gz 安装包上传到 master 节点的 /opt 目录

  2. 执行以下命令,解压安装包到 /usr/local 目录

    bash
    cd /opt
    tar -zxf hadoop-3.1.4.tar.gz -C /usr/local/
  3. 进入 Hadoop 配置文件目录

    bash
    cd /usr/local/hadoop-3.1.4/etc/hadoop/

二、修改 Hadoop 核心配置文件 ​

需要修改 7 个核心配置文件,所有配置均在 master 节点完成,之后分发到从节点。

1. core-site.xml(Hadoop 核心配置) ​

bash
vi core-site.xml

在 configuration 标签内添加以下内容(代码 2-9):

xml
<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 版本为 8020
  • hadoop.tmp.dir:Hadoop 临时文件存储目录,会自动创建

2. hadoop-env.sh(Hadoop 环境变量配置) ​

bash
vi hadoop-env.sh

在文件中添加 JDK 路径配置(代码 2-10):

bash
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64

保存退出,指定 Hadoop 使用的 JDK 路径。

3. hdfs-site.xml(HDFS 分布式文件系统配置) ​

bash
vi hdfs-site.xml

在 configuration 标签内添加以下内容(代码 2-11):

xml
<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 计算框架配置) ​

bash
vi mapred-site.xml

在 configuration 标签内添加以下内容(代码 2-12):

xml
<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 资源调度框架配置) ​

bash
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 环境变量配置) ​

bash
vi yarn-env.sh

添加 JDK 路径配置(代码 2-14):

bash
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64

7. workers(从节点列表配置,Hadoop 3.x 版本,2.x 为 slaves 文件) ​

bash
vi workers

删除原有内容,添加 3 台从节点的主机名(代码 2-15):

plaintext
slave1
slave2
slave3

保存退出,指定 Hadoop 的从节点为这 3 台主机。

三、创建数据目录并修改权限 ​

在所有节点执行以下命令,创建 Hadoop 数据存储目录,并修改权限:

bash
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):

bash
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 环境变量 ​

  1. 在 master 节点编辑 /etc/profile 文件,添加 Hadoop 环境变量(代码 2-17)

    bash
    vi /etc/profile

    在文件末尾添加以下内容:

    bash
    export 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

    保存退出

  2. 使环境变量生效

    bash
    source /etc/profile
  3. 将环境变量配置分发到所有从节点,并在每个从节点执行source /etc/profile生效

六、格式化 NameNode ​

注意:NameNode 格式化仅需执行一次,后续启动集群无需重复执行,重复格式化会导致集群 ID 不一致,DataNode 无法启动

bash
hdfs namenode -format

执行结果中出现Storage directory /data/hadoop/hdfs/name has been successfully formatted,说明格式化成功。

七、启动 Hadoop 集群 ​

  1. 进入 Hadoop 的 sbin 目录

    bash
    cd /usr/local/hadoop-3.1.4/sbin
  2. 启动 HDFS 分布式文件系统

    bash
    ./start-dfs.sh
  3. 启动 YARN 资源调度框架

    bash
    ./start-yarn.sh
  4. 启动历史任务服务

    bash
    ./mr-jobhistory-daemon.sh start historyserver

八、集群启动验证 ​

  1. 查看 master 节点进程,执行jps命令,应出现以下进程:

    plaintext
    NameNode
    SecondaryNameNode
    ResourceManager
    JobHistoryServer
    Jps
  2. 查看每个 slave 节点进程,执行jps命令,应出现以下进程:

    plaintext
    DataNode
    NodeManager
    Jps
  3. 测试 HDFS 是否可用

    bash
    # 在HDFS根目录创建test目录
    hdfs dfs -mkdir /test
    # 查看根目录文件
    hdfs dfs -ls /

    能正常创建目录,说明 HDFS 正常运行

  4. Web 界面验证

    • HDFS Web 界面:在 Windows 浏览器访问http://master:9870,能正常打开,看到 HDFS 集群信息
    • YARN Web 界面:在 Windows 浏览器访问http://master:8088,能正常打开,看到 YARN 资源信息
    • 注意:需要在 Windows 的C:\Windows\System32\drivers\etc\hosts文件中添加 IP 和主机名映射,否则无法通过主机名访问

九、新手高频踩坑指南 ​

  1. ❌ 坑 1:NameNode 格式化后,DataNode 无法启动

    ✅ 解决:重复格式化导致 NameNode 和 DataNode 的 ClusterID 不一致,停止集群,删除所有节点的

    /data/hadoop/hdfs/data/current/VERSION

    文件,重新格式化 NameNode,再启动集群

  2. ❌ 坑 2:启动集群时提示root用户没有权限启动

    ✅ 解决:已在 /etc/profile 中配置了 Hadoop 的用户环境变量,确保所有节点都已配置并生效

  3. ❌ 坑 3:DataNode 进程启动后,几秒后自动消失

    ✅ 解决:检查防火墙是否关闭,检查 hosts 文件配置是否正确,检查 DataNode 的日志文件

    /usr/local/hadoop-3.1.4/logs/

    ,查看具体报错信息

  4. ❌ 坑 4:无法访问 Hadoop 的 Web 界面

    ✅ 解决:检查防火墙是否关闭,检查 Windows 的 hosts 文件是否配置了 IP 映射,检查虚拟机和宿主机能否互相 ping 通


模块五:MySQL 安装与配置 ​

Hive 的元数据(库名、表名、字段、分区、存储位置等信息)需要存储在关系型数据库中,默认的 Derby 数据库仅支持单客户端连接,生产环境均使用 MySQL 存储元数据,因此需要先安装 MySQL。

一、MySQL 安装 ​

  1. 在 master 节点执行以下命令,查找 yum 源中的 MySQL 安装包

    bash
    yum search mysql
  2. 安装 MySQL 服务端

    bash
    yum install mysql-server.x86_64 -y
  3. 启动 MySQL 服务,并设置开机自启

    bash
    service mysqld start
    chkconfig mysqld on

二、配置 MySQL 管理员账号 ​

  1. 进入 MySQL 终端

    bash
    mysql
  2. 执行以下 SQL 语句,配置 root 用户的远程访问权限和密码(代码 2-20)

    sql
    USE 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 元数据库 ​

bash
# 使用root用户登录MySQL,输入密码123456
mysql -uroot -p123456
# 创建hive数据库,用于存储Hive元数据
CREATE DATABASE hive;
# 退出
quit;

模块六:Hive 3.1.2 安装与部署 ​

一、Hive 安装包上传与解压 ​

  1. 通过 Xftp 将 apache-hive-3.1.2-bin.tar.gz 安装包上传到 master 节点的 /opt 目录

  2. 执行以下命令,解压安装包并重命名

    bash
    cd /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 ​

  1. 进入 Hive 配置目录

    bash
    cd /usr/local/hive-3.1.2/conf
  2. 创建并编辑 hive-site.xml 配置文件

    bash
    vi hive-site.xml
  3. 添加代码 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):

bash
# 删除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 环境变量 ​

  1. 编辑 /etc/profile 文件

    bash
    vi /etc/profile
  2. 在文件末尾添加 Hive 环境变量(代码 2-24)

    bash
    export HIVE_HOME=/usr/local/hive-3.1.2
    export PATH=$HIVE_HOME/bin:$PATH
  3. 保存退出,使环境变量生效

    bash
    source /etc/profile

六、初始化 Hive 元数据库 ​

这是 Hive 安装最关键的一步,必须初始化元数据,否则无法启动 Hive:

bash
schematool -dbType mysql -initSchema

执行结果中出现schemaTool completed,说明元数据初始化成功。

七、启动 Hive 相关服务 ​

  1. 启动 Hive Metastore 元数据服务

    bash
    hive --service metastore &

    后台启动,执行后按回车回到命令行

  2. 启动 HiveServer2 远程服务(后续 Java 程序连接需要)

    bash
    nohup hive --service hiveserver2 &
  3. 执行jps命令,能看到 2 个 RunJar 进程,说明服务启动成功

八、新手高频踩坑指南 ​

  1. ❌ 坑 1:元数据初始化失败,提示无法连接MySQL

    ✅ 解决:检查 hive-site.xml 中的 MySQL 连接地址、用户名、密码是否正确,检查 MySQL 服务是否启动,检查 MySQL 驱动包是否上传到 lib 目录

  2. ❌ 坑 2:启动 Hive 时报错ClassNotFoundException: com.mysql.jdbc.Driver

    ✅ 解决:MySQL 驱动包版本和配置的驱动类名不匹配,5.x 版本驱动用

    com.mysql.jdbc.Driver

    ,8.x 版本用

    com.mysql.cj.jdbc.Driver
  3. ❌ 坑 3:启动 Hive 时报错guava包版本冲突

    ✅ 解决:已通过删除低版本、复制高版本的方式统一 guava 包版本,确保 Hadoop 和 Hive 的 guava 包版本一致

  4. ❌ 坑 4:元数据初始化成功,但启动 Hive 提示元数据库版本不匹配

    ✅ 解决:执行

    schematool -dbType mysql -info

    查看元数据版本,确保和 Hive 版本一致,重新执行初始化命令


模块七:Hive CLI 的使用 ​

Hive CLI 是 Hive 自带的命令行交互工具,是我们操作 Hive 最基础的方式,本模块讲解 Hive CLI 的核心使用方法。

一、启动 Hive CLI ​

  1. 确保 Hadoop 集群已启动、Hive Metastore 服务已启动

  2. 在 Linux 终端执行以下命令,进入 Hive CLI

    bash
    hive
  3. 出现hive>提示符,说明成功进入 Hive CLI 交互界面

二、Hive CLI 基础配置 ​

为了方便使用,进入 Hive CLI 后,先执行以下配置,让查询结果更友好:

bash
-- 显示查询结果的列名
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 命令,语法:!命令;,必须以半角分号结尾。

bash
-- 查看当前Linux工作目录
!pwd;
-- 查看Linux根目录文件
!ls /;
-- 查看Linux系统时间
!date;

四、在 Hive CLI 中执行 HDFS 命令 ​

在 Hive CLI 中,可直接执行 HDFS 文件系统命令,语法:dfs 命令;,去掉 Hadoop 命令中的hadoop关键字,以分号结尾。

hive
-- 查看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 语句 ​

bash
# 查看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 执行。

  1. 创建 HQL 脚本文件

    bash
    vi /opt/testQuery.hql

    写入以下内容:

    hive
    USE 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;

    保存退出

  2. 执行脚本文件

    bash
    hive -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=WRITEHDFS 目录权限不足执行hdfs dfs -chmod -R 777 /user/hive/warehouse给 Hive 仓库目录开放权限
Java 程序无法连接 HiveServer2HiveServer2 服务未启动,或 Hadoop 代理用户未配置1. 确保 hiveserver2 服务已启动;2. 配置 core-site.xml 中的 hadoop.proxyuser.root.hosts 和 groups 为 *,重启 Hadoop 集群

模块九:入门自测题(学完检验成果) ​

题目 1 ​

请写出 Hadoop 3.x 集群中,NameNode 和 DataNode 的核心进程分别是什么?启动 Hadoop 集群的完整命令是什么?

参考答案
  1. 核心进程:

    • NameNode 节点核心进程:NameNode、SecondaryNameNode、ResourceManager、JobHistoryServer
    • DataNode 节点核心进程:DataNode、NodeManager
  2. 启动完整命令:

    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 服务的命令。

参考答案
bash
# 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的命令。

参考答案
bash
# 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;

基于 Vite 强力驱动 | 纯静态轻量托管