温馨提示×

如何配置Debian的HDFS集群

小樊
33
2025-12-25 02:41:26
栏目: 智能运维

在 Debian 上搭建 HDFS 集群的实操指南

一 环境规划与准备

  • 节点规划
    • NameNode ×1:管理 HDFS 元数据
    • DataNode ×N:存储数据块(建议至少 3 台)
    • 可选:SecondaryNameNode ×1(可与 NameNode 不同机,也可同机)
  • 软件与版本
    • Debian 11/12
    • Java 8 或 11(Hadoop 3.x 推荐 8 或 11)
    • Hadoop 3.3.x(示例:3.3.6)
  • 基础网络与主机名
    • 配置各节点 静态 IP/etc/hosts,确保节点间可互通
    • 示例 /etc/hosts(按需替换 IP 与主机名)
      192.168.50.201  node1
      192.168.50.202  node2
      192.168.50.203  node3
      
  • 用户与 SSH
    • 建议创建 hadoop 用户并加入 sudo
    • 配置 SSH 免密登录(至少 NameNode → 所有节点 免密)
  • 目录与权限
    • 规划数据与日志目录(示例:/opt/hadoop、/export/data/hadoop),并预先创建、赋权给 hadoop 用户

二 安装 Java 与 Hadoop

  • 安装 Java(示例为 OpenJDK 8;如需 Java 11,替换为 adoptopenjdk-11-hotspot 或 temurin-11-jdk)
    sudo apt update
    sudo apt install -y openjdk-8-jdk
    java -version
    
  • 安装 Hadoop(以 3.3.6 为例)
    wget -O /tmp/hadoop-3.3.6.tar.gz \
      https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
    sudo mkdir -p /usr/local
    sudo tar -xzf /tmp/hadoop-3.3.6.tar.gz -C /usr/local
    sudo ln -sfn /usr/local/hadoop-3.3.6 /usr/local/hadoop
    
  • 环境变量(建议写入 /etc/profile.d/hadoop.sh,便于统一生效)
    cat >/etc/profile.d/hadoop.sh <<'EOF'
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    EOF
    source /etc/profile
    
  • 验证安装
    hadoop version
    

三 配置 HDFS 核心文件

  • 配置 hadoop-env.sh(设置 JAVA_HOME 与运行用户)
    cat >$HADOOP_HOME/etc/hadoop/hadoop-env.sh <<'EOF'
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    # 如使用 root 运行,请按需设置(生产建议专用 hadoop 用户)
    export HDFS_NAMENODE_USER=hadoop
    export HDFS_DATANODE_USER=hadoop
    export HDFS_SECONDARYNAMENODE_USER=hadoop
    EOF
    
  • 配置 core-site.xml(指定默认文件系统与本地临时目录)
    cat >$HADOOP_HOME/etc/hadoop/core-site.xml <<'EOF'
    <configuration>
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node1:8020</value>
      </property>
      <property>
        <name>hadoop.tmp.dir</name>
        <value>/export/data/hadoop</value>
      </property>
      <property>
        <name>hadoop.http.staticuser.user</name>
        <value>hadoop</value>
      </property>
    </configuration>
    EOF
    
  • 配置 hdfs-site.xml(副本数、NameNode 与 DataNode 数据目录)
    cat >$HADOOP_HOME/etc/hadoop/hdfs-site.xml <<'EOF'
    <configuration>
      <property>
        <name>dfs.replication</name>
        <value>3</value>
      </property>
      <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///export/data/hadoop/hdfs/name</value>
      </property>
      <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///export/data/hadoop/hdfs/data</value>
      </property>
      <!-- 可选:启用 WebHDFS -->
      <!--
      <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
      </property>
      -->
    </configuration>
    EOF
    
  • workers 文件(列出所有 DataNode 主机名,一行一个)
    cat >$HADOOP_HOME/etc/hadoop/workers <<'EOF'
    node2
    node3
    EOF
    
  • 目录创建与权限(所有节点)
    sudo mkdir -p /export/data/hadoop/hdfs/{name,data}
    sudo chown -R hadoop:hadoop /export/data/hadoop
    

四 启动与验证

  • 首次格式化 NameNode(仅在 NameNode 执行一次)
    sudo -u hadoop hdfs namenode -format
    
  • 启动 HDFS
    # 在 NameNode 执行
    sudo -u hadoop start-dfs.sh
    
  • 验证进程与连通性
    # 各节点应出现相应进程:NameNode/DataNode/SecondaryNameNode
    jps
    
    # 查看 HDFS 报告
    sudo -u hadoop hdfs dfsadmin -report
    
    # 创建测试目录并写入文件
    sudo -u hadoop hdfs dfs -mkdir -p /user/hadoop
    echo "Hello HDFS" | sudo -u hadoop hdfs dfs -put - /user/hadoop/hello.txt
    sudo -u hadoop hdfs dfs -cat /user/hadoop/hello.txt
    
  • Web 界面
    • NameNode Web UI:http://node1:9870(Hadoop 3.x 默认端口为 9870,2.x 为 50070
    • 如同时部署 YARN,可访问 ResourceManager:http://node1:8088

五 常见问题与优化

  • 目录与权限
    • 未设置 hadoop.tmp.dir 时,Hadoop 可能使用 /tmp/hadoop-,系统重启后会被清理,导致需反复 format;务必显式配置并预先创建目录。
  • SSH 免密
    • 至少保证 NameNode → 所有节点 免密;首次分发公钥可用 ssh-copy-id
  • 防火墙与 SELinux
    • 测试环境可临时关闭防火墙(如 iptables/firewalld);Debian 11 默认未启用 SELinux,无需额外处理。
  • 端口与连通性
    • 确认 8020/9000(HDFS RPC)、9870(NameNode Web)等端口未被占用且节点互通;云环境需放行安全组规则。
  • 副本与容量
    • dfs.replication 不宜超过 DataNode 数量;生产建议 3 副本 起步,结合磁盘容量与容错需求调整。
  • 资源与调优
    • 根据节点 内存/CPU 调整 HDFS 堆大小DataNode 并发线程;合理设置 ulimit -n(打开文件数)。

0