杰瑞科技汇

Hadoop环境搭建教程,新手如何快速配置?

  1. 环境准备:配置虚拟机、网络、主机名等。
  2. 基础软件安装:安装 JDK、Hadoop、配置 SSH 免密登录。
  3. Hadoop 配置:修改核心配置文件,使其在单节点上以“伪分布式”模式运行。
  4. 格式化与启动:首次格式化 HDFS 文件系统,并启动 Hadoop 相关进程。
  5. 验证运行:通过 Web UI 和命令行验证 Hadoop 是否正常工作。

第一步:环境准备

在开始之前,请确保你已经准备好一台 Linux 虚拟机(推荐使用 VMware 或 VirtualBox),本教程以 CentOS 7 Minimal (64-bit) 为例。

Hadoop环境搭建教程,新手如何快速配置?-图1
(图片来源网络,侵删)

1 关闭防火墙和 SELinux

为了简化配置,我们先关闭防火墙和 SELinux,在生产环境中,请务必进行正确配置,而不是简单关闭。

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭 SELinux
setenforce 0
# 临时关闭,重启后失效
# 永久关闭,需要编辑 /etc/selinux/config 文件,将 SELINUX=disabled

2 配置静态 IP 和主机名

为了方便后续操作,建议配置静态 IP 和一个有意义的域名。

# 1. 编辑网络配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 2. 修改以下内容 (根据你的实际情况修改 IP 和网关)
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.10.100
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=8.8.8.8
# 3. 重启网络服务
systemctl restart network
# 4. 配置主机名
hostnamectl set-hostname hadoop-node1
# 5. 配置 hosts 文件,实现主机名到 IP 的映射
vi /etc/hosts

/etc/hosts 文件中添加以下内容:

168.10.100   hadoop-node1

3 安装并配置 JDK

Hadoop 需要 Java 环境支持,我们安装 OpenJDK 1.8。

Hadoop环境搭建教程,新手如何快速配置?-图2
(图片来源网络,侵删)
# 1. 安装 OpenJDK 1.8
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y
# 2. 验证安装
java -version
javac -version
# 3. 配置 JAVA_HOME 环境变量
# 编辑 /etc/profile 文件
vi /etc/profile

在文件末尾添加:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.x.x.x.x.el7_9.x86_64
# 可以使用命令 `echo $JAVA_HOME` 来确认你的具体路径
export PATH=$PATH:$JAVA_HOME/bin

使配置生效:

source /etc/profile

第二步:安装和配置 Hadoop

1 创建 Hadoop 用户

为了安全,不建议使用 root 用户运行 Hadoop。

# 创建用户
useradd hadoop
# 设置密码
passwd hadoop
# 赋予 sudo 权限 (可选)
visudo
# 在文件末尾添加 hadoop ALL=(ALL) NOPASSWD: ALL

2 配置 SSH 免密登录

Hadoop 的进程间通信需要用到 SSH,配置 hadoop 用户可以免密登录本机。

# 切换到 hadoop 用户
su - hadoop
# 生成 SSH 密钥对 (一路回车即可)
ssh-keygen -t rsa
# 将公钥追加到授权列表中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 设置授权文件的权限
chmod 600 ~/.ssh/authorized_keys
# 测试免密登录
ssh localhost
# 如果不需要输入密码就能登录,则配置成功

3 下载并解压 Hadoop

从 Hadoop 官方下载页面下载稳定版本(hadoop-3.3.6)。

# 切换到 hadoop 用户
su - hadoop
# 创建一个目录用于存放安装包
mkdir -p /opt/software
# 下载 Hadoop (请替换为最新版本的链接)
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
# 将安装包解压到 /usr/local 目录
tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/
# 创建软链接,方便使用
ln -s /usr/local/hadoop-3.3.6 /usr/local/hadoop
# 修改 hadoop 目录的所属用户
sudo chown -R hadoop:hadoop /usr/local/hadoop

4 配置 Hadoop 环境变量

hadoop 用户的 ~/.bashrc 文件中配置 Hadoop 相关的环境变量。

# 编辑 .bashrc 文件
vi ~/.bashrc

在文件末尾添加:

# Hadoop Environment Variables
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

使配置生效:

source ~/.bashrc

第三步:配置 Hadoop 核心文件

这是整个搭建过程中最关键的一步,我们需要修改 $HADOOP_HOME/etc/hadoop 目录下的几个核心 XML 配置文件。

1 core-site.xml

配置 Hadoop 的核心属性,如 NameNode 的地址。

vi $HADOOP_HOME/etc/hadoop/core-site.xml

<configuration> 标签内添加:

<configuration>
    <!-- 指定 HDFS 中 NameNode 的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-node1:9000</value>
    </property>
    <!-- 指定 Hadoop 运行时产生文件的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/data/tmp</value>
    </property>
</configuration>

2 hdfs-site.xml

配置 HDFS 的相关属性,如副本数、DataNode 存储目录等。

vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml

<configuration> 标签内添加:

<configuration>
    <!-- 指定 HDFS 副本数量,伪分布式模式设置为 1 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <!-- 指定 NameNode 数据存储目录 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/usr/local/hadoop/data/dfs/name</value>
    </property>
    <!-- 指定 DataNode 数据存储目录 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/usr/local/hadoop/data/dfs/data</value>
    </property>
    <!-- 配置 Web UI 允许访问的主机 -->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop-node1:9870</value>
    </property>
</configuration>

3 mapred-site.xml

配置 MapReduce 框架,指定使用 YARN 作为资源调度器。

# 首先需要重命名模板文件
cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
# 然后编辑
vi $HADOOP_HOME/etc/hadoop/mapred-site.xml

<configuration> 标签内添加:

<configuration>
    <!-- 指定 MapReduce 运行在 YARN 上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 配置 MapReduce JobHistory Server 的地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop-node1:10020</value>
    </property>
    <!-- 配置 MapReduce JobHistory Server 的 Web UI 地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop-node1:19888</value>
    </property>
</configuration>

4 yarn-site.xml

配置 YARN 的相关属性。

vi $HADOOP_HOME/etc/hadoop/yarn-site.xml

<configuration> 标签内添加:

<configuration>
    <!-- NodeManager 上运行的辅助服务 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定 ResourceManager 的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop-node1</value>
    </property>
    <!-- 配置 Web UI 允许访问的主机 -->
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hadoop-node1:8088</value>
    </property>
</configuration>

5 配置 workers

指定哪些节点是 Worker 节点,在伪分布式模式下,只有本机一个节点。

vi $HADOOP_HOME/etc/hadoop/workers
```修改为:
```bash
hadoop-node1

注意:在 Hadoop 2.x 中,这个文件可能名为 slaves,Hadoop 3.x 改名为 workers


第四步:格式化与启动 Hadoop

1 格式化 HDFS 文件系统

在第一次启动 HDFS 之前,必须对 NameNode 进行格式化。此操作会清空 HDFS 上的所有数据,请谨慎操作!

# 切换到 hadoop 用户
su - hadoop
# 格式化命令
hdfs namenode -format

如果看到 ... has been successfully formatted 的提示,说明格式化成功。

2 启动 Hadoop 集群

Hadoop 提供了便捷的脚本来启动所有相关服务。

# 启动所有 Hadoop 相关服务 (HDFS 和 YARN)
start-dfs.sh
start-yarn.sh

3 检查进程

使用 jps 命令检查是否所有进程都已成功启动。

jps

如果一切正常,你应该能看到以下进程:

12345 NameNode
23456 DataNode
34567 NodeManager
45678 ResourceManager
56789 SecondaryNameNode

SecondaryNameNode 是 HDFS 的重要进程,必须存在。


第五步:验证 Hadoop 是否正常运行

1 通过 Web UI 验证

打开浏览器,访问以下地址,查看各个服务的 Web 管理界面。

  • HDFS NameNode UI: http://hadoop-node1:9870

    • 你可以看到 Datanodes 信息,应该有一个 Live Node。
    • 点击 "Utilities" -> "Browse the file system",可以看到 /user 目录。
  • YARN ResourceManager UI: http://hadoop-node1:8088

    • 你可以看到 Cluster、Nodes 等信息,应该有一个 Active Node。
    • 点击 "Applications",可以看到当前运行的任务。
  • MapReduce JobHistory Server UI: http://hadoop-node1:19888

    暂时不会有历史任务,但可以确认服务已启动。

2 运行 WordCount 示例

这是验证 Hadoop 是否能正常处理 MapReduce 任务的经典测试。

# 切换到 hadoop 用户
su - hadoop
# 1. 创建一个输入文件
echo "hello world hello hadoop" > input.txt
# 2. 在 HDFS 上创建一个输入目录
hdfs dfs -mkdir -p /input
# 3. 将本地文件上传到 HDFS
hdfs dfs -put input.txt /input/
# 4. 运行 WordCount 示例
# hadoop jar <jar_file> <main_class> <input_path> <output_path>
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /input /output
# 5. 查看运行结果
hdfs dfs -cat /output/*
# 你应该会看到类似下面的输出:
#       hadoop     1
#       hello      2
#       world      1
# 6. 也可以查看 Web UI (http://hadoop-node1:8088) 确认任务是否成功完成。

常用管理命令

  • 停止集群:
    stop-yarn.sh
    stop-dfs.sh
  • 查看 HDFS 文件:
    hdfs dfs -ls /
    hdfs dfs -ls /output
  • 删除 HDFS 目录:
    hdfs dfs -rm -r /output
  • 查看日志:
    • 日志文件通常位于 $HADOOP_HOME/logs/ 目录下。
    • cat $HADOOP_HOME/logs/hadoop-hadoop-namenode-hadoop-node1.log

至此,你已经成功搭建了一个 Hadoop 伪分布式环境!这个环境在单台机器上模拟了 Hadoop 集群的所有核心组件,非常适合用于学习、开发和测试 Hadoop 的各种组件(如 HDFS, MapReduce, YARN)。

如果你遇到问题,请仔细检查:

  1. 网络配置/etc/hosts 是否正确。
  2. 环境变量JAVA_HOMEHADOOP_HOME 是否配置正确并已生效。
  3. 配置文件:XML 文件中的路径和端口是否与你的环境匹配。
  4. 权限问题hadoop 用户是否有对数据目录和日志目录的读写权限。
  5. 日志:查看各个服务的日志文件,通常能找到错误原因。
分享:
扫描分享到社交APP
上一篇
下一篇