温馨提示×

HDFS数据节点如何配置

小樊
43
2025-11-22 22:57:41
栏目: 编程语言

HDFS 数据节点配置全流程

一 环境与前置准备

  • 在所有节点安装相同版本的 Java JDKHadoop,并统一 HADOOP_HOME / JAVA_HOME 等环境变量;建议使用 NTP 做时间同步,保证时钟偏差在可接受范围内。
  • 建立 hadoop 用户(或统一运维账号),并在 NameNode ↔ 各 DataNode 之间配置 SSH 免密登录,便于统一启停与分发配置。
  • 网络与主机名解析:确保节点间 互通,在 /etc/hosts 或 DNS 中正确解析 NameNode 主机名 与各 DataNode 主机名
  • 目录与权限:预先创建数据目录(如 /data/hadoop/dfs/data),归属 hadoop:hadoop,权限 0755/0700 视安全策略而定。

二 核心配置文件与参数

  • 配置分发路径:Hadoop 配置通常位于 $HADOOP_HOME/etc/hadoop/。将 NameNode 上的配置统一分发到各 DataNode(如 scp 整个 conf 目录),避免版本与参数不一致。
  • core-site.xml(集群入口与基础目录)
    • fs.defaultFS:NameNode RPC 地址,例如 hdfs://namenode:8020(新版本常用 8020,老版本可能为 9000)。
    • hadoop.tmp.dir:本地临时目录,例如 /data/hadoop/tmp
  • hdfs-site.xml(数据节点相关)
    • dfs.datanode.data.dir:数据块本地存储目录,可配置多磁盘多路径(逗号分隔),例如 /data1/hadoop/dfs/data,/data2/hadoop/dfs/data
    • dfs.replication:副本数,生产常用 3
    • 可选网络与注册项:如 dfs.namenode.datanode.registration.ip-hostname-check=false(在主机名解析复杂或跨网段时可临时使用)。
  • 环境变量与脚本
    • hadoop-env.sh 中设置 JAVA_HOME 与必要的堆内存(如 HADOOP_HEAPSIZE)。
    • 启动脚本位于 $HADOOP_HOME/sbin/(如 start-dfs.sh、hadoop-daemon.sh)。

三 启动与验证

  • 首次部署时,仅在 NameNode 执行一次 hdfs namenode -format 初始化元数据目录(已有集群扩容无需再次格式化)。
  • 启动集群:在 NameNode 执行 start-dfs.sh,脚本会自动在相应节点拉起 DataNode;如需单独启停,可在目标 DataNode 使用 $HADOOP_HOME/sbin/hadoop-daemon.sh start|stop datanode
  • 验证节点与健康状况:
    • 执行 hdfs dfsadmin -report,查看 Live datanodes 列表与容量、负载信息。
    • 通过 NameNode Web UI(HTTP 50070/9870 端口)Datanodes 页面核对新节点状态与块报告。

四 扩容磁盘与数据重平衡

  • 新增磁盘或目录后,先在各 DataNode 创建目录并更新 dfs.datanode.data.dir(多路径以逗号分隔)。
  • 动态生效:对目标 DataNode 执行 hdfs dfsadmin -reconfig datanode :50020 start,并用 … -status 查看进度,避免直接重启造成短暂停服。
  • 运行 HDFS Balancer 重新均衡数据分布:
    • 临时调整带宽(示例 100 MB/s):hdfs dfsadmin -setBalancerBandwidth 104857600
    • 执行均衡(阈值示例 10%):hdfs balancer -threshold 10
      带宽与阈值可按集群负载与业务窗口期调整。

五 节点退役与维护

  • 退役(Decommission):将节点从服务中安全移除,数据块按 副本因子 在其他节点补齐后自动转为 DECOMMISSIONED
  • 维护(Maintenance):短时维护可将节点置为 IN_MAINTENANCE,达到最低副本要求后立即进入维护态,并支持 超时自动退出,无需完整副本复制。
  • 操作方式:通过 主机级配置文件 指定目标 DataNode 的管理状态(支持 hostname-onlyJSON 两种格式),随后由 NameNode 驱动状态流转与块复制/校验。

0