温馨提示×

Debian HDFS配置新手指南

小樊
39
2025-11-19 15:50:56
栏目: 智能运维

Debian 上搭建与配置 HDFS 的简明步骤


一 环境准备与安装

  • 安装 Java(推荐 OpenJDK 11
    • 执行:sudo apt update && sudo apt install -y openjdk-11-jdk
    • 验证:java -versionjavac -version
  • 创建专用用户(推荐 hadoop
    • 执行:sudo adduser --disabled-password --gecos "" hadoop && sudo usermod -aG sudo hadoop
  • 下载并解压 Hadoop(示例 3.3.15
    • 执行:
      wget https://downloads.apache.org/hadoop/core/hadoop-3.3.15/hadoop-3.3.15.tar.gz
      sudo tar -xzvf hadoop-3.3.15.tar.gz -C /usr/local
      sudo mv /usr/local/hadoop-3.3.15 /usr/local/hadoop
      sudo chown -R hadoop:hadoop /usr/local/hadoop
      
  • 配置环境变量(以 hadoop 用户执行)
    • 编辑 ~/.bashrc/etc/profile
      export HADOOP_HOME=/usr/local/hadoop
      export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
      
    • 生效:source ~/.bashrc
  • 主机名与免密登录
    • /etc/hosts 为各节点添加主机名映射(如:192.168.1.10 namenode,192.168.1.11 datanode1)
    • namenode 生成密钥并分发到各 datanode
      ssh-keygen -t rsa -b 2048 -N "" -f ~/.ssh/id_rsa
      ssh-copy-id hadoop@datanode1
      
  • 时间同步
    • 建议安装并启用 NTPsudo apt install -y ntp && sudo timedatectl set-ntp true

二 核心配置

  • 配置目录与环境
    • 配置文件路径:$HADOOP_HOME/etc/hadoop/
    • 设置 JAVA_HOME:编辑 hadoop-env.sh
      export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
      
  • 基础配置示例
    • core-site.xml
      <configuration>
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://namenode:8020</value>
        </property>
        <property>
          <name>hadoop.tmp.dir</name>
          <value>/usr/local/hadoop/tmp</value>
        </property>
      </configuration>
      
    • hdfs-site.xml
      <configuration>
        <property>
          <name>dfs.replication</name>
          <value>3</value>
        </property>
        <property>
          <name>dfs.namenode.name.dir</name>
          <value>file:/usr/local/hadoop/hdfs/namenode</value>
        </property>
        <property>
          <name>dfs.datanode.data.dir</name>
          <value>file:/usr/local/hadoop/hdfs/datanode</value>
        </property>
        <property>
          <name>dfs.blocksize</name>
          <value>134217728</value> <!-- 128MB -->
        </property>
      </configuration>
      
    • 目录准备与权限(以 hadoop 用户执行)
      sudo mkdir -p /usr/local/hadoop/hdfs/{namenode,datanode}
      sudo chown -R hadoop:hadoop /usr/local/hadoop
      
  • 说明
    • fs.defaultFS 指定默认文件系统地址(RPC 端口通常为 8020)。
    • dfs.replication 为副本数;单机或测试可设为 1
    • dfs.blocksize 为块大小,默认 128MB

三 启动与验证

  • 首次启动前格式化 NameNode(仅一次)
    • 执行:hdfs namenode -format
  • 启动 HDFS
    • namenode 执行:$HADOOP_HOME/sbin/start-dfs.sh
  • 进程与端口检查
    • 进程:jps(应看到 NameNodeDataNode,如配置了 Secondary 还会看到 SecondaryNameNode
    • Web UI:访问 http://namenode:50070
    • 命令行健康检查:hdfs dfsadmin -report
  • 基本文件操作
    hdfs dfs -ls /
    hdfs dfs -mkdir -p /user/hadoop/input
    echo "Hello, HDFS" > test.txt
    hdfs dfs -put test.txt /user/hadoop/input/
    hdfs dfs -cat /user/hadoop/input/test.txt
    
  • 常见问题速查
    • 端口被占用:确认 8020/50070 未被占用或已放行
    • Java 路径错误:检查 hadoop-env.shJAVA_HOME
    • 权限问题:确保 Hadoop 目录属主为 hadoop:hadoop
    • 节点不通:核对 /etc/hosts、SSH 免密、防火墙策略

四 常见问题与优化

  • 防火墙与端口
    • 放行常用端口:8020(NameNode RPC)、50070(NameNode Web)、50075(DataNode Web)、50010(DataNode 数据传输)等,或临时关闭防火墙用于排查
  • 时间与时钟偏差
    • 启用 NTP 同步,避免 HDFS 因时间漂移导致异常
  • 副本与容量规划
    • 副本数 dfs.replication 建议与 DataNode 数量匹配;单机测试可设为 1
  • 块大小
    • 大文件场景可适当增大 dfs.blocksize(如 256MB/512MB),减少小文件数量
  • 日志与目录
    • 自定义 hadoop.tmp.dirHADOOP_LOG_DIR 到容量充足的磁盘分区,便于排查与扩容

五 可选扩展 高可用 HA

  • 前置组件
    • 部署 ZooKeeper(建议 3 节点)并启动服务
  • 核心配置思路(在 hdfs-site.xml 中)
    • 定义命名服务:dfs.nameservices=ns1
    • 指定主备 NameNode:dfs.ha.namenodes.ns1=nn1,nn2
    • RPC 与 HTTP 地址:dfs.namenode.rpc-address.ns1.nnXdfs.namenode.http-address.ns1.nnX
    • 共享编辑日志:dfs.namenode.shared.edits.dir=qjournal://nn1:8485;nn2:8485;jn1:8485/ns1
    • 故障转移代理:dfs.client.failover.proxy.provider.ns1=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
    • 隔离方法:dfs.ha.fencing.methods=sshfence,并配置 dfs.ha.fencing.ssh.private-key-files
    • 自动故障转移:dfs.ha.automatic-failover.enabled=true
  • 初始化与验证
    • 按官方步骤初始化 JournalNode、格式化 ZKFC,启动 ZooKeeperFailoverController,验证主备切换

0