
前言本文将详细介绍如何在 Ubuntu 16 系统上搭建Hadoop 3.1.0 完全分布式集群。整个集群由 3 台虚拟机组成1 台主节点master和 2 台从节点slave1、slave2。文章涵盖从环境准备、免密登录配置、JDK 安装到 Hadoop 部署与启动验证的完整流程适合初学者跟着一步步操作。环境概览角色主机名操作系统主要进程主节点masterUbuntu 16NameNode、ResourceManager从节点slave1Ubuntu 16DataNode、NodeManager从节点slave2Ubuntu 16DataNode、NodeManager一、网络与免密登录配置1.1 查看各节点 IP 地址分别在三台虚拟机上执行ifconfig命令记录各自的 IP 地址1.2 配置主机名映射搭建完全分布式集群时三台虚拟机需要通过主机名互相识别。在每台机器上编辑/etc/hosts文件添加所有节点的映射关系vim /etc/hosts在文件中添加如下内容IP 地址替换为实际值172.16.55.97 master 172.16.55.232 slave1 172.16.55.116 slave21.3 生成 SSH 密钥在三台机器上分别生成 SSH 密钥对执行以下命令后全部按回车使用默认设置即可ssh-keygen -t rsa1.4 配置免密登录第一步在 master 上收集 slave1 和 slave2 的公钥到自己的authorized_keys文件中需要输入对应从节点的登录密码ssh slave1 cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys ssh slave2 cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys第二步在 slave1 和 slave2 上从 master 拉取合并后的authorized_keys文件ssh master cat ~/.ssh/authorized_keys ~/.ssh/authorized_keys 备选方案如果上述方式未能成功配置免密登录可在 master 上使用ssh-copy-id命令逐台分发公钥ssh-keygen -t rsa -P -f ~/.ssh/id_rsa ssh-copy-id -i ~/.ssh/id_rsa.pub rootmaster ssh-copy-id -i ~/.ssh/id_rsa.pub rootslave1 ssh-copy-id -i ~/.ssh/id_rsa.pub rootslave2二、安装 JDK2.1 在 master 上安装 JDK首先创建应用目录mkdir /app切换到/opt目录确认 JDK 安装包已存在如果没有需先上传到此目录解压 JDK 并移动到/app目录tar -zxvf jdk-8u11-linux-x64.tar.gz mv jdk1.8.0_11/ /app2.2 配置 JDK 环境变量编辑系统环境变量配置文件vim /etc/profile在文件末尾追加以下内容export LANGC.UTF-8 JAVA_HOME/app/jdk1.8.0_11 CLASSPATH.:$JAVA_HOME/lib/tools.jar PATH$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH使配置立即生效并验证source /etc/profile java -version2.3 将 JDK 分发到从节点先在 slave1 和 slave2 上创建/app目录# 在 slave1 和 slave2 上分别执行 mkdir /app回到 master将 JDK 打包并通过scp传输到两台从节点# 1. 打包压缩 tar -czf jdk.tar.gz -C /app jdk1.8.0_11 # 2. 分发到 slave1 和 slave2 scp jdk.tar.gz rootslave1:/app/ scp jdk.tar.gz rootslave2:/app/在 slave1 和 slave2 上分别解压tar -xzf /app/jdk.tar.gz -C /app/2.4 同步环境变量配置文件在 master 上将配置文件发送到从节点scp /etc/profile rootslave1:/etc/ scp /etc/profile rootslave2:/etc/在 slave1 和 slave2 上使配置生效source /etc/profile三、安装与配置 Hadoop3.1 解压 Hadoop在 master 上将 Hadoop 安装包解压到/app目录并重命名文件夹以简化后续路径tar -zxvf hadoop-3.1.0.tar.gz -C /app cd /app mv hadoop-3.1.0/ hadoop3.13.2 修改 Hadoop 配置文件Hadoop 的配置文件位于/app/hadoop3.1/etc/hadoop/目录下需要依次修改以下6 个文件配置文件作用hadoop-env.sh指定 Hadoop 运行所需的 JDK 路径yarn-env.sh指定 YARN 运行所需的 JDK 路径core-site.xml配置 HDFS 的默认文件系统地址和临时目录hdfs-site.xml配置 NameNode 和 DataNode 的存储路径及副本数mapred-site.xml指定 MapReduce 使用 YARN 框架yarn-site.xml配置 ResourceManager 地址和 Shuffle 服务进入配置文件目录cd /app/hadoop3.1/etc/hadoop/① hadoop-env.shvim hadoop-env.sh添加 JDK 路径export JAVA_HOME/app/jdk1.8.0_11② yarn-env.shvim yarn-env.sh同样添加 JDK 路径export JAVA_HOME/app/jdk1.8.0_11③ core-site.xmlvim core-site.xml在configuration标签内添加以下内容configuration property namefs.default.name/name valuehdfs://master:9000/value descriptionHDFS的URI文件系统://namenode标识:端口号/description /property property namehadoop.tmp.dir/name value/usr/hadoop/tmp/value descriptionnamenode上本地的hadoop临时文件夹/description /property /configuration④ hdfs-site.xmlvim hdfs-site.xml配置 NameNode 元数据路径、DataNode 数据存储路径以及副本数设为 2与从节点数量一致configuration property namedfs.name.dir/name value/usr/hadoop/hdfs/name/value descriptionnamenode上存储hdfs名字空间元数据/description /property property namedfs.data.dir/name value/usr/hadoop/hdfs/data/value descriptiondatanode上数据块的物理存储位置/description /property property namedfs.replication/name value2/value /property /configuration⑤ mapred-site.xmlvim mapred-site.xml指定 MapReduce 作业运行在 YARN 框架之上configuration property namemapreduce.framework.name/name valueyarn/value /property /configuration⑥ yarn-site.xmlvim yarn-site.xml指定 ResourceManager 所在主机和 NodeManager 的 Shuffle 服务configuration property nameyarn.resourcemanager.hostname/name valuemaster/value /property property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property /configuration⑦ workers 文件编辑workers文件写入所有从节点的主机名每行一个vim workers内容如下slave1 slave23.3 创建数据存储目录在三台机器上创建 Hadoop 运行所需的临时目录和 HDFS 数据目录mkdir -p /usr/hadoop/tmp mkdir -p /usr/hadoop/hdfs/data mkdir -p /usr/hadoop/hdfs/name3.4 配置 Hadoop 环境变量编辑/etc/profile在文件末尾追加# Hadoop Environment export HADOOP_HOME/app/hadoop3.1 export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin使配置生效source /etc/profile四、分发 Hadoop 并配置启动脚本4.1 修改启动脚本的用户配置由于使用 root 用户操作需要在启动脚本中显式指定运行用户否则 Hadoop 会拒绝启动。进入/app/hadoop3.1/sbin目录cd /app/hadoop3.1/sbin在start-dfs.sh和stop-dfs.sh文件顶部添加HDFS_DATANODE_USERroot HADOOP_SECURE_DN_USERhdfs HDFS_NAMENODE_USERroot HDFS_SECONDARYNAMENODE_USERroot在start-yarn.sh和stop-yarn.sh文件顶部添加#!/usr/bin/env bash YARN_RESOURCEMANAGER_USERroot HADOOP_SECURE_DN_USERyarn YARN_NODEMANAGER_USERroot4.2 将 Hadoop 分发到从节点在 master 上打包并分发 Hadoop 到 slave1 和 slave2# 1. 在 master 上将 hadoop3.1 打包压缩 tar -czf /app/hadoop3.1.tar.gz -C /app hadoop3.1 # 2. 将压缩包快速传输到 slave1 和 slave2 scp /app/hadoop3.1.tar.gz rootslave1:/app/ scp /app/hadoop3.1.tar.gz rootslave2:/app/ # 3. 分别在 slave1 和 slave2 上解压可直接使用 ssh 远程一键解压 ssh rootslave1 tar -xzf /app/hadoop3.1.tar.gz -C /app/ rm -f /app/hadoop3.1.tar.gz ssh rootslave2 tar -xzf /app/hadoop3.1.tar.gz -C /app/ rm -f /app/hadoop3.1.tar.gz # 4. 最后清理 master 上的临时压缩包 rm -f /app/hadoop3.1.tar.gz4.3 同步环境变量到从节点将更新后的/etc/profile发送到从节点并使配置生效scp /etc/profile rootslave1:/etc/ scp /etc/profile rootslave2:/etc/在每台从节点上执行source /etc/profile五、启动与验证至此所有环境已配置完成接下来进行格式化和启动验证。5.1 格式化 NameNode⚠️注意此命令仅在首次启动时执行重复格式化会导致 DataNode 无法识别 NameNode。cd /app/hadoop3.1 bin/hadoop namenode -format5.2 启动集群并验证启动 HDFS 和 YARNstart-dfs.sh start-yarn.sh在各节点上使用jps命令查看运行的进程master应出现NameNode、SecondaryNameNode、ResourceManagerslave1 / slave2应出现DataNode、NodeManager也可以通过浏览器访问 Hadoop Web UI 进一步确认HDFS 管理界面http://master:9870YARN 管理界面http://master:8088总结本文完成了 Hadoop 3.1.0 完全分布式集群的搭建整体流程可归纳为以下几个关键阶段网络互通配置 hosts 映射 SSH 免密登录JDK 部署安装、配置环境变量并分发到所有节点Hadoop 配置修改 6 个核心配置文件明确集群角色分工分发与启动将 Hadoop 和配置同步到从节点格式化后启动集群如果在搭建过程中遇到问题建议优先检查以下几点各节点之间是否能通过主机名ping通SSH 免密登录是否配置成功ssh slave1不需要输入密码JDK 和 Hadoop 的环境变量是否在所有节点上都已生效防火墙是否已关闭或放行了相关端口