基于 VMware 与 CentOS 7 的 Hadoop 集群部署指南
档详细介绍了在 VMware 虚拟机中安装 CentOS 7 并配置 Hadoop 伪分布式集群的全过程。内容涵盖系统环境准备、网络与 SSH 配置、JDK 安装及源优化、Hadoop 核心参数设置、用户权限处理以及集群启动验证。通过解决 sudo 权限、DNS 解析、JAVA_HOME 路径等常见问题,帮助初学者搭建稳定的大数据开发环境。

档详细介绍了在 VMware 虚拟机中安装 CentOS 7 并配置 Hadoop 伪分布式集群的全过程。内容涵盖系统环境准备、网络与 SSH 配置、JDK 安装及源优化、Hadoop 核心参数设置、用户权限处理以及集群启动验证。通过解决 sudo 权限、DNS 解析、JAVA_HOME 路径等常见问题,帮助初学者搭建稳定的大数据开发环境。

本文档旨在提供一个全面、细致的 Hadoop 部署教程,覆盖从基础环境准备到 Hadoop 伪分布式集群成功运行的每一个环节。内容严格遵循新手友好的原则,对每一步操作、每一条命令以及可能遇到的问题进行深入剖析,确保初学者能够顺利完成部署。整个过程将在 VMware Workstation Pro 虚拟机环境中,使用 CentOS 7.9 操作系统进行。
部署任何复杂的系统,一个稳定可靠的基础环境是成功的基石。本章将详细介绍如何准备用于 Hadoop 集群的虚拟机环境,包括 VMware 的配置和 CentOS 7 操作系统的安装。
首先,需要获取 CentOS 7.9 的 ISO 镜像文件,这是我们将要安装在虚拟机中的操作系统。可以通过访问 CentOS 的官方归档库来下载。
访问链接:CentOS 7.9 归档库
在该页面中,找到并点击名为 CentOS-7-x86_64-DVD-2009.iso 的文件进行下载。这个 DVD 版本包含了完整的软件包,便于后续安装。
下载完 ISO 镜像后,打开 VMware Workstation Pro,开始创建新的虚拟机。
为虚拟机命名并选择存储位置。强烈建议将虚拟机文件存储在非系统盘(如 D 盘),以避免占用 C 盘空间,影响宿主机性能。
进入'简易安装信息'界面。这里可以预设一个用户账户和密码,VMware 会在安装过程中自动创建。为了方便管理,可以设置一个容易记忆的用户名和密码。
选择镜像文件后,VMware 会识别出操作系统类型。点击'下一步'。
在'安装来源'步骤,选择'安装程序光盘映像文件 (iso)',然后点击'浏览',定位到刚刚下载的 CentOS-7-x86_64-DVD-2009.iso 文件。
在虚拟机硬件兼容性选择界面,保持默认的 Workstation 16.2.x 或更高版本。这确保了较好的硬件支持和性能。点击'下一步'。
向导类型选择'典型'即可,点击'下一步'。
在 VMware 主界面,点击'创建新的虚拟机'按钮,启动新建虚拟机向导。
硬件资源的分配直接影响虚拟机的运行效率,特别是对于 Hadoop 这样需要消耗较多计算和内存资源的系统。
完成创建:最后,向导会展示所有配置的摘要。如果需要调整,可以点击'自定义硬件'。确认无误后,点击'完成'。
磁盘文件位置:保持默认即可,点击'下一步'。
磁盘容量:指定磁盘大小为 30GB,并选择'将虚拟磁盘拆分成多个文件'。30GB 对于安装操作系统、JDK、Hadoop 以及存储少量测试数据是足够的。拆分文件有助于在不同文件系统的磁盘间移动虚拟机。
创建新虚拟磁盘:选择'创建新虚拟磁盘',因为这是一台全新的虚拟机。
磁盘类型:保持默认的'SCSI (推荐)'。
I/O 控制器类型:保持默认的'LSI Logic (推荐)'。
网络类型:选择'使用网络地址转换 (NAT)'。NAT 模式可以让虚拟机通过宿主机共享网络访问外部互联网,同时在宿主机内部形成一个独立的局域网,配置简单,是初学者的首选。
内存配置:为虚拟机分配内存。这里设置为 8GB。Hadoop 的各个组件,尤其是 NameNode 和 ResourceManager,对内存有一定要求,8GB 可以保证伪分布式模式的流畅运行。
处理器配置:根据宿主机性能,为虚拟机分配处理器核心。这里分配了 4 个处理器核心,这对于单节点的 Hadoop 学习环境是比较充足的配置。点击'下一步'。
创建完成后,在 VMware 主界面选中新创建的虚拟机,点击'开启此虚拟机'。
虚拟机会从之前加载的 ISO 镜像文件启动,并自动开始 CentOS 7 的安装过程。这个过程是自动化的,因为它使用了 VMware 的简易安装功能。
安装过程会持续一段时间,包括分区、软件包安装和基本配置。
安装完成后,系统会自动重启并进入登录界面。点击之前设置的用户名,输入密码即可登录到 CentOS 7 的桌面环境。
至此,基础的虚拟机和操作系统环境已经准备就绪。
在安装 Hadoop 之前,需要对新安装的 CentOS 7 系统进行一些基础配置,以确保后续操作的顺利进行。
首先,打开终端,测试网络是否正常。ping 是一个检查网络连通性的基本命令。
ping www.baidu.com
如果能看到来自目标地址的连续响应,说明虚拟机已经可以正常访问互联网。
在学习和开发环境中,为了避免 Hadoop 各组件之间的端口通信被阻止,通常会选择关闭防火墙。在生产环境中,则需要配置精确的防火墙规则。
执行以下命令来停止并永久禁用 firewalld 服务:
# 停止当前运行的防火墙服务
sudo systemctl stop firewalld
# 禁止防火墙服务开机自启
sudo systemctl disable firewalld
sudo 命令用于以管理员权限执行操作。执行时,系统会提示输入当前用户的密码。
Hadoop 集群的管理脚本(如 start-dfs.sh)需要通过 SSH 来启动和停止各个节点上的服务进程。即使是在伪分布式模式下(所有进程运行在同一台机器上),Hadoop 也需要能够免密 SSH 登录到 localhost。
测试免密登录:尝试 SSH 登录到本机。
ssh localhost
第一次连接时,系统会询问是否信任该主机的指纹,输入 yes 并回车。如果之后没有提示输入密码就直接成功登录,说明免密配置成功。
测试成功后,输入 exit 命令退回到原来的会话。
设置权限:authorized_keys 文件对权限有严格要求,必须确保只有文件所有者有读写权限,否则 SSH 服务会拒绝使用它。
chmod 0600 ~/.ssh/authorized_keys
授权公钥:将生成的公钥内容追加到 authorized_keys 文件中。这个文件记录了所有被允许通过密钥免密登录到本机的公钥。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
生成密钥对:使用 ssh-keygen 命令生成 RSA 类型的密钥对(一个公钥 id_rsa.pub,一个私钥 id_rsa)。
# -t rsa 指定密钥类型为 RSA
# -P '' 指定私钥的密码为空,实现免密
# -f ~/.ssh/id_rsa 指定密钥文件的存放位置
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
在执行过程中,连续按回车键接受所有默认设置。
Hadoop 是基于 Java 开发的,因此必须安装 Java Development Kit (JDK)。这里选择稳定且广泛兼容的 OpenJDK 8。
使用 yum 包管理器来安装 JDK。
# -y 选项表示对所有提示自动回答 yes
sudo yum install -y java-1.8.0-openjdk-devel
执行后,遇到了权限问题,提示当前用户不在 sudoers 文件中。这意味着该用户没有被授权使用 sudo 命令。
要解决此问题,需要编辑 /etc/sudoers 文件,为当前用户授予 sudo 权限。直接编辑此文件风险很高,推荐使用 visudo 命令,它会在保存时检查文件语法,防止配置错误导致系统无法使用 sudo。
在打开的编辑界面中,找到 root ALL=(ALL) ALL 这一行,在它的下方添加一行,格式如下:
# 将 "name" 替换为实际的用户名
name ALL=(ALL:ALL) ALL
执行 visudo 命令。
visudo
切换到 root 用户,因为只有 root 用户有权限修改 sudoers 文件。
su - root
输入 root 用户的密码进行切换。
回到普通用户终端,重新执行 JDK 安装命令。
sudo yum install -y java-1.8.0-openjdk-devel
这次虽然 sudo 权限问题解决了,但出现了新的报错:'Could not resolve host: mirrors.cloud.aliyuncs.com'。这表明系统无法解析域名,是典型的 DNS 配置问题。
为了让系统能够将域名转换为 IP 地址,需要配置一个可用的 DNS 服务器。在 CentOS 7 中,推荐使用 nmtui(NetworkManager Text User Interface)这个文本图形化工具来管理网络配置,这样可以避免配置被系统重启覆盖。
在终端输入 sudo nmtui 启动工具。
sudo nmtui
在 nmtui 界面中,使用方向键选择'Edit a connection',然后按回车。
选择当前正在使用的网络连接(通常名为 ens33),然后移动到右侧的 <Edit...> 并按回车。
在编辑界面中,找到'IPv4 CONFIGURATION',将光标移动到右侧的 <Show> 并按回车,展开详细配置。找到'DNS servers'一项,在 <Add...> 处按回车,输入一个公共 DNS 服务器地址,例如 114.114.114.114。可以添加多个作为备用,如 8.8.8.8 或 223.5.5.5。
配置完成后,一直用方向键移动到底部,选择 <OK> 并按回车保存。然后选择 Quit 退出 nmtui。
验证 DNS 配置:查看 /etc/resolv.conf 文件,确认其中包含了刚才配置的 DNS 服务器地址。
cat /etc/resolv.conf
重启网络服务:为了让新的 DNS 配置立即生效,需要重启 NetworkManager 服务。
sudo systemctl restart NetworkManager
在解决网络问题的基础上,为了提高软件包的下载速度,可以将 yum 的默认源更换为国内的镜像源,例如阿里云或清华大学的镜像源。
备份默认源:
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载新的源文件(这里使用阿里云的源):
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清理并生成新缓存:
sudo yum clean all
sudo yum makecache
现在,所有准备工作都已完成。再次执行 JDK 安装命令:
sudo yum install -y java-1.8.0-openjdk-devel
这次,yum 命令成功执行,完成了 JDK 的下载和安装。
最后,验证 JDK 是否安装成功:
java -version
如果命令输出了 OpenJDK 的版本信息,说明 Java 环境已正确安装。
Java 环境就绪后,可以开始安装和配置 Hadoop。本章将以 Hadoop 3.3.6 为例,配置一个伪分布式集群。
下载 Hadoop:从官方源下载 Hadoop 速度可能较慢,可以切换到国内镜像源(如阿里云)来加速下载。
# 使用阿里云镜像源
wget https://mirrors.aliyun.com/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
解压 Hadoop:将下载的压缩包解压到 /usr/local 目录下。/usr/local 是通常用于存放用户自行安装的软件的地方。
# -z: 处理 gzip 压缩
# -x: 解压
# -v: 显示过程
# -f: 指定文件
# -C: 指定解压目录
sudo tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/
重命名目录:为了方便后续配置和引用,将带有版本号的目录名 hadoop-3.3.6 重命名为 hadoop。
cd /usr/local/
sudo mv hadoop-3.3.6/ hadoop
为了能在任何路径下直接使用 hadoop、hdfs 等命令,需要将 Hadoop 的 bin 和 sbin 目录添加到系统的 PATH 环境变量中。
编辑系统全局配置文件 /etc/profile。
sudo vi /etc/profile
在文件末尾添加以下内容:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存退出后,执行 source 命令使配置立即生效。
source /etc/profile
Hadoop 的行为由一系列 XML 配置文件控制,这些文件位于 $HADOOP_HOME/etc/hadoop 目录中。
进入该目录:
cd /usr/local/hadoop/etc/hadoop/
配置 hdfs-site.xml: 这个文件用于配置 HDFS 的具体参数。
sudo vi hdfs-site.xml
在 <configuration> 标签内添加:
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
dfs.replication 指定了 HDFS 中文件的副本数量。在伪分布式(单机)模式下,只有一个数据节点,所以副本数必须设置为 1。
配置 core-site.xml: 这是 Hadoop 的核心配置文件,用于定义 HDFS 的地址和端口。
sudo vi core-site.xml
在 <configuration> 标签内添加:
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
这指定了 HDFS NameNode 的 RPC 地址为 localhost 的 9000 端口。
配置 hadoop-env.sh: 这个脚本用于设置 Hadoop 运行时的环境变量,最重要的是指定 JAVA_HOME。
sudo vi hadoop-env.sh
在文件中添加(或修改)JAVA_HOME 的设置,指向之前安装的 OpenJDK 路径。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
*注意:这里的路径可能需要根据实际安装情况调整,后续排错环节会展示如何找到精确路径。
配置完成后,可以尝试启动 Hadoop 集群。这个过程常常会遇到一些典型问题,本章将一一解决。
格式化 NameNode:这是启动 HDFS 前的初始化步骤,它会创建文件系统的元数据存储结构。此操作只在第一次启动前执行,否则会清空 HDFS 上的所有数据。
hdfs namenode -format
启动 HDFS 和 YARN:
start-dfs.sh
start-yarn.sh
执行后,出现报错。日志提示不允许以 root 用户启动 NameNode 和 DataNode。这是 Hadoop 的一项安全措施,避免以最高权限用户运行服务。
解决方案是创建一个专门用于运行 Hadoop 服务的普通用户,并通过配置告知 Hadoop 使用该用户。
创建 hadoop 用户:
sudo useradd hadoop
sudo passwd hadoop
根据提示为新用户 hadoop 设置密码。
修改 hadoop-env.sh:再次编辑 hadoop-env.sh,添加环境变量来指定运行 HDFS 和 YARN 各组件的用户。
sudo vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh
在文件末尾添加:
export HDFS_NAMENODE_USER="hadoop"
export HDFS_DATANODE_USER="hadoop"
export HDFS_SECONDARYNAMENODE_USER="hadoop"
export YARN_RESOURCEMANAGER_USER="hadoop"
export YARN_NODEMANAGER_USER="hadoop"
切换到 hadoop 用户,并重新尝试格式化 NameNode。
su hadoop
hdfs namenode -format
此时出现新的错误:Error: JAVA_HOME is not set and could not be found. 这表明 hadoop-env.sh 中配置的 JAVA_HOME 路径不正确或不完整。
查找精确的 JDK 路径:yum 安装的 OpenJDK 路径通常带有详细的版本号。使用 find 命令查找精确路径。
# 需要在 root 或有 sudo 权限的用户下执行
find /usr/lib/jvm -name java-1.8.0-openjdk*
修正 hadoop-env.sh:切换回有 sudo 权限的用户(或 root),编辑 hadoop-env.sh,将 JAVA_HOME 的值更新为 find 命令找到的完整路径。
# 示例路径,应替换为实际找到的路径
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
修正 JAVA_HOME 后,再次切换到 hadoop 用户并执行格式化,可能还会遇到权限错误,提示无法创建日志目录。这是因为 /usr/local/hadoop 目录的所有者是 root,而 hadoop 用户没有写入权限。
解决方案是将整个 Hadoop 安装目录的所有权变更为 hadoop 用户。
# 在 root 或有 sudo 权限的用户下执行
sudo chown -R hadoop:hadoop /usr/local/hadoop
(注:原文中只修改了 logs 目录权限,但修改整个目录的所有权是更彻底、更标准的做法,可以避免后续其他权限问题)
所有问题解决后,进行最后的操作。
以 hadoop 用户重新格式化 NameNode:
su hadoop
hdfs namenode -format
在提示 Re-format filesystem? (Y or N) 时输入 Y 并回车。
看到 successfully formatted 和 Exiting with status 0 表示格式化成功。
启动 HDFS 和 YARN 服务(确保当前是 hadoop 用户):
start-dfs.sh
start-yarn.sh
验证服务进程:使用 jps 命令可以查看 Java 进程,如果看到 NameNode, DataNode, SecondaryNameNode, ResourceManager, NodeManager 等进程,说明集群已成功启动。
Web UI 验证:Hadoop 提供了 Web 界面来监控集群状态。在虚拟机的火狐浏览器中访问 http://localhost:9870 和 http://localhost:8088。
http://<虚拟机的 IP 地址>:9870http://<虚拟机的 IP 地址>:8088命令行验证:通过 hdfs dfs 命令与 HDFS 进行交互,测试文件系统的可用性。
在 HDFS 上创建一个目录:hdfs dfs -mkdir /test
在本地创建一个测试文件:echo "Hello Hadoop" > test.txt
将本地文件上传到 HDFS:hdfs dfs -put test.txt /test
查看 HDFS 上的文件列表和内容:
hdfs dfs -ls /test
hdfs dfs -cat /test/test.txt
成功显示文件内容,证明 HDFS 功能正常。
Hadoop 是一个用于分布式存储和分布式处理大规模数据集的开源框架。它主要解决两个核心问题:
为了进行实际的数据分析任务,可以准备一个公开的数据集,例如 MovieLens。
下载并解压数据集:这里使用 ml-latest-small 版本,它包含约 10 万条电影评分数据,非常适合入门练习。
wget https://files.grouplens.org/datasets/movielens/ml-latest-small.zip
unzip ml-latest-small.zip
cd ml-latest-small
下载并解压后,主要会用到 movies.csv(电影信息)和 ratings.csv(评分信息)这两个文件。后续的数据分析任务,例如编写 MapReduce 程序来统计电影平均分,就可以基于这些数据展开。首先需要将这些数据文件通过 hdfs dfs -put 命令上传到 HDFS 中,然后便可以启动计算任务。
重新启动 Hadoop(如果已关闭):
# 确保是 hadoop 用户
start-dfs.sh
start-yarn.sh
通过以上六个章节的详细步骤,一个功能完备的 Hadoop 伪分布式环境已经成功搭建在 VMware 虚拟机中。这个过程不仅涵盖了从零开始的每一步操作,还深入探讨了权限配置、网络 DNS、环境变量设置等环节中常见的错误及其排查方法。这个稳定运行的 Hadoop 环境,为后续学习 MapReduce 编程、HDFS 操作以及探索更复杂的 Hadoop 生态系统组件打下了坚实的基础。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online