Hadoop如何在Linux上进行集群搭建
小樊
40
2025-12-24 11:02:12
Linux上搭建Hadoop集群实操指南
一 环境准备与规划
- 节点与角色建议:至少准备3台Linux主机(如CentOS 7/8或Ubuntu 20.04+),规划为1个NameNode + 1个ResourceManager + 多个DataNode/NodeManager;测试环境可复用一台作为SecondaryNameNode或部署JobHistoryServer。示例规划:
- 主机名与IP:master 192.168.56.100、slave1 192.168.56.101、slave2 192.168.56.102、slave3 192.168.56.103
- 角色分配:master 运行 NameNode/ResourceManager;slave1 运行 DataNode/NodeManager/SecondaryNameNode;slave2/slave3 运行 DataNode/NodeManager;可选在 slave3 运行 JobHistoryServer
- 基础配置
- 设置主机名与**/etc/hosts**互信解析(所有节点一致)
- 建议配置静态IP与NTP时间同步
- 实验环境可关闭防火墙/SELinux,生产环境按需放通端口或采用零信任网关
- 创建统一Hadoop用户与目录(如 /opt/hadoop/{apps,data})以便权限与运维统一
二 安装与基础配置
- 安装Java
- 建议安装JDK 8(Hadoop 3.x对JDK 11/17支持需验证具体版本),在所有节点执行:
- CentOS/RHEL:sudo yum install -y java-1.8.0-openjdk-devel
- Ubuntu/Debian:sudo apt-get update && sudo apt-get install -y openjdk-8-jdk
- 配置环境变量(示例写入 /etc/profile 或 ~/.bashrc):
- export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
- export HADOOP_HOME=/opt/hadoop/apps/hadoop-3.2.x
- export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 安装Hadoop
- 下载并解压(所有节点一致):
- wget https://downloads.apache.org/hadoop/core/hadoop-3.2.12/hadoop-3.2.12.tar.gz
- tar -xzf hadoop-3.2.12.tar.gz -C /opt/hadoop/apps
- 在 $HADOOP_HOME/etc/hadoop/hadoop-env.sh 中显式设置:export JAVA_HOME=…
- SSH免密登录
- 在 master 生成密钥:ssh-keygen -t rsa
- 将公钥分发至所有节点(含本机):ssh-copy-id user@master;ssh-copy-id user@slave1;ssh-copy-id user@slave2;ssh-copy-id user@slave3
- 验证:ssh master、ssh slave1 等无需口令即可登录
三 核心配置
- 配置目录:$HADOOP_HOME/etc/hadoop/
- 关键文件与示例(按你的主机名与目录调整):
- core-site.xml
-
- fs.defaultFS**hdfs://master:9000**
- hadoop.tmp.dir**/opt/hadoop/data/tmp**
-
- hdfs-site.xml
-
- dfs.replication**3**
- dfs.namenode.name.dir**file:///opt/hadoop/data/hdfs/name**
- dfs.datanode.data.dir**file:///opt/hadoop/data/hdfs/data**
- dfs.permissions.enabled**false**
-
- mapred-site.xml(如文件不存在先 cp mapred-site.xml.template mapred-site.xml)
-
- mapreduce.framework.name**yarn**
- mapreduce.jobhistory.address**master:10020**
- mapreduce.jobhistory.webapp.address**master:19888**
-
- yarn-site.xml
-
- yarn.resourcemanager.hostname**master**
- yarn.nodemanager.aux-services**mapreduce_shuffle**
- yarn.nodemanager.aux-services.mapreduce.shuffle.class**org.apache.hadoop.mapred.ShuffleHandler**
-
- workers(或旧版 slaves)
- 写入所有 DataNode/NodeManager 主机名,每行一个:
- 目录准备(所有节点)
- mkdir -p /opt/hadoop/data/{tmp,hdfs/{name,data}}
- chown -R hadoop:hadoop /opt/hadoop/data(如使用非root用户)
四 启动与验证
- 格式化NameNode(仅首次)
- 启动集群
- 方式一(推荐脚本):start-dfs.sh;start-yarn.sh
- 方式二(逐进程):hadoop-daemon.sh start namenode;yarn-daemon.sh start resourcemanager;在每台工作节点启动 datanode 与 nodemanager
- 常用验证
- 进程检查:jps(应看到 NameNode/ResourceManager/DataNode/NodeManager 等)
- HDFS健康:hdfs dfsadmin -report
- Web UI:
- HDFS NameNode:http://master:50070
- YARN ResourceManager:http://master:8088
- JobHistory:http://master:19888
- 运行测试
- 创建目录:hdfs dfs -mkdir -p /user/hadoop
- 上传文件:hdfs dfs -put $HADOOP_HOME/README.txt /
- 查看文件:hdfs dfs -cat /README.txt | head
五 常见问题与扩展
- 常见问题
- 节点不通或DataNode起不来:检查 /etc/hosts、防火墙/SELinux、网络连通性(如 50010 数据端口)、目录权限
- 端口被占用:lsof -i:50070/8088/50010;必要时更换端口或释放占用进程
- 权限问题:HDFS权限开关(dfs.permissions.enabled)、本地目录属主(hadoop:hadoop)
- JDK不一致:各节点 java -version 与 JAVA_HOME 保持一致
- 扩展
- 高可用(HA):引入 ZooKeeper 与 QJM/JournalNode,部署 Active/Standby NameNode 与 ZKFailoverController(ZKFC);ResourceManager 也可做 HA
- 监控与运维:使用 Ambari 或 Cloudera Manager 进行安装、配置与监控(Ambari Web:http://namenode_ip:8080)