温馨提示×

CentOS怎样配置HDFS集群

小樊
43
2026-01-06 08:46:03
栏目: 智能运维

在 CentOS 上配置 HDFS 集群

一 环境准备与规划

  • 节点规划示例:至少准备1 台 NameNode + 多台 DataNode;示例主机名为master、slave1、slave2(可按需扩展)。所有节点需在同一网络,能互相解析主机名。
  • 基础环境:安装Java 8(OpenJDK 或 Oracle JDK),配置SSH 免密登录(NameNode 能免密登录各 DataNode),建议时间同步(如 chrony/ntp),并准备 Hadoop 发行包(如 Hadoop 3.3.x)。
  • 目录规划:为 HDFS 数据与日志预置本地目录(如 /opt/hadoop/data/namenode、/opt/hadoop/data/datanode),并确保运行用户对这些目录有读写权限。

二 安装与基础配置

  • 安装 Java(所有节点)
    • 命令:sudo yum install -y java-1.8.0-openjdk-devel
  • 安装 Hadoop(建议只在 NameNode 下载后分发)
    • 下载与解压:wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz && tar -xzvf hadoop-3.3.1.tar.gz -C /usr/local/ && mv /usr/local/hadoop-3.3.1 /usr/local/hadoop
  • 环境变量(所有节点)
    • 建议写入文件:/etc/profile.d/hadoop.sh
    • 内容:
      export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
      export HADOOP_HOME=/usr/local/hadoop
      export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
      
    • 生效:source /etc/profile.d/hadoop.sh
  • 指定 Java(可选,增强稳定性)
    • 编辑 $HADOOP_HOME/etc/hadoop/hadoop-env.shexport JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
  • SSH 免密(NameNode 执行)
    • ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    • 将公钥分发至各节点:ssh-copy-id hadoop@slave1ssh-copy-id hadoop@slave2(如使用 root,则目标用户为 root)

三 配置 HDFS 核心文件

  • 统一在所有节点放置相同配置(建议先在 NameNode 编辑,再同步到各节点)。
  • 配置文件路径:$HADOOP_HOME/etc/hadoop/
  1. core-site.xml
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/hadoop/data/tmp</value>
  </property>
</configuration>
  1. hdfs-site.xml
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value> <!-- 小于等于 DataNode 数量 -->
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/opt/hadoop/data/namenode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/opt/hadoop/data/datanode</value>
  </property>
  <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
  </property>
</configuration>
  1. workers(原 slaves,列出所有 DataNode 主机名)
slave1
slave2
  1. 同步配置到所有节点(示例)
  • rsync -av $HADOOP_HOME/etc/hadoop/ hadoop@slave1:$HADOOP_HOME/etc/hadoop/
  • rsync -av $HADOOP_HOME/etc/hadoop/ hadoop@slave2:$HADOOP_HOME/etc/hadoop/

四 启动与验证

  • 创建本地数据目录(所有节点)
    • mkdir -p /opt/hadoop/data/{tmp,namenode,datanode}
  • 格式化 NameNode(仅在 NameNode 执行一次)
    • hdfs namenode -format
  • 启动 HDFS(在 NameNode 执行)
    • start-dfs.sh
  • 进程检查
    • NameNode:jps 应看到 NameNode;各 DataNode 应看到 DataNode
  • Web 界面
    • HDFS NameNode UI:http://master:9870(Hadoop 3.x 默认端口;Hadoop 2.x 为 50070
  • 基本操作验证
    • hdfs dfs -mkdir /test
    • hdfs dfs -put /etc/hosts /test/
    • hdfs dfs -ls /test

五 防火墙与常见问题

  • 防火墙放行(示例为 firewalld)
    • sudo firewall-cmd --permanent --add-port=9000/tcp
    • sudo firewall-cmd --permanent --add-port=9870/tcp(Hadoop 3.x;2.x 用 50070
    • sudo firewall-cmd --reload
  • 常见问题与要点
    • 主机名解析:确保所有节点 /etc/hosts 或 DNS 能正确解析 master/slaveX
    • SSH 免密:NameNode 必须能免密登录各 DataNode,否则 DataNode 不会启动。
    • 目录权限:运行用户对 /opt/hadoop/data 及子目录具备读写权限。
    • 副本数:生产环境建议 dfs.replication=3,且不超过 DataNode 数量
    • 时间与 SELinux:建议时间同步;如启用 SELinux,需设置为 permissive 或按需配置策略,避免权限拦截。

0