当前位置: 首页 > news >正文

基于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,开始创建新的虚拟机。

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

    点击新建虚拟机

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

    选择典型安装

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

    选择硬件兼容性

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

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

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

    确认镜像文件选择

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

    设置用户信息

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

    选择虚拟机存储位置

1.3 配置虚拟机硬件资源

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

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

    配置处理器核心为4核

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

    配置内存为8GB

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

    选择NAT网络类型

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

    选择I/O控制器类型

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

    选择磁盘类型

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

    选择创建新虚拟磁盘

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

    指定磁盘容量和存储方式

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

    确认磁盘文件位置

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

    完成虚拟机创建向导

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

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

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

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

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    
  3. 设置权限authorized_keys文件对权限有严格要求,必须确保只有文件所有者有读写权限,否则SSH服务会拒绝使用它。

    chmod 0600 ~/.ssh/authorized_keys
    
  4. 测试免密登录:尝试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

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

    su - root
    

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

    切换到root用户

  2. 执行visudo命令。

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

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

    使用visudo为用户添加sudo权限

  4. 按下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)这个文本图形化工具来管理网络配置,这样可以避免配置被系统重启覆盖。

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

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

    在nmtui中选择编辑连接

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

    选择要编辑的网络连接ens33

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

    在nmtui中添加DNS服务器地址

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

    DNS服务器配置完成效果

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

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

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

    cat /etc/resolv.conf
    

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

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

在解决网络问题的基础上,为了提高软件包的下载速度,可以将yum的默认源更换为国内的镜像源,例如阿里云或清华大学的镜像源。

  1. 备份默认源
    sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    
  2. 下载新的源文件(这里使用阿里云的源):
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
  3. 清理并生成新缓存
    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
  1. 下载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

  2. 解压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. 重命名目录:为了方便后续配置和引用,将带有版本号的目录名hadoop-3.3.6重命名为hadoop

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

    重命名Hadoop目录

4.2 配置Hadoop环境变量

为了能在任何路径下直接使用hadoophdfs等命令,需要将Hadoop的binsbin目录添加到系统的PATH环境变量中。

  1. 编辑系统全局配置文件/etc/profile

    sudo vi /etc/profile
    
  2. 在文件末尾添加以下内容:

    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    

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

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

    source /etc/profile
    
4.3 修改Hadoop核心配置文件

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

进入该目录:

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

进入Hadoop配置目录

  1. 配置 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

  2. 配置 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地址为localhost9000端口。

    配置core-site.xml

  3. 配置 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 首次启动尝试与用户问题
  1. 格式化NameNode:这是启动HDFS前的初始化步骤,它会创建文件系统的元数据存储结构。此操作只在第一次启动前执行,否则会清空HDFS上的所有数据。

    hdfs namenode -format
    

    首次格式化NameNode

  2. 启动HDFS和YARN

    start-dfs.sh
    start-yarn.sh
    

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

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

5.2 解决root用户启动问题

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

  1. 创建hadoop用户

    sudo useradd hadoop
    sudo passwd hadoop
    

    根据提示为新用户hadoop设置密码。

    创建并设置hadoop用户密码

  2. 修改 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未找到的错误

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

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

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

  2. 修正 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 成功启动并验证集群

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

  1. hadoop用户重新格式化NameNode

    su hadoop
    hdfs namenode -format
    

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

    以hadoop用户成功格式化NameNode

    看到successfully formattedExiting with status 0表示格式化成功。

    格式化成功后的输出信息

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

    start-dfs.sh
    

    启动HDFS服务

    start-yarn.sh
    

    启动YARN服务

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

  4. 命令行验证:通过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功能正常。

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

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

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

    HDFS NameNode Web界面

    YARN ResourceManager Web界面

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

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

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

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

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

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

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

    启动Hadoop服务

  2. 下载并解压数据集:这里使用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生态系统组件打下了坚实的基础。

http://www.dtcms.com/a/592464.html

相关文章:

  • 【系统分析师】考后总结
  • Java 枚举类(Enum)技术文档
  • Qt 里写 QUdpSocket 发一串数据为例,用 4 层模型顺一遍流程
  • 太阳光模拟器:在电动天窗直射工况下HUD测试中的应用
  • 网站seo分析学做网站多少钱
  • JMeter与Postman的区别
  • (对标 Spring AI 和 LangChain4j)Solon AI MCP v3.7.0, v3.6.4, v3.5.8 发布(支持 LTS)
  • 玩转二叉树:数据结构中的经典之作
  • ASP.NET网站开发之“跨域”
  • 服饰品牌网站建设千川推广官网
  • Vue2/3面试题
  • C++ ODB ORM 完全指南:从入门到实战应用
  • Java-----集合
  • 金昌市网站建设vfp wordpress
  • 网站建设,从用户角度开始私人做网站
  • 哪个网站做婚礼邀请函好武进区城乡建设局网站
  • 网站开发成本报表新开传奇网站单职业
  • 网站设计与网页配色实例精讲微信登陆wordpress
  • 网站建设外贸开发软件用什么工具
  • 建设工程行业招工信息网站企业网站营销的优缺点及案例
  • 网站栏目策划如何推广自己的产品
  • 襄阳建设局网站快速排名优化推广价格
  • 手机软件制作网站平台dede自动生成网站地图
  • 漳州建设局网站首页单页关键字优化
  • 有网页源码 怎么做网站郑州外语网站建站优化
  • 宁波淘宝网站建设做电器推广的网站
  • 苏州做网站品牌公司wordpress 多主题
  • 怎么增加网站浏览量wordpress收不到
  • 建设网站费用吗怎样自己搭建网站
  • 网站双收录怎么做301跳转宁波做网站皆选蓉胜网络