欢迎光临
我们一直在努力

基于VMware与CentOS 7的Hadoop集群部署全景指南

前言

本文档旨在提供一个全面、细致的Hadoop部署教程,覆盖从基础环境准备到Hadoop伪分布式集群成功运行的每一个环节。内容严格遵循新手友好的原则,对每一步操作、每一条命令以及可能遇到的问题进行深入剖析,确保初学者能够顺利完成部署。整个过程将在VMware Workstation Pro虚拟机环境中,使用CentOS 7.9操作系统进行。

第一章:基础环境搭建——虚拟机与操作系统的准备

部署任何复杂的系统,一个稳定可靠的基础环境是成功的基石。本章将详细介绍如何准备用于Hadoop集群的虚拟机环境,包括VMware的配置和CentOS 7操作系统的安装。

1.1 系统镜像下载

首先,需要获取CentOS 7.9的ISO镜像文件,这是我们将要安装在虚拟机中的操作系统。可以通过访问CentOS的官方归档库来下载。

访问链接:CentOs 7.9 归档库

在该页面中,找到并点击名为CentOS-7-x86_64-DVD-2009.iso的文件进行下载。这个DVD版本包含了完整的软件包,便于后续安装。

下载CentOS 7.9 ISO镜像文件

1.2 创建新的VMware虚拟机

下载完ISO镜像后,打开VMware Workstation Pro,开始创建新的虚拟机。

  • 在VMware主界面,点击“创建新的虚拟机”按钮,启动新建虚拟机向导。

    点击新建虚拟机

  • 向导类型选择“典型”即可,点击“下一步”。

    选择典型安装

  • 在虚拟机硬件兼容性选择界面,保持默认的Workstation 16.2.x或更高版本。这确保了较好的硬件支持和性能。点击“下一步”。

    选择硬件兼容性

  • 在“安装来源”步骤,选择“安装程序光盘映像文件(iso)”,然后点击“浏览”,定位到刚刚下载的CentOS-7-x86_64-DVD-2009.iso文件。

    选择下载好的CentOS 7镜像文件

  • 选择镜像文件后,VMware会识别出操作系统类型。点击“下一步”。

    确认镜像文件选择

  • 进入“简易安装信息”界面。这里可以预设一个用户账户和密码,VMware会在安装过程中自动创建。为了方便管理,可以设置一个容易记忆的用户名和密码。

    设置用户信息

  • 为虚拟机命名并选择存储位置。强烈建议将虚拟机文件存储在非系统盘(如D盘),以避免占用C盘空间,影响宿主机性能。

    选择虚拟机存储位置

  • 1.3 配置虚拟机硬件资源

    硬件资源的分配直接影响虚拟机的运行效率,特别是对于Hadoop这样需要消耗较多计算和内存资源的系统。

  • 处理器配置:根据宿主机性能,为虚拟机分配处理器核心。这里分配了4个处理器核心,这对于单节点的Hadoop学习环境是比较充足的配置。点击“下一步”。

    配置处理器核心为4核

  • 内存配置:为虚拟机分配内存。这里设置为8GB。Hadoop的各个组件,尤其是NameNode和ResourceManager,对内存有一定要求,8GB可以保证伪分布式模式的流畅运行。

    配置内存为8GB

  • 网络类型:选择“使用网络地址转换(NAT)”。NAT模式可以让虚拟机通过宿主机共享网络访问外部互联网,同时在宿主机内部形成一个独立的局域网,配置简单,是初学者的首选。

    选择NAT网络类型

  • I/O控制器类型:保持默认的“LSI Logic (推荐)”。

    选择I/O控制器类型

  • 磁盘类型:保持默认的“SCSI (推荐)”。

    选择磁盘类型

  • 创建新虚拟磁盘:选择“创建新虚拟磁盘”,因为这是一台全新的虚拟机。

    选择创建新虚拟磁盘

  • 磁盘容量:指定磁盘大小为30GB,并选择“将虚拟磁盘拆分成多个文件”。30GB对于安装操作系统、JDK、Hadoop以及存储少量测试数据是足够的。拆分文件有助于在不同文件系统的磁盘间移动虚拟机。

    指定磁盘容量和存储方式

  • 磁盘文件位置:保持默认即可,点击“下一步”。

    确认磁盘文件位置

  • 完成创建:最后,向导会展示所有配置的摘要。如果需要调整,可以点击“自定义硬件”。确认无误后,点击“完成”。

    完成虚拟机创建向导

  • 1.4 启动虚拟机并安装CentOS 7

    创建完成后,在VMware主界面选中新创建的虚拟机,点击“开启此虚拟机”。

    开启虚拟机

    虚拟机会从之前加载的ISO镜像文件启动,并自动开始CentOS 7的安装过程。这个过程是自动化的,因为它使用了VMware的简易安装功能。

    CentOS 7 初始化安装中

    安装过程会持续一段时间,包括分区、软件包安装和基本配置。

    CentOS 7 安装过程

    安装完成后,系统会自动重启并进入登录界面。点击之前设置的用户名,输入密码即可登录到CentOS 7的桌面环境。

    登录CentOS 7系统

    至此,基础的虚拟机和操作系统环境已经准备就绪。

    第二章:系统基础配置

    在安装Hadoop之前,需要对新安装的CentOS 7系统进行一些基础配置,以确保后续操作的顺利进行。

    2.1 网络连通性测试

    首先,打开终端,测试网络是否正常。ping是一个检查网络连通性的基本命令。

    ping www.baidu.com

    如果能看到来自目标地址的连续响应,说明虚拟机已经可以正常访问互联网。

    ping命令测试网络连通性

    2.2 关闭防火墙

    在学习和开发环境中,为了避免Hadoop各组件之间的端口通信被阻止,通常会选择关闭防火墙。在生产环境中,则需要配置精确的防火墙规则。

    执行以下命令来停止并永久禁用firewalld服务:

    # 停止当前运行的防火墙服务
    sudo systemctl stop firewalld
    # 禁止防火墙服务开机自启
    sudo systemctl disable firewalld

    sudo命令用于以管理员权限执行操作。执行时,系统会提示输入当前用户的密码。

    执行关闭防火墙命令

    2.3 配置SSH免密登录

    Hadoop集群的管理脚本(如start-dfs.sh)需要通过SSH来启动和停止各个节点上的服务进程。即使是在伪分布式模式下(所有进程运行在同一台机器上),Hadoop也需要能够免密SSH登录到localhost。

  • 生成密钥对:使用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

    在执行过程中,连续按回车键接受所有默认设置。

  • 授权公钥:将生成的公钥内容追加到authorized_keys文件中。这个文件记录了所有被允许通过密钥免密登录到本机的公钥。

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

  • 设置权限:authorized_keys文件对权限有严格要求,必须确保只有文件所有者有读写权限,否则SSH服务会拒绝使用它。

    chmod 0600 ~/.ssh/authorized_keys

  • 测试免密登录:尝试SSH登录到本机。

    ssh localhost

    第一次连接时,系统会询问是否信任该主机的指纹,输入yes并回车。如果之后没有提示输入密码就直接成功登录,说明免密配置成功。

    SSH免密登录测试成功

    测试成功后,输入exit命令退回到原来的会话。

  • 第三章:核心依赖安装与问题排查——JDK

    Hadoop是基于Java开发的,因此必须安装Java Development Kit (JDK)。这里选择稳定且广泛兼容的OpenJDK 8。

    3.1 首次尝试安装JDK与权限问题

    使用yum包管理器来安装JDK。

    # -y 选项表示对所有提示自动回答yes
    sudo yum install -y java-1.8.0-openjdk-devel

    执行后,遇到了权限问题,提示当前用户不在sudoers文件中。这意味着该用户没有被授权使用sudo命令。

    yum安装JDK时出现sudo权限问题

    3.2 解决sudo权限问题

    要解决此问题,需要编辑/etc/sudoers文件,为当前用户授予sudo权限。直接编辑此文件风险很高,推荐使用visudo命令,它会在保存时检查文件语法,防止配置错误导致系统无法使用sudo。

  • 切换到root用户,因为只有root用户有权限修改sudoers文件。

    su – root

    输入root用户的密码进行切换。

    切换到root用户

  • 执行visudo命令。

    visudo

  • 在打开的编辑界面中,找到root ALL=(ALL) ALL这一行,在它的下方添加一行,格式如下:

    # 将 "name" 替换为实际的用户名
    name ALL=(ALL:ALL) ALL

    使用visudo为用户添加sudo权限

  • 按下Esc键退出插入模式,然后输入:wq并回车,保存并退出。之后可以执行exit退回到普通用户。

  • 3.3 再次尝试安装与网络DNS问题

    回到普通用户终端,重新执行JDK安装命令。

    sudo yum install -y java-1.8.0-openjdk-devel

    这次虽然sudo权限问题解决了,但出现了新的报错:“Could not resolve host: mirrors.cloud.aliyuncs.com”。这表明系统无法解析域名,是典型的DNS配置问题。

    3.4 配置DNS服务器

    为了让系统能够将域名转换为IP地址,需要配置一个可用的DNS服务器。在CentOS 7中,推荐使用nmtui(NetworkManager Text User Interface)这个文本图形化工具来管理网络配置,这样可以避免配置被系统重启覆盖。

  • 在终端输入sudo nmtui启动工具。

    sudo nmtui

  • 在nmtui界面中,使用方向键选择“Edit a connection”,然后按回车。

    在nmtui中选择编辑连接

  • 选择当前正在使用的网络连接(通常名为ens33),然后移动到右侧的<Edit…>并按回车。

    选择要编辑的网络连接ens33

  • 在编辑界面中,找到“IPv4 CONFIGURATION”,将光标移动到右侧的<Show>并按回车,展开详细配置。找到“DNS servers”一项,在<Add…>处按回车,输入一个公共DNS服务器地址,例如114.114.114.114。可以添加多个作为备用,如8.8.8.8或223.5.5.5。

    在nmtui中添加DNS服务器地址

    配置完成后的效果如下图所示。

    DNS服务器配置完成效果

  • 配置完成后,一直用方向键移动到底部,选择<OK>并按回车保存。然后选择Quit退出nmtui。

  • 重启网络服务:为了让新的DNS配置立即生效,需要重启NetworkManager服务。

    sudo systemctl restart NetworkManager

  • 验证DNS配置:查看/etc/resolv.conf文件,确认其中包含了刚才配置的DNS服务器地址。

    cat /etc/resolv.conf

    查看resolv.conf文件确认DNS已生效

  • 3.5 优化软件源并成功安装JDK

    在解决网络问题的基础上,为了提高软件包的下载速度,可以将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
    更换yum源并生成缓存
  • 现在,所有准备工作都已完成。再次执行JDK安装命令:

    sudo yum install -y java-1.8.0-openjdk-devel

    这次,yum命令成功执行,完成了JDK的下载和安装。

    成功安装JDK

    最后,验证JDK是否安装成功:

    java -version

    如果命令输出了OpenJDK的版本信息,说明Java环境已正确安装。

    验证Java版本信息

    第四章:Hadoop安装与伪分布式配置

    Java环境就绪后,可以开始安装和配置Hadoop。本章将以Hadoop 3.3.6为例,配置一个伪分布式集群。

    4.1 下载并解压Hadoop
  • 下载Hadoop:从官方源下载Hadoop速度可能较慢,可以切换到国内镜像源(如阿里云)来加速下载。

    # 官方源(可能较慢)
    # wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz

    # 使用阿里云镜像源
    wget https://mirrors.aliyun.com/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz

    使用镜像源下载Hadoop

  • 解压Hadoop:将下载的压缩包解压到/usr/local目录下。/usr/local是通常用于存放用户自行安装的软件的地方。

    # -z: 处理gzip压缩
    # -x: 解压
    # -v: 显示过程
    # -f: 指定文件
    # -C: 指定解压目录
    sudo tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/

    解压Hadoop压缩包

  • 重命名目录:为了方便后续配置和引用,将带有版本号的目录名hadoop-3.3.6重命名为hadoop。

    cd /usr/local/
    sudo mv hadoop-3.3.6/ hadoop

    重命名Hadoop目录

  • 4.2 配置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

    在/etc/profile中添加Hadoop环境变量

  • 保存退出后,执行source命令使配置立即生效。

    source /etc/profile

  • 4.3 修改Hadoop核心配置文件

    Hadoop的行为由一系列XML配置文件控制,这些文件位于$HADOOP_HOME/etc/hadoop目录中。

    进入该目录:

    cd /usr/local/hadoop/etc/hadoop/

    进入Hadoop配置目录

  • 配置 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-env.sh中配置JAVA_HOME

  • 配置 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端口。

    配置core-site.xml

  • 配置 hdfs-site.xml: 这个文件用于配置HDFS的具体参数。

    sudo vi hdfs-site.xml

    在<configuration>标签内添加:

    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>

    dfs.replication指定了HDFS中文件的副本数量。在伪分布式(单机)模式下,只有一个数据节点,所以副本数必须设置为1。

    配置hdfs-site.xml

  • 第五章:启动集群与问题排查

    配置完成后,可以尝试启动Hadoop集群。这个过程常常会遇到一些典型问题,本章将一一解决。

    5.1 首次启动尝试与用户问题
  • 格式化NameNode:这是启动HDFS前的初始化步骤,它会创建文件系统的元数据存储结构。此操作只在第一次启动前执行,否则会清空HDFS上的所有数据。

    hdfs namenode -format

    首次格式化NameNode

  • 启动HDFS和YARN:

    start-dfs.sh
    start-yarn.sh

    执行后,出现报错。日志提示不允许以root用户启动NameNode和DataNode。这是Hadoop的一项安全措施,避免以最高权限用户运行服务。

    以root用户启动Hadoop服务时报错

  • 5.2 解决root用户启动问题

    解决方案是创建一个专门用于运行Hadoop服务的普通用户,并通过配置告知Hadoop使用该用户。

  • 创建hadoop用户:

    sudo useradd hadoop
    sudo passwd hadoop

    根据提示为新用户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-env.sh中指定服务运行用户

  • 5.3 切换用户后的JAVA_HOME路径问题

    切换到hadoop用户,并重新尝试格式化NameNode。

    su hadoop
    hdfs namenode -format

    此时出现新的错误:Error: JAVA_HOME is not set and could not be found. 这表明hadoop-env.sh中配置的JAVA_HOME路径不正确或不完整。

    切换用户后出现JAVA_HOME未找到的错误

  • 查找精确的JDK路径:yum安装的OpenJDK路径通常带有详细的版本号。使用find命令查找精确路径。

    # 需要在root或有sudo权限的用户下执行
    find /usr/lib/jvm -name java-1.8.0-openjdk*

    使用find命令查找精确的JDK安装路径

  • 修正 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

    修正hadoop-env.sh中的JAVA_HOME为精确路径

  • 5.4 日志目录权限问题

    修正JAVA_HOME后,再次切换到hadoop用户并执行格式化,可能还会遇到权限错误,提示无法创建日志目录。这是因为/usr/local/hadoop目录的所有者是root,而hadoop用户没有写入权限。

    解决方案是将整个Hadoop安装目录的所有权变更为hadoop用户。

    # 在root或有sudo权限的用户下执行
    sudo chown -R hadoop:hadoop /usr/local/hadoop

    (注:原文中只修改了logs目录权限,但修改整个目录的所有权是更彻底、更标准的做法,可以避免后续其他权限问题)

    5.5 成功启动并验证集群

    所有问题解决后,进行最后的操作。

  • 以hadoop用户重新格式化NameNode:

    su hadoop
    hdfs namenode -format

    在提示Re-format filesystem? (Y or N)时输入Y并回车。

    以hadoop用户成功格式化NameNode

    看到successfully formatted和Exiting with status 0表示格式化成功。

    格式化成功后的输出信息

  • 启动HDFS和YARN服务(确保当前是hadoop用户):

    start-dfs.sh

    启动HDFS服务

    start-yarn.sh

    启动YARN服务

  • 验证服务进程:使用jps命令可以查看Java进程,如果看到NameNode, DataNode, SecondaryNameNode, ResourceManager, NodeManager等进程,说明集群已成功启动。

  • 命令行验证:通过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命令行操作验证 成功显示文件内容,证明HDFS功能正常。

  • Web UI验证:Hadoop提供了Web界面来监控集群状态。

    • HDFS NameNode Web UI: http://<虚拟机的IP地址>:9870
    • YARN ResourceManager Web UI: http://<虚拟机的IP地址>:8088

    在虚拟机的火狐浏览器中访问http://localhost:9870和http://localhost:8088。

    HDFS NameNode Web界面

    YARN ResourceManager Web界面

    看到这两个Web界面正常显示,标志着Hadoop伪分布式集群已成功部署并处于可用状态。

  • 第六章:Hadoop核心概念与后续步骤
    6.1 Hadoop核心构成

    Hadoop是一个用于分布式存储和分布式处理大规模数据集的开源框架。它主要解决两个核心问题:

  • 海量数据存储(Storage Problem): 当数据量超过单台计算机的存储能力时,需要一种能够横向扩展的存储方案。Hadoop通过其**HDFS(Hadoop Distributed File System)**组件解决了这个问题。HDFS将大文件切分成数据块(Block),并将这些块的多个副本存储在集群的不同机器上,提供了高容错性和高吞吐量的数据访问。
  • 海量数据计算(Computation Problem): 对存储在多台机器上的海量数据进行分析计算,效率低下。Hadoop通过其MapReduce计算模型和**YARN(Yet Another Resource Negotiator)**资源管理框架解决了这个问题。YARN负责集群资源的调度和管理,而MapReduce(或其他计算框架如Spark、Flink)则是在YARN之上运行的分布式计算程序,实现了“计算向数据移动”,大大提高了处理效率。
  • 6.2 准备实际应用:MovieLens数据集

    为了进行实际的数据分析任务,可以准备一个公开的数据集,例如MovieLens。

  • 重新启动Hadoop(如果已关闭):

    # 确保是hadoop用户
    start-dfs.sh
    start-yarn.sh

    启动Hadoop服务

  • 下载并解压数据集:这里使用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伪分布式环境已经成功搭建在VMware虚拟机中。这个过程不仅涵盖了从零开始的每一步操作,还深入探讨了权限配置、网络DNS、环境变量设置等环节中常见的错误及其排查方法。这个稳定运行的Hadoop环境,为后续学习MapReduce编程、HDFS操作以及探索更复杂的Hadoop生态系统组件打下了坚实的基础。

    赞(0)
    未经允许不得转载:171主机测评 » 基于VMware与CentOS 7的Hadoop集群部署全景指南
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址