温馨提示×

如何部署Linux HDFS环境

小樊
43
2025-09-23 07:23:17
栏目: 智能运维

Linux环境下HDFS部署指南(伪分布/完全分布式模式)

一、部署前准备

1. 环境要求

  • 操作系统:推荐使用Linux(如CentOS 7/8、Ubuntu 20.04及以上),需root或具有sudo权限的用户。
  • Java环境:Hadoop依赖JDK 8或11(Hadoop 3.x及以上不兼容JDK 17及以上),安装后配置JAVA_HOME环境变量(如export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64),并添加至PATH
  • Hadoop安装包:从Apache官网下载稳定版本(如3.3.6),解压至指定目录(如/opt/hadoop-3.3.6)。

2. 关键配置

  • 关闭防火墙:避免拦截HDFS进程通信(生产环境建议配置防火墙规则放行端口)。
    systemctl stop firewalld && systemctl disable firewalld
    
  • 配置SSH免密登录:实现NameNode对DataNode的无密码访问(伪分布模式需自收,完全分布式需NameNode访问所有DataNode)。
    ssh-keygen -t rsa -P ""  # 生成密钥(一路回车)
    ssh-copy-id localhost    # 复制公钥至本机(伪分布)
    ssh-copy-id hadoop-dn1   # 复制公钥至DataNode(完全分布)
    ssh localhost            # 测试免密登录
    
  • 修改SELinux:若系统启用SELinux,需关闭以避免权限问题。
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    reboot  # 重启生效
    

3. 主机规划(完全分布式模式)

  • NameNode(NN):负责元数据管理(如hadoop-nn1:192.168.1.100)。
  • DataNode(DN):负责数据存储(如hadoop-dn1:192.168.1.101、hadoop-dn2:192.168.1.102)。
  • ResourceManager(RM):负责资源调度(可与NN同节点)。
  • NodeManager(NM):负责任务执行(与DN同节点)。

二、伪分布模式部署(单机模拟分布式)

伪分布模式适合开发测试,所有HDFS进程(NameNode、DataNode、SecondaryNameNode)运行在同一台机器的不同JVM中。

1. 解压与配置环境变量

tar -zxvf hadoop-3.3.6.tar.gz -C /opt/
echo "export HADOOP_HOME=/opt/hadoop-3.3.6" >> ~/.bashrc
echo "export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin" >> ~/.bashrc
source ~/.bashrc

2. 修改核心配置文件($HADOOP_HOME/etc/hadoop目录)

(1)core-site.xml(HDFS核心参数)

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9820</value>  <!-- HDFS命名服务地址(伪分布用localhost) -->
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/hadoop-3.3.6/tmp</value>  <!-- 临时数据存储路径(需绝对路径) -->
  </property>
</configuration>

(2)hdfs-site.xml(HDFS存储参数)

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>  <!-- 副本数(伪分布仅1台DataNode,设为1) -->
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/opt/hadoop-3.3.6/data/namenode</value>  <!-- NameNode元数据存储路径 -->
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/opt/hadoop-3.3.6/data/datanode</value>  <!-- DataNode数据存储路径 -->
  </property>
  <property>
    <name>dfs.namenode.http-address</name>
    <value>localhost:9870</value>  <!-- NameNode Web UI端口(Hadoop 3.x默认9870) -->
  </property>
</configuration>

3. 格式化NameNode

首次启动前需初始化元数据(仅执行一次,若重复格式化需删除hadoop.tmp.dirdata目录)。

hdfs namenode -format

成功标志:日志中出现“Successfully formatted”。

4. 启动HDFS集群

start-dfs.sh  # 启动NameNode和DataNode

5. 验证部署

  • 查看进程jps应显示NameNodeDataNodeSecondaryNameNode(伪分布模式下SecondaryNameNode会启动)。
  • 访问Web UI:浏览器输入http://localhost:9870,查看HDFS状态(如DataNode是否在线)。
  • 命令行操作
    hdfs dfs -mkdir /user  # 创建HDFS目录
    hdfs dfs -put /etc/hosts /user  # 上传本地文件至HDFS
    hdfs dfs -ls /user  # 查看HDFS目录内容
    

三、完全分布式模式部署(多节点生产环境)

完全分布式模式适合生产环境,服务部署在多台机器上,实现真正的分布式存储和计算。

1. 分发Hadoop安装包

将NameNode上的Hadoop目录同步至所有DataNode(保持路径一致)。

scp -r /opt/hadoop-3.3.6 hadoop-dn1:/opt/
scp -r /opt/hadoop-3.3.6 hadoop-dn2:/opt/

2. 配置核心文件(所有节点)

(1)core-site.xml

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop-nn1:9000</value>  <!-- NameNode的RPC地址(替换为实际主机名/IP) -->
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/hadoop-3.3.6/tmp</value>  <!-- 临时数据存储路径 -->
  </property>
</configuration>

(2)hdfs-site.xml

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>3</value>  <!-- 副本数(生产环境建议3,根据DataNode数量调整) -->
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/opt/hadoop-3.3.6/data/namenode</value>  <!-- NameNode元数据存储路径 -->
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/opt/hadoop-3.3.6/data/datanode</value>  <!-- DataNode数据存储路径 -->
  </property>
  <property>
    <name>dfs.namenode.http-address</name>
    <value>hadoop-nn1:9870</value>  <!-- NameNode Web UI端口 -->
  </property>
  <property>
    <name>dfs.datanode.http.address</name>
    <value>0.0.0.0:9864</value>  <!-- DataNode Web UI端口 -->
  </property>
</configuration>

(3)workers文件(仅NameNode节点)

列出所有DataNode的hostname(Hadoop 3.x替代2.x的slaves文件)。

hadoop-dn1
hadoop-dn2

3. 启动HDFS集群

start-dfs.sh  # 启动NameNode和所有DataNode

4. 验证部署

  • 查看进程
    • NameNode节点:jps应显示NameNodeSecondaryNameNode
    • DataNode节点:jps应显示DataNode
  • 访问Web UI
    • NameNode UI:http://hadoop-nn1:9870,查看DataNode数量(应为2)。
    • DataNode UI:http://hadoop-dn1:9864http://hadoop-dn2:9864
  • 命令行操作
    hdfs dfsadmin -report  # 查看集群状态(DataNode数量、存储容量)
    hdfs dfs -put /local/file /hdfs/path  # 上传文件至HDFS
    hdfs dfs -get /hdfs/path /local/dir  # 下载文件至本地
    

四、常见问题排查

1. 启动失败

  • 原因:配置文件路径错误、主机名解析失败、端口冲突。
  • 解决:检查core-site.xml中的fs.defaultFS/etc/hosts中的主机名映射,使用netstat -tulnp查看端口占用。

2. DataNode无法启动

  • 原因hadoop.tmp.dirdfs.datanode.data.dir目录权限不足、磁盘空间满。
  • 解决:修改目录权限为755chmod -R 755 /opt/hadoop-3.3.6/tmp),清理磁盘空间。

3. 上传文件失败

  • 原因:HDFS未启动、存储路径不存在、副本数超过DataNode数量。
  • 解决:启动HDFS(start-dfs.sh),检查dfs.datanode.data.dir是否存在,调整dfs.replication(不超过DataNode数量)。

通过以上步骤,可完成Linux环境下HDFS的伪分布/完全分布式部署。伪分布模式适合快速验证HDFS功能,完全分布式模式适合生产环境的大规模数据存储需求。

0