温馨提示×

Hadoop Linux集群如何搭建

小樊
35
2026-01-01 06:02:12
栏目: 智能运维

Hadoop Linux集群搭建实操指南

一 环境准备与规划

  • 操作系统与软件版本
    • 推荐:CentOS 7/8Ubuntu 20.04+Java 8(OpenJDK 8 或 Oracle JDK 8);Hadoop 3.3.x/3.4.x(二进制包部署)。虚拟化环境亦可,注意网络与存储性能。
  • 节点与角色(示例三节点)
    • hadoop01NameNode、ResourceManager
    • hadoop02DataNode、NodeManager、SecondaryNameNode
    • hadoop03DataNode、NodeManager
    • 说明:SecondaryNameNode 不建议与 NameNode 同机ResourceManager 较耗内存,尽量与 NameNode 分开。
  • 基础网络与目录
    • 所有节点配置静态IP与**/etc/hosts解析;创建数据与日志目录(示例:/opt/hadoop/data**、/opt/hadoop/logs)。

二 基础环境配置

  • 主机名与解析
    • 设置主机名:hostnamectl set-hostname hadoop01(各节点分别设置)
    • 统一解析:/etc/hosts 添加
      192.168.1.10 hadoop01
      192.168.1.11 hadoop02
      192.168.1.12 hadoop03
      
  • 关闭防火墙与 SELinux(测试环境常用)
    • systemctl stop firewalld && systemctl disable firewalld
    • sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config && setenforce 0
  • 时间同步
    • 建议启用 chronyyum install -y chrony && systemctl enable --now chronyd
  • 安装 Java
    • CentOS:yum install -y java-1.8.0-openjdk-devel
    • Ubuntu:apt update && apt install -y openjdk-8-jdk
    • 验证:java -version
  • SSH 免密登录
    • 生成密钥:ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    • 分发公钥:ssh-copy-id hadoop01ssh-copy-id hadoop02ssh-copy-id hadoop03
    • 本机也要免密:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

三 Hadoop安装与核心配置

  • 安装 Hadoop(所有节点一致)
    • 下载并解压:wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz && tar -xzvf hadoop-3.3.6.tar.gz -C /opt/ && mv /opt/hadoop-3.3.6 /opt/hadoop
    • 环境变量(示例写入 ~/.bashrc/etc/profile.d/hadoop.sh):
      export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
      export HADOOP_HOME=/opt/hadoop
      export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
      
    • 使生效:source ~/.bashrc
  • 关键配置($HADOOP_HOME/etc/hadoop/)
    • hadoop-env.sh / yarn-env.sh
      export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
      
    • core-site.xml
      <configuration>
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://hadoop01:8020</value>
        </property>
        <property>
          <name>hadoop.tmp.dir</name>
          <value>/opt/hadoop/tmp</value>
        </property>
      </configuration>
      
    • hdfs-site.xml
      <configuration>
        <property>
          <name>dfs.replication</name>
          <value>2</value>
        </property>
        <property>
          <name>dfs.namenode.name.dir</name>
          <value>file:///opt/hadoop/data/dfs/name</value>
        </property>
        <property>
          <name>dfs.datanode.data.dir</name>
          <value>file:///opt/hadoop/data/dfs/data</value>
        </property>
        <property>
          <name>dfs.namenode.http-address</name>
          <value>hadoop01:9870</value>
        </property>
        <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>hadoop02:9868</value>
        </property>
      </configuration>
      
    • mapred-site.xml
      <configuration>
        <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
        </property>
        <property>
          <name>mapreduce.jobhistory.address</name>
          <value>hadoop01:10020</value>
        </property>
        <property>
          <name>mapreduce.jobhistory.webapp.address</name>
          <value>hadoop01:19888</value>
        </property>
      </configuration>
      
    • yarn-site.xml
      <configuration>
        <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
        </property>
        <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>hadoop01</value>
        </property>
        <property>
          <name>yarn.nodemanager.env-whitelist</name>
          <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
        </property>
      </configuration>
      
    • workers(3.x 使用 workers 文件)
      hadoop02
      hadoop03
      
  • 分发与目录
    • /opt/hadoop~/.bashrc 分发到 hadoop02/03scp -r /opt/hadoop hadoop02:/opt/scp ~/.bashrc hadoop02:~/ && ssh hadoop02 "source ~/.bashrc"
    • 创建数据目录:mkdir -p /opt/hadoop/data/dfs/{name,data}

四 启动与验证

  • 格式化与启动
    • 仅在 NameNode(hadoop01) 执行:hdfs namenode -format
    • 启动 HDFS:start-dfs.sh
    • 启动 YARN:start-yarn.sh
    • 可选:启动历史服务(在 hadoop01):mapred --daemon start historyserver
  • 进程与端口检查
    • 进程检查:jps(应见到 NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager 等)
    • Web UI:
      • HDFS NameNode:http://hadoop01:9870
      • YARN ResourceManager:http://hadoop01:8088
      • MapReduce HistoryServer:http://hadoop01:19888
  • 功能验证
    • 创建目录:hdfs dfs -mkdir -p /user/root
    • 上传文件:hdfs dfs -put /etc/hosts /user/root/
    • 查看文件:hdfs dfs -ls /user/roothdfs dfs -cat /user/root/hosts
    • 集群报告:hdfs dfsadmin -report

五 常见问题与高可用扩展

  • 常见问题速排
    • 节点不通或端口被拒:检查 /etc/hosts防火墙/SELinux、网络连通与 SSH 免密;必要时临时关闭防火墙验证。
    • DataNode 未注册:核对 dfs.datanode.data.dir 权限与路径、NameNode/DataNode clusterID 一致、时间同步。
    • 8088/50070 打不开:确认 ResourceManager/NameNode 进程存活、监听端口与访问地址无误。
  • 高可用扩展(HA)
    • 引入 ZooKeeper(≥3 节点,奇数)JournalNode(≥3 节点,奇数),部署 ZKFailoverController(ZKFC);HDFS 使用 nameservicesQJM 共享编辑日志,YARN 部署 ResourceManager HA。示例要点:
      • core-site.xml:fs.defaultFS=hdfs://myclusterha.zookeeper.quorum=zk1:2181,zk2:2181,zk3:2181
      • hdfs-site.xml:dfs.nameservices=myclusterdfs.ha.namenodes.mycluster=nn1,nn2dfs.namenode.rpc-address...dfs.shared.edits.dir=qjournal://.../myclusterdfs.ha.automatic-failover.enabled=truedfs.ha.fencing.methods=sshfence
      • 启动顺序:先启 ZooKeeperJournalNode,再格式化 ZKFC,最后启动 HDFS/YARN

0