JAVA_HOME
环境变量(如export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
),并添加至PATH
。/opt/hadoop-3.3.6
)。systemctl stop firewalld && systemctl disable firewalld
ssh-keygen -t rsa -P "" # 生成密钥(一路回车)
ssh-copy-id localhost # 复制公钥至本机(伪分布)
ssh-copy-id hadoop-dn1 # 复制公钥至DataNode(完全分布)
ssh localhost # 测试免密登录
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
reboot # 重启生效
伪分布模式适合开发测试,所有HDFS进程(NameNode、DataNode、SecondaryNameNode)运行在同一台机器的不同JVM中。
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
$HADOOP_HOME/etc/hadoop
目录)<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>
<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>
首次启动前需初始化元数据(仅执行一次,若重复格式化需删除hadoop.tmp.dir
和data
目录)。
hdfs namenode -format
成功标志:日志中出现“Successfully formatted”。
start-dfs.sh # 启动NameNode和DataNode
jps
应显示NameNode
、DataNode
、SecondaryNameNode
(伪分布模式下SecondaryNameNode会启动)。http://localhost:9870
,查看HDFS状态(如DataNode是否在线)。hdfs dfs -mkdir /user # 创建HDFS目录
hdfs dfs -put /etc/hosts /user # 上传本地文件至HDFS
hdfs dfs -ls /user # 查看HDFS目录内容
完全分布式模式适合生产环境,服务部署在多台机器上,实现真正的分布式存储和计算。
将NameNode上的Hadoop目录同步至所有DataNode(保持路径一致)。
scp -r /opt/hadoop-3.3.6 hadoop-dn1:/opt/
scp -r /opt/hadoop-3.3.6 hadoop-dn2:/opt/
<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>
<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>
列出所有DataNode的hostname(Hadoop 3.x替代2.x的slaves
文件)。
hadoop-dn1
hadoop-dn2
start-dfs.sh # 启动NameNode和所有DataNode
jps
应显示NameNode
、SecondaryNameNode
。jps
应显示DataNode
。http://hadoop-nn1:9870
,查看DataNode数量(应为2)。http://hadoop-dn1:9864
、http://hadoop-dn2:9864
。hdfs dfsadmin -report # 查看集群状态(DataNode数量、存储容量)
hdfs dfs -put /local/file /hdfs/path # 上传文件至HDFS
hdfs dfs -get /hdfs/path /local/dir # 下载文件至本地
core-site.xml
中的fs.defaultFS
、/etc/hosts
中的主机名映射,使用netstat -tulnp
查看端口占用。hadoop.tmp.dir
或dfs.datanode.data.dir
目录权限不足、磁盘空间满。755
(chmod -R 755 /opt/hadoop-3.3.6/tmp
),清理磁盘空间。start-dfs.sh
),检查dfs.datanode.data.dir
是否存在,调整dfs.replication
(不超过DataNode数量)。通过以上步骤,可完成Linux环境下HDFS的伪分布/完全分布式部署。伪分布模式适合快速验证HDFS功能,完全分布式模式适合生产环境的大规模数据存储需求。