Ubuntu 上 Hadoop 数据存储配置指南:从入门到实操全攻略

一、核心概念与目录映射
- 在 Ubuntu 系统中部署 Hadoop 时,持久化数据通常分为 HDFS 与本地磁盘两部分:HDFS 负责分布式数据块存储,而本地磁盘则用于保存 NameNode 和 DataNode 的元数据及块文件,是 Hadoop 数据存储结构中的关键组成。
- 关键目录与用途说明(以下示例基于 Hadoop 3.x,Hadoop 2.x 的部分配置键名略有不同):
- HDFS 命名空间元数据:由dfs.namenode.name.dir指定(本地目录),主要存放 FsImage、EditLog 等核心元数据文件。
- HDFS 数据块目录:由dfs.datanode.data.dir指定(本地目录),用于存储实际的数据块文件。
- 临时目录:由hadoop.tmp.dir指定(本地目录),保存 Hadoop 运行过程中的临时文件与缓存数据。
- 常见路径示例:/data/hadoop/namenode、/data/hadoop/datanode、/var/hadoop/tmp。
- 版本差异提醒:Hadoop 3.x 的 Web UI 默认端口通常为9870(NameNode)和9868(SecondaryNameNode);而 Hadoop 2.x 中常见端口为50070和50090。在配置 Hadoop 存储路径和访问管理页面时,务必与当前使用的版本保持一致。
二 配置步骤与关键参数
- 准备目录(示例中将 HDFS 存储目录设置为 /data/hadoop,临时目录设置为 /var/hadoop/tmp):
- sudo mkdir -p /data/hadoop/{namenode,datanode}
- sudo mkdir -p /var/hadoop/tmp
- sudo chown -R $USER:$USER /data/hadoop /var/hadoop/tmp
- 配置环境变量(可写入 $HADOOP_HOME/etc/hadoop/hadoop-env.sh 或 ~/.bashrc):
- export JA VA_HOME=/usr/lib/jvm/ja va-11-openjdk-amd64
- export HADOOP_HOME=/opt/hadoop-3.3.4
- export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 配置 core-site.xml(用于指定默认文件系统与 Hadoop 临时目录):
- fs.defaultFShdfs://localhost:9000
- hadoop.tmp.dirfile:///var/hadoop/tmp
- 配置 hdfs-site.xml(设置本地存储目录与副本数量):
- dfs.replication1
- dfs.namenode.name.dirfile:///data/hadoop/namenode
- dfs.datanode.data.dirfile:///data/hadoop/datanode
- Hadoop 3.x 建议同时配置 Web 管理地址:
- dfs.namenode.http-addresslocalhost:9870
- dfs.namenode.secondary.http-addresslocalhost:9868
- 首次启动前需要格式化 NameNode:
- hdfs namenode -format
- 启动与验证步骤:
- start-dfs.sh
- 执行 jps 应看到 NameNode、DataNode、(可选)SecondaryNameNode 等进程
- 访问:https://localhost:9870(Hadoop 3.x)即可查看 Hadoop HDFS 存储状态、节点信息与容量情况。
三 更换或迁移存储路径
- 规划新的 Hadoop 存储路径(例如:/mnt/ssd/hadoop/namenode 与 /mnt/ssd/hadoop/datanode),并提前完成目录创建与权限分配:
- sudo mkdir -p /mnt/ssd/hadoop/{namenode,datanode}
- sudo chown -R $USER:$USER /mnt/ssd/hadoop
- 修改配置文件(core-site.xml 与 hdfs-site.xml)中的相关目录参数,将其更新为新的存储路径。
- 推荐采用安全迁移方式,避免 HDFS 数据不一致:
- 停止集群:stop-dfs.sh
- 迁移旧数据:将原有 namenode 与 datanode 目录中的内容复制到新目录,并保持权限一致
- 重新启动集群:start-dfs.sh
- 验证迁移结果:使用 jps 检查 Hadoop 进程状态,并访问 NameNode Web UI 确认新的存储路径和可用磁盘容量是否生效。
四 多磁盘与多目录扩展
- 为了提升 Hadoop 存储容量与磁盘吞吐能力,可以在单个 DataNode 上配置多个本地数据目录(多个路径使用逗号分隔):
- dfs.datanode.data.dirfile:///data1/hadoop/datanode,file:///data2/hadoop/datanode
- 建议将不同数据目录分布在不同物理磁盘上,以减少 I/O 资源竞争;同时要确保各目录所在磁盘具备充足的可用空间与inode资源。
- 需要注意的是,副本数(dfs.replication)表示跨节点的数据冗余机制,并不等同于本地多目录配置;在生产环境中,Hadoop 通常建议将副本数设置为3。
五 常见问题与排查
- 权限不足导致无法写入本地目录:创建目录后应执行 chown/chmod,确保运行 Hadoop 的用户对相关目录拥有读写权限。
- 端口被占用或 Web UI 无法访问:检查 9870/9868 或 50070/50090 等端口是否被占用,必要时修改端口配置或关闭冲突进程;如果部署在云服务器上,还需放行安全组和防火墙规则。
- 更换存储路径后未生效或启动失败:请确认集群已完全停止、目录内容已正确复制、配置路径书写无误(以**file://**开头),然后再重新启动并验证。
- 伪分布式环境中没有 DataNode:这类问题通常是由于多次格式化导致 clusterID 不一致。可清理旧的namenode与datanode目录后重新格式化,或手动统一 clusterID 后再启动 Hadoop。
